• 締切済み

MySQLにデータが書き込まれない

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]; ============== 一体何が間違っているのか、エラーコードが出ないので解りません。 何処が間違っているのでしょうか? 教えて頂けると大変助かります。 どうぞ宜しくお願いします。

みんなの回答

noname#87667
noname#87667
回答No.4

なんだか話がややこしくなってきましたが、大丈夫でしょうか? 憶測ですが、画像1をそのまま、画像2と画像3を差し替えということは、SQLの$mpic[1]に画像2の情報が入っているのではないでしょうか?そうだとすれば、旧・画像1が画像2にupdateされるのはおわかりですよね? 画像2、画像3を新しい画像に差し替えるだけであれば、ファイルの差し替えだけで十分だと思うので、SQLでのupdateは必要ないような気がします。 どうしてもSQLでのupdateを必要とするなら、まず既存の情報をDBから取得して、その中から変更したい部分だけを差し替えて、update文にsetしてください。

edokko-x
質問者

お礼

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

edokko-x
質問者

補足

nanasi1976さま、 アドバイス、どうも有難うございます。 はい、その通りです。 ファイルの差し替えとは、どのようにして差し替えするのでしょうか? すみません、PHPとMySQLについてはまだ勉強中なのもので。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

とりあえず書き込みの権限はあるのでしょうか? 参照権限しかないならできないのは当たり前ですね またデバッグとして mysql_query($query);の行を mysql_query($query) or die(mysql_error()); に置き換えてエラーを拾えないかみてみるとどうでしょう?

edokko-x
質問者

お礼

yambejpさま、どうも有難うございます。 echo $query; を使用して間違ってる箇所を見つけ修正し、 問題なくMySQLに書き込み(アップデート)が出来ました。 回答番号:No.1 nanasi1976さまへの 補足・御礼メッセージを見て頂けると分かると思いますが、 又新たな問題で先へ進めません。 お忙しい中すみません、何処が間違っているのか、 教えて頂けるととても助かります。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

php.iniのdisplay_errorsはOn、error_reportingはE_ALL & ~E_NOTICEなどに なっていますか? (php4だとdisplay_errorsは無いように書いてありますけど、個人的には 覚えてません・・・) http://jp2.php.net/manual/ja/errorfunc.configuration.php#ini.display-errors http://jp2.php.net/manual/ja/errorfunc.configuration.php#ini.error-reporting あと、echo $queryで出力されたSQLをMySQLで直接発行した場合に正常に発行されますか? トランザクション(コミット)はどうでしょうか?

edokko-x
質問者

お礼

naktakさま、どうも有難うございます。 echo $query; を使用して間違ってる箇所を見つけ修正し、 問題なくMySQLに書き込み(アップデート)が出来ました。 回答番号:No.1 nanasi1976さまへの 補足・御礼メッセージを見て頂けると分かると思いますが、 又新たな問題で先へ進めません。 お忙しい中すみません、何処が間違っているのか、 教えて頂けるととても助かります。

全文を見る
すると、全ての回答が全文表示されます。
noname#87667
noname#87667
回答No.1

こういう場合って、基本的に2つしか原因がないんですよね。 1.SQL文が間違っている(DB接続が正しくない場合も含む) mysql_query($query); の前に「echo $query;」を入れて、そのSQL文が正しく動くかどうかをチェックしてみてください。 2.$queryの作り方が間違っている。 1.とほぼ同じなのですが、こちらは根本的なSQLの構文エラーを疑ってください。

edokko-x
質問者

お礼

nanasi1976さま、どうも有難うございます。 echo $query; を使用して間違ってる箇所を見つけ修正し、 問題なくMySQLに書き込み(アップデート)が出来たのですが、 今度は、元の画像ファイルを新たな画像ファイルに置き換える場合、 元の画像ファイルを先ずサーバーから消去させてから新しい画像ファイルをアップロードする というのにする為、新たなコード(上記コード参照)を加え、このコードで問題なく動くのですが、ここで問題です。 例えば、写真1~3(picture_1, picture_2, picture_3) の中には既に画像ファイルがあるとします (写真4~9は画像ファイルがありません)。 その写真1の画像はそのままで、写真2と写真3だけ 新たな画像ファイルに置き換えようとした時、 何故か、新たな写真2の画像ファイルは写真1になり、 新たな写真3の画像ファイルは写真2になってしまうのです。 これを写真3だけ新たな画像ファイルに置き換えようとしても、 写真3の画像ファイルはアップデートされず、 代わりに写真1のところにその新たな画像ファイルが置き換えられるのです。 何処が間違ってるのでしょうか? それとも何処が欠けてるコードがあるのでしょうか? すみませんが教えて頂けると助かります。 宜しくお願いします。

edokko-x
質問者

補足

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);

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mysqlのスマートな書き方

    MySQL5.1とPHP5を使っています。 phpからmysqlのtestテーブルにアクセスして点数順に生徒名一覧を作成したいと思っています。 イメージとしてはこのような感じです。○○○は名前になります。 90点以上 ○○○ ○○○ 80点以上 ○○○ ○○○ ○○○ 70点以上 ○○○ ○○○ ○○○ ○○○ このような一覧を表示するため、下記のように作成したところ上記のような表示をしてくれました。 しかしながら、同じmysql_queryを何度も使っていますし、DBに負担が掛かりそうな気がします(本当に負荷があるのかは分かりませんが・・・) もっとスマートな書き方はないものでしょうか。 よろしくお願い致します。 echo "90点以上"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if ($res['tensu'] >= 90){ echo $res['name']; echo "<br>" ; } } echo "80点以上~90点未満"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($res['tensu'] >= 80 and $res['tensu'] < 90 ){ echo $res['name']; echo "<br>" ; } } echo "70点以上~80点未満"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($res['tensu'] >= 70 and $res['tensu'] < 80 ){ echo $res['name']; echo "<br>" ; } }

    • ベストアンサー
    • MySQL
  • MYSQL、PHPを使ってのデータとそのデータ数表示について

    よろしくお願いいたします。 このようなテーブルを組んでいます。  game        maker  マリオ      任天堂  カービィ     任天堂  FF        スクエニ   ドラクエ     スクエニ  ソニック     セガ このテーブルを使って、  任天堂(2)  スクエニ(3)  セガ(1) というように、メーカーが作ったゲームの数がカッコ内ででるように、makerを並べたいと思っています。 これはどのように組んだらよいのでしょうか? ちなみに、今はこのように組んで、(もちろんですが)失敗しています。。 ---------------------------------------------------------------- <?php mysql_connect('***','***','***'); mysql_select_db('***'); $sql = "select * from test"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo $row["maker"]; echo "<br />"; } } ?> ---------------------------------------------------------------- 初歩的な質問で大変恐縮ですが、よろしくお願いいたします!

    • ベストアンサー
    • PHP
  • PHP+MySQLで文字化けします

    PHPでMySQLに接続して以下のように テーブルの作成・そのテーブルにInsertをすると文字化けします。 PHPサーバーの文字コードはEUC-JP、MySQLの文字コードはlatin1です。 PHPのバージョンは5.04でMySQLのバージョンは4.1.20です。 無料レンタルサーバーなので詳細な設定は変更できません。 <?php // データベースに接続し、選択する mb_language('Japanese'); mb_internal_encoding('UTF-8'); mb_http_output('UTF-8'); $link = mysql_connect('localhost',"user","password") or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('user') or die('Could not select database'); mysql_query("SET NAMES UTF-8",$link); // SQL クエリを実行する $name = 'test'; $query = "CREATE TABLE IF NOT EXISTS `$name` ( `id` varchar(50) primary key, `name` varchar(50), `pw` varchar(50) );"; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); $query = "INSERT INTO $name (id, name) VALUES('test', 'テスト');"; $mojicode = mb_detect_encoding($query); $query = mb_convert_encoding($query, "UTF-8", "$mojicode"); $result = mysql_query($query) or die('Query failed: ' . mysql_error()); // HTML に結果を出力する echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; // 結果セットを開放する mysql_free_result($result); // 接続を閉じる mysql_close($link); ?> まだまだPHP、MySQL共に技術が未熟なため 説明不足な部分が多々あるかと思いますがご教授お願いします。

    • ベストアンサー
    • PHP
  • php+mysql

    $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); val_dunpを使い確認したところ bool(false) >となってしまい失敗します falseに返さないようにするにはどうしたらいいでしょうか? 簡易掲示板作成 タイトル 本文記載後下にタイトル 本文 書き込み日時が 書き込まれていく仕組みです <?php $link = mysql_connect('localhost','user','pass','dbname'); if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; if ( $subject !=='' && $honbun !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun ) . "'" ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($link,$query); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].'<br>'; } ?> </body> </html>

    • ベストアンサー
    • MySQL
  • MySQL insertができない

    商品名とその値段を挿入しようとおもっているのですが、下記のようなエラーがでて先に進めずにいます。 Query failed: Unknown column 'item' in 'field list' <?php if($contact=mysql_connect("host","admin","root")){ echo "サーバに接続しました。<br>"; } mysql_select_db("watanabe", $contact); $query = 'INSERT INTO list(item,price) VALUES("りんご","100")'; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); if($result){ echo"追加に成功しました。"; }else{ echo"追加に失敗しました。"; } ?> ご回答願えますでしょうか?

    • ベストアンサー
    • PHP
  • php+MySqlでの検索結果について

    以下のソースで検索結果が表示されるのですが、検索結果が多数ある場合、例えば10件ずつ表示して「次へ」「前へ戻る」「最終頁」等のリンクを貼る方法が分かりません。 また、検索結果から並べ替え(データの更新日時等から)も出来ればと思い質問させていただきました。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>検索</title> </head> <body> <?php # 入力値に不正なデータがないかなどをチェック。 function checkInput($var) { if (is_array($var)) { return array_map('checkInput', $var); } else { if (get_magic_quotes_gpc()) { // magic_quotes_gpc対策 $var = stripslashes($var); } if (preg_match('/\0/', $var)) { // NULLバイト攻撃対策 die('不正な入力です。'); } if (!mb_check_encoding($var, 'UTF-8')) { // 文字エンコードの確認 die('不正な入力です。'); } return $var; } } function h($string) { // HTMLでのエスケープ処理をする return htmlspecialchars($string, ENT_QUOTES); } # POSTされたデータをチェック。 $_POST = checkInput($_POST); // データベース設定 $dbServer = 'localhost'; $dbUser = 'user'; $dbPass = 'password'; $dbName = 'sample'; $flag = TRUE; // MySQLデータベースに接続 if (!$link = mysql_connect($dbServer, $dbUser, $dbPass)) { $flag = FALSE; } // データベース選択 else if (!mysql_select_db($dbName, $link)) { $flag = FALSE; } // 文字エンコードの指定(PHP5以降かつMySQL 4.1以降) else if (!mysql_set_charset('utf8', $link)) { $flag = FALSE; } # $flagの値の判定 if ($flag === FALSE) { echo 'データベースエラー'; } else if (isset($_POST['data'])) { $data = $_POST['data']; $dataList = explode(' ', mb_convert_kana($data, 's')); $sql = 'SELECT * FROM search WHERE 1'; foreach ($dataList as $word) { if ($word == '') continue; $sql .= sprintf(" AND data LIKE '%s'", '%' . mysql_real_escape_string($word) . '%'); } echo '<p>SQL: ' . h($sql) . '</p>'; $query = mysql_query($sql, $link); if (!$query) { echo 'データベースエラー'; } else if (mysql_num_rows($query) == 0) { echo '<p>「' . h($data) . '」はデータベースに登録がありません。</p>'; } else { echo '<p>「' . h($data) . '」はデータベースに登録がありました。</p>'; echo '<p>検索結果</p>'; echo '<table border="1">'; echo ' <tr>'; echo ' <th>ID</th>'; echo ' <th>データ</th>'; echo ' </tr>'; while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { echo ' <tr>'; echo ' <td>' . h($row['id']) . '</td>'; echo ' <td>' . h($row['data']) . '</td>'; echo ' </tr>'; } echo '</table>'; } $sql = 'SELECT * FROM search'; $query = mysql_query($sql, $link); if (!$query) { echo 'データベースエラー'; } else { echo '<p>データベースの内容一覧</p>'; echo '<table border="1">'; echo ' <tr>'; echo ' <th>ID</th>'; echo ' <th>データ</th>'; echo ' </tr>'; while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { echo ' <tr>'; echo ' <td>' . h($row['id']) . '</td>'; echo ' <td>' . h($row['data']) . '</td>'; echo ' </tr>'; } echo '</table>'; } } ?> <form method="post" action=""> <p>検索ワードを入力して下さい</p> <input type="text" name="data" /> <input type="submit" value="検索する" /> </form> </body> </html> このソースのどの部分に記述してよいのか等も含めてご伝授頂きたく思います。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • mysql結果を使ってもう1度mysql検索

    DB(mysql)とプログラムが以下のようにあります。 <?php /////////////////テーブルAを検索//////////////////////// $db = mysql_connect("***","***","***"); mysql_select_db("*****",$db); $result = mysql_query("select * from tableA where day = 0601",$db); if ($myrow = mysql_fetch_array($result)) { do { printf("<font color=\"blue\">$myrow[name]$myrow[day]</font><br>"); } while ($myrow = mysql_fetch_array($result)); } else { echo ""; } ////////結果を使ってテーブルAをもう1度検索///////////// $db = mysql_connect("***","***","***"); mysql_select_db("*****",$db); $result = mysql_query("select * from tableA where sports = '$myrow[day]'",$db); if ($myrow = mysql_fetch_array($result)) { do { printf("<font color=\"green\">$myrow[mise]$myrow[name]</font><br>"); } while ($myrow = mysql_fetch_array($result)); } else { echo ""; } ?> テーブルA name | day | sports | A君 | 0511 | バスケット | A君 | 0601 | サッカー | B君 | 0601 | テニス | B君 | 0503 | 水泳 | C君 | 0602 | 競歩 | C君 | 0512 | 乗馬 | dayが0601のA君とB君のsports全部を結果として表示したいのですが、エラーが出たりして思ったようにはできませんでした。 $resultなどが重複してしまうらしいのです。 A君 「バスケット・サッカー」 B君 「テニス・水泳」 と、するにはどうすればいいのでしょうか?よろしくお願いしますm(_ _)m

    • 締切済み
    • PHP
  • phpとmysqlが連携できない

    問題のコードです。 何度やっても失敗と表示されます。 接続は問題ないと思います。 お願いします。 $db = mysql_connect("localhost", "user", "user_パスワード", "db1") or die("Connection error"); $query = "select * from menbers"; $result = mysql_query($query, $db); if($result){ echo "成功"; }else{ echo "失敗"; }

  • PHPでの不思議なふるまいが理解できません。MySQLのデータ照合

    PHPでユーザーにURLでパラメーター付メールを送り、そのURLをクリックするとMySQLに保存されているユーザー名「hoge」というレコード内のsignという項目の値が0なら1にするというプログラムを書いています。 phpadminでsignが0なのを確認しているのに、URLをクリックしてプログラムを走らせると、//■■■■(3)■■■■の場所で終わってしまいます。(つまり0だと認識されていない?)その場合、echo $pass;の表示はなぜか1です。 echo $pass;は、//■■■■(2)■■■■のsignを1にする前の処理なのになぜ前もって1となるかが分からない点です。 そこでコメントされている■■■■(1)■■■■のexit;を、コメントアウトさせてからプログラムを走らせるとecho $pass;の表示は0です。 この現象が分かる方は教えて欲しいです。 宜しくお願いします。 //(これより以前省略) $db = mysql_connect($db_host,$db_user,$db_passwd); $sql = "select * from $db_table where username like 'hoge'"; $result = mysql_query($sql) or die("SQLに失敗しました".mysql_error()); //■■■■MySQLに保存されているデータを抜き出し $row = mysql_fetch_array($result); $sign = $row{'sign'}; $pass = $row{'password'}; echo $pass; //■■■■メールに書いてあるクリックされたURLの分解 $a = explode('&', $_SERVER['QUERY_STRING']); $urlpass = split('=', $a[1]); //exit;//■■■■(1)■■■■ if ( $sign == 0 ){ if ( $urlpass == $pass ){sign $sql = "update $db_table set sign = 1 where username like 'hoge'";■■■■(2)■■■■ $result = mysql_query($sql) or die("SQLに失敗しました".mysql_error()); if ($result){ echo"認証できました。"; } }else{ echo"認証できません。"; } }else{//$signが0以外なら echo"認証済みです";//■■■■(3)■■■■ }

    • ベストアンサー
    • PHP
  • php+MYSQL

    タイトル 本文 書き込み後保存を押すと 下に書き込み保存されていく形です タイトル 本文 書き込み日時 タイトル 本文 書き込み日時 エラー自体は出てないのですが書き込みが反映されません val_dunpで調べたところ resource(7) of type (mysql result) > このように出てきましたなにか文自体に必要なものがないのでしょうか? <?php $link = mysql_connect('localhost','user','pass'); if (!$link) { die('接続に失敗しました。'.mysql_error()); } $db_selected = mysql_select_db('ogawa',$link); if(!$db_selected) { die('データベース選択に失敗しました。'.mysql_error()); } $res = mysql_query('SELECT * FROM test'); if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; $kakikomi = $_POST['kakikomi']; if ( $subject !=='' && $honbun !=='' && $kakikomi !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," ."kakikomi," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun )."'," . "'" . mysql_real_escape_string( $link, $kakikomi)."'," ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($query,$link); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT id,subject,honbun,kakikomi FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].''.$val['kakikomi'].'<br>'; } ?> </body> </html>