dポイントプレゼントキャンペーン実施中!

PHPバージョン4.4.4を使用しています。

画像を複数同時アップロードする(下記コード参照)のを作成している最中で、
画像ファイルは問題なくアップロード出来るのですが、
そのアップロードされたファイル名だけを
MySQLに書き込み(アップデート)をしたいのですが、
何故か出来ません。

==============
$count = 0;

<コード省略>

$count++;
$uploaded[$count] = $this_upload;

if (array_key_exists(1, $uploaded)) {
$mpic[1]=", picture_1='".$uploaded[1]['large']."', picture_1t='".$uploaded[1]['small']."'";
} else {
$mpic[1] = '';
}

if (array_key_exists(2, $uploaded)) {
$mpic[2]=", picture_2='".$uploaded[2]['large']."', picture_2t='".$uploaded[2]['small']."'";
} else {
$mpic[2] = '';
}

if (array_key_exists(3, $uploaded)) {
$mpic[3]=", picture_3='".$uploaded[3]['large']."', picture_3t='".$uploaded[3]['small']."'";
} else {
$mpic[3] = '';
}

if (array_key_exists(4, $uploaded)) {
$mpic[4]=", picture_4='".$uploaded[4]['large']."', picture_4t='".$uploaded[4]['small']."'";
} else {
$mpic[4] = '';
}

if (array_key_exists(5, $uploaded)) {
$mpic[5]=", picture_5='".$uploaded[5]['large']."', picture_5t='".$uploaded[5]['small']."'";
} else {
$mpic[5] = '';
}

if (array_key_exists(6, $uploaded)) {
$mpic[6]=", picture_6='".$uploaded[6]['large']."', picture_6t='".$uploaded[6]['small']."'";
} else {
$mpic[6] = '';
}

if (array_key_exists(7, $uploaded)) {
$mpic[7]=", picture_7='".$uploaded[7]['large']."', picture_7t='".$uploaded[7]['small']."'";
} else {
$mpic[7] = '';
}

if (array_key_exists(8, $uploaded)) {
$mpic[8]=", picture_8='".$uploaded[8]['large']."', picture_8t='".$uploaded[8]['small']."'";
} else {
$mpic[8] = '';
}

if (array_key_exists(9, $uploaded)) {
$mpic[9]=", picture_9='".$uploaded[9]['large']."', picture_9t='".$uploaded[9]['small']."'";
} else {
$mpic[9] = '';
}



$todayis = strftime('%A, %B %#d, %Y - %H:%M:%S ') ;
$who = $session['first_name'];


$query = "LOCK TABLES $table3_1 WRITE";
mysql_query($query);

$query = "UPDATE $table3_1 SET date_time_add_pic_2 = '$todayis',
by_who_pic_2 = '$who',
$mpic[1] $mpic[2] $mpic[3] $mpic[4] $mpic[5] $mpic[6] $mpic[7] $mpic[8] $mpic[9],
date_time_rmv_pic = '',
by_who_pic_rmv = ''
WHERE cID = '$c_id'";

mysql_query($query);

$query = "UNLOCK TABLES";
mysql_query($query);

==============

下記のようなコードを入れてみると
内容があるものはちゃんと表示されますし、
内容がないものは表示されません。

==============
echo $mpic[1];
echo $mpic[2];
echo $mpic[3];
echo $mpic[4];
echo $mpic[5];
echo $mpic[6];
echo $mpic[7];
echo $mpic[8];
echo $mpic[9];
==============

一体何が間違っているのか、エラーコードが出ないので解りません。

何処が間違っているのでしょうか?
教えて頂けると大変助かります。
どうぞ宜しくお願いします。

A 回答 (4件)

こういう場合って、基本的に2つしか原因がないんですよね。


1.SQL文が間違っている(DB接続が正しくない場合も含む)
mysql_query($query); の前に「echo $query;」を入れて、そのSQL文が正しく動くかどうかをチェックしてみてください。

2.$queryの作り方が間違っている。
1.とほぼ同じなのですが、こちらは根本的なSQLの構文エラーを疑ってください。

この回答への補足

if (array_key_exists(1, $uploaded)) {
$ch1 = 1;
$mpic[1]=", picture_1='".$uploaded[1]['large']."', picture_1t='".$uploaded[1]['small']."'";
} else {
$ch1 = 0;
$mpic[1] = '';
}
if (array_key_exists(2, $uploaded)) {
$ch2 = 1;
$mpic[2]=", picture_2='".$uploaded[2]['large']."', picture_2t='".$uploaded[2]['small']."'";
} else {
$ch2 = 0;
$mpic[2] = '';
}
if (array_key_exists(3, $uploaded)) {
$ch3 = 1;
$mpic[3]=", picture_3='".$uploaded[3]['large']."', picture_3t='".$uploaded[3]['small']."'";
} else {
$ch3 = 0;
$mpic[3] = '';
}
if (array_key_exists(4, $uploaded)) {
$ch4 = 1;
$mpic[4]=", picture_4='".$uploaded[4]['large']."', picture_4t='".$uploaded[4]['small']."'";
} else {
$ch4 = 0;
$mpic[4] = '';
}
if (array_key_exists(5, $uploaded)) {
$ch5 = 1;
$mpic[5]=", picture_5='".$uploaded[5]['large']."', picture_5t='".$uploaded[5]['small']."'";
} else {
$ch5 = 0;
$mpic[5] = '';
}

<6~9同じく省略>


// if you want to replace the pics, delete old pic and upload new pic
if (!empty($row['picture_1'])) {
if ($ch1==1) {
unlink('../img/' . $row['picture_1']);
unlink('../img/' . $row['picture_1t']);
}
}

if (!empty($row['picture_2'])) {
if ($ch2==1) {
unlink('../img/' . $row['picture_2']);
unlink('../img/' . $row['picture_2t']);
}
}

if (!empty($row['picture_3'])) {
if ($ch3==1) {
unlink('../img/' . $row['picture_3']);
unlink('../img/' . $row['picture_3t']);
}
}

if (!empty($row['picture_4'])) {
if ($ch4==1) {
unlink('../img/' . $row['picture_4']);
unlink('../img/' . $row['picture_4t']);
}
}

if (!empty($row['picture_5'])) {
if ($ch5==1) {
unlink('../img/' . $row['picture_5']);
unlink('../img/' . $row['picture_5t']);
}
}

if (!empty($row['picture_6'])) {
if ($ch6==1) {
unlink('../img/' . $row['picture_6']);
unlink('../img/' . $row['picture_6t']);
}
}

if (!empty($row['picture_7'])) {
if ($ch7==1) {
unlink('../img/' . $row['picture_7']);
unlink('../img/' . $row['picture_7t']);
}
}

if (!empty($row['picture_8'])) {
if ($ch8==1) {
unlink('../img/' . $row['picture_8']);
unlink('../img/' . $row['picture_8t']);
}
}

if (!empty($row['picture_9'])) {
if ($ch9==1) {
unlink('../img/' . $row['picture_9']);
unlink('../img/' . $row['picture_9t']);
}
}


$todayis = strftime('%A, %B %#d, %Y - %H:%M:%S ') ;
$who = $session['first_name'];


$query = "LOCK TABLES $table3_1 WRITE";
mysql_query($query);

$query = "UPDATE $table3_1 SET date_time_add_pic_2 = '$todayis',
by_who_pic_2 = '$who'
$mpic[1] $mpic[2] $mpic[3] $mpic[4] $mpic[5] $mpic[6] $mpic[7] $mpic[8] $mpic[9],
date_time_rmv_pic = '',
by_who_pic_rmv = ''
WHERE cID = '$c_id'";

mysql_query($query);

$query = "UNLOCK TABLES";
mysql_query($query);

補足日時:2009/05/07 19:48
    • good
    • 0
この回答へのお礼

nanasi1976さま、どうも有難うございます。

echo $query;
を使用して間違ってる箇所を見つけ修正し、
問題なくMySQLに書き込み(アップデート)が出来たのですが、

今度は、元の画像ファイルを新たな画像ファイルに置き換える場合、
元の画像ファイルを先ずサーバーから消去させてから新しい画像ファイルをアップロードする
というのにする為、新たなコード(上記コード参照)を加え、このコードで問題なく動くのですが、ここで問題です。

例えば、写真1~3(picture_1, picture_2, picture_3)
の中には既に画像ファイルがあるとします
(写真4~9は画像ファイルがありません)。

その写真1の画像はそのままで、写真2と写真3だけ
新たな画像ファイルに置き換えようとした時、
何故か、新たな写真2の画像ファイルは写真1になり、
新たな写真3の画像ファイルは写真2になってしまうのです。

これを写真3だけ新たな画像ファイルに置き換えようとしても、
写真3の画像ファイルはアップデートされず、
代わりに写真1のところにその新たな画像ファイルが置き換えられるのです。

何処が間違ってるのでしょうか?
それとも何処が欠けてるコードがあるのでしょうか?
すみませんが教えて頂けると助かります。

宜しくお願いします。

お礼日時:2009/05/07 19:47

なんだか話がややこしくなってきましたが、大丈夫でしょうか?



憶測ですが、画像1をそのまま、画像2と画像3を差し替えということは、SQLの$mpic[1]に画像2の情報が入っているのではないでしょうか?そうだとすれば、旧・画像1が画像2にupdateされるのはおわかりですよね?

画像2、画像3を新しい画像に差し替えるだけであれば、ファイルの差し替えだけで十分だと思うので、SQLでのupdateは必要ないような気がします。

どうしてもSQLでのupdateを必要とするなら、まず既存の情報をDBから取得して、その中から変更したい部分だけを差し替えて、update文にsetしてください。

この回答への補足

nanasi1976さま、
アドバイス、どうも有難うございます。

はい、その通りです。

ファイルの差し替えとは、どのようにして差し替えするのでしょうか?
すみません、PHPとMySQLについてはまだ勉強中なのもので。

補足日時:2009/05/12 04:26
    • good
    • 0
この回答へのお礼

nanasi1976さま、

やっと問題が解決しました。
どうも有難うございます。

お礼日時:2009/05/13 03:45

とりあえず書き込みの権限はあるのでしょうか?


参照権限しかないならできないのは当たり前ですね

またデバッグとして
mysql_query($query);の行を
mysql_query($query) or die(mysql_error());
に置き換えてエラーを拾えないかみてみるとどうでしょう?
    • good
    • 0
この回答へのお礼

yambejpさま、どうも有難うございます。

echo $query;
を使用して間違ってる箇所を見つけ修正し、
問題なくMySQLに書き込み(アップデート)が出来ました。

回答番号:No.1 nanasi1976さまへの
補足・御礼メッセージを見て頂けると分かると思いますが、
又新たな問題で先へ進めません。

お忙しい中すみません、何処が間違っているのか、
教えて頂けるととても助かります。

お礼日時:2009/05/07 20:01

php.iniのdisplay_errorsはOn、error_reportingはE_ALL & ~E_NOTICEなどに


なっていますか?
(php4だとdisplay_errorsは無いように書いてありますけど、個人的には
覚えてません・・・)
http://jp2.php.net/manual/ja/errorfunc.configura …
http://jp2.php.net/manual/ja/errorfunc.configura …

あと、echo $queryで出力されたSQLをMySQLで直接発行した場合に正常に発行されますか?

トランザクション(コミット)はどうでしょうか?
    • good
    • 0
この回答へのお礼

naktakさま、どうも有難うございます。

echo $query;
を使用して間違ってる箇所を見つけ修正し、
問題なくMySQLに書き込み(アップデート)が出来ました。

回答番号:No.1 nanasi1976さまへの
補足・御礼メッセージを見て頂けると分かると思いますが、
又新たな問題で先へ進めません。

お忙しい中すみません、何処が間違っているのか、
教えて頂けるととても助かります。

お礼日時:2009/05/07 20:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!