• ベストアンサー

UPDATEの記述について

お世話になります。 最近ようやく少しはPHPやMySQLに慣れてきたと思ったんですが・・・・ やはりまだまだで、UPDATE文で躓いています。 ---------------------------------------------------------- $up = "UPDATE DB名 SET check= '1',staff='$staff' where id='$idg' AND code='$codeg' AND shop='hoge'"; $rs = mysql_query($up); if($rs){ print "$idg $codeg $staff が検品処理実施<br>"; } else{ print "$idg $codeg $staff が書き込みNG\n<br>"; } ---------------------------------------------------------- 上記の記述はおかしいのでしょうか? 同じような記述で別のphpは動いているのですが・・。 何が原因かわからず悩んでいます。特に間違った記述をしてるとは 思えないのですが。 試しに変数を明示的にしてやってみても、やはりUPできないでした。 UPDATEの記述をする際、一番気をつけることは何でしょうか?? またどうすればうまくアップ出来るか・・・ よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

1 PC1-001<input type="checkbox" name="codeg" value="PC1-001"> 2 PC1-002<input type="checkbox" name="codeg" value="PC1-002"> 3 PC1-003<input type="checkbox" name="codeg" value="PC1-003"> としているということですか? 元のhtmlを書いてもらうと解説がしやすいかと。 1 PC1-001<input type="checkbox" name="codeg[]" value="PC1-001"> 2 PC1-002<input type="checkbox" name="codeg[]" value="PC1-002"> 3 PC1-003<input type="checkbox" name="codeg[]" value="PC1-003"> なら$_REQUEST["codeg"]は複数のデータを配列で受けられます。 配列を文字列におとして処理をする必要がでてきます。

hajimete-san
質問者

お礼

色々試した結果、無事自分の想定してた 動きが完成しました。 原因かどうかはわからないのですが、テーブルの項目名が悪かった? ような気がします。 check → chkへ変更したらすんなり行きました。 こんなことってあるのでしょうか?? とりあえず解決できてうれしいです。 色々指南ありがとうございましたm(__)m

hajimete-san
質問者

補足

yambejp様、またまた回答ありがとうございます。 #3の私の補足ですが、間違えでした。問題なく 配列のデータを一つ一つ受けて正常でした。 ・・しかしながら、どうしてもUPDATEが出来ないです。 yambejp様の上記にある配列を文字列の処理というのが 関係してますでしょうか??配列のデータをそのまま はwhereで条件で使ってもうまくいかないのでしょうか?? 今はこんなメッセージが出るようになってしまいました。 ----------------------------------------------------- You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''kenpin' SET check='1',kenpins='AOKI' where eggocode='PC1-002A' ----------------------------------------------------- バージョンがおかしいのでしょうか?? php4.4.4、mysql4.0.24を使用してます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

好き嫌いにもよりますが、以下のようにすると間違いが見つけやすいです。 ・SQL文はすべて大文字にする。 ・データベース名やテーブル名、フィールド名はすべてバッククォーテーションでくくる。 ・データは基本的にシングルクォーテーションでくくる。 ・PHPからわたす変数には{}をつかう。 ・SQL文はヒアドキュメントをつかい、見やすいよう適当なところで改行する。 以上をふまえて $up =<<<eof UPDATE `DB名` SET `check`=1 ,`staff`='{$staff}' WHERE 1 AND `id`='{$idg}' AND `code`='{$codeg}' AND `shop`='hoge' eof; AND `shop`='hoge' のところはもしかして AND `shop`='{$hoge}' ってことはないですよね?

hajimete-san
質問者

お礼

yambejp様、回答ありがとうございます。 記述内容、受けがちゃんとなってるか、確認出来ました。 ありがとうございます。 うまく変数は受けているのですが、やはりUPDATEは出来ないです・。 $sql="select * from DB名 where id='$idg' ~ "で、 mysql_num_row()でちゃんとあるのかを試して、やはり条件にあった データは存在します。 データはあるのに・・・更新できないなんて(涙) また頑張ってみます、ありがとうございます。 再度気づいた点ございましたら、回答お願い致します。

hajimete-san
質問者

補足

今原因らしいのを見つけたような気がします。 元々$codeの中身は前処理から配列のデータを受けるように しているんですが、変数の中身が 例 code='PC1-004''PC1-002 と前処理のチェックボックスで選んだものが、全部一つのところに 受けているようです。 なので、うまく更新できないのではないかと・・。 ちなみに前処理は・・ 番号 名前 チェックボックス 1 PC1-001 ■ 2 PC1-002 ■ 3 PC1-003 ■ のようなチェックボックスで選択したものを受け、 チェックしたものを更新する処理です。

回答No.1

$up = "UPDATE DB名 SET check= '1',staff='" . $staff . "' where id='" . $idg . "' AND code='" . $codeg . "' AND shop='hoge'"; シングルとダブルのクォーテーションの違いだと思います。 上記でいけるかと思います。

hajimete-san
質問者

お礼

briantaphy様、回答ありがとうございます。 試してみたのですが、やはりダメでした(TT コピペもしてみたのですが、やはりこちらもダメでした。 再度色々試してみます、ありがとうございます。m(__)m

関連するQ&A

  • php ログインについて

    php ログインについて phpでログイン画面を作っているのですがログインできません。エラー等々もでず、「スタッフコードかパスワードが違います」になります。ちなみにDBにはスタッフのデータはしっかり存在します。 コードとパスワードを正しく入力しているにもかかわらずログインできません。 ソースはこちらです [staff_login.php] <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>ログイン</title> </head> <body> スタッフログイン<br/> <br/> <form method="post" action="staff_login_check.php"> スタッフコード<br/> <input type="text" name="code"><br/> パスワード<br/> <input type="password" name="pass"><br/> <br/> <input type="submit" value="ログイン"> </form> </body> </html> [staff_login_check.php] <?php try { $staff_code=$_POST['code']; $staff_pass=$_POST['pass']; $staff_code=htmlspecialchars($staff_code); $staff_pass=htmlspecialchars($staff_pass); $staff_pass=md5($staff_pass); $dsn='mysql:dbname=*****;host=********'; $user='*********'; $password='********'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT name FROM mst_staff WHERE code=? AND password=?'; $stmt=$dbh->prepare($sql); $data[]=$staff_code; $data[]=$staff_pass; $stmt->execute($data); $dbh = null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { print'スタッフコードかパスワードが違います<br/>'; print'<a href="staff_login.html">戻る</a>'; } else { header('Location: staff_top.php'); } } catch(Exception $e) { print'エラーが発生しました'; exit(); } ?> 解決方法、ご指摘ございましたら教えていただきたいです。

    • ベストアンサー
    • PHP
  • 副問い合わせ

    UPDATE `hoge` SET `area` = ( SELECT area FROM `hogeArea` WHERE `code` = "001000" ) WHERE `code` = "000019" AND `type` = "02"; 上記のようなUPDATEは無理ですか? MySQLは副問い合わせは無理でしょうか?

  • UPDATEできない

    PHP初心者です。 先日より、PHPプログラムを勉強しており、「参照」、「追加」、「修正」、「削除」の一連の流れを理解しました。 スタッフ登録をするという仮定で、上記流れをPHPでできるようになり、データベースの更新もできるようになりました。 登録 → 表示 や、一覧を表示して、ラジオボタンで選んだスタッフの情報修正などです。 現在、上記流れの延長として、商品の登録から、修正、削除に挑戦していますが、情報修正時、ページはスタッフ登録と同じように最後までエラー無く進みますが、データベースが更新されません。 何故初心者の為、解決策の探し方すら判らない為困っています。 どなたかお解りになる方、恐れ入りますがご教授頂ければ幸いです。 データを修正するソースです <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>どっとこむ</title> </head> <body> <?php try { $pro_code = $_POST['code']; $pro_name = $_POST['name']; $pro_price = $_POST['price']; $pro_code = htmlspecialchars($pro_code); $pro_name = htmlspecialchars($pro_name); $pro_pass = htmlspecialchars($pro_price); $dsn = 'mysql:dbname=xxxx;host=xxxxx'; $user = 'userid'; $password = 'password'; $dbh = new PDO($dsn,$user, $password); $dbh->query('SET NAMES utf8'); $sql = 'UPDATE mst_productSET name=?,price=? WHERE code=?'; $stmt = $dbh->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $data[] = $pro_code; $stmt->execute($data); $dbh = null; print 'を追加しました。<br />'; } catch (Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <a href="pro_list.php">戻る</a> </body> </html> 上記表示される前のページ(修正する情報を入力するページ)から、上記ページまではデータが渡っている状態です。 <?php print $pro_name; ?> のようにすると、渡された文字列が表示されます。 わかり難い説明で恐縮です。 宜しくお願い致します。

    • 締切済み
    • PHP
  • mmysql のupdate構文でプレイスホルダを使用したとき

    phpとmysqlでプログラミングをしています。 updateでプレイスホルダを使用して特定のデータを更新したいのですが、WHEREによる条件指定をどこに書いてよいのかわかりません。 以下のようにWHERE no=$noをいろいろなところに突っ込んで実行しますが、更新されずにデータが新規に追加されてしまいます。 正しい書き方を教えていただけないでしょうか? public function updContent($data){ $no = array_pop($data); $r = $this->db->query("SET NAMES sjis"); $sth = $this->db->prepare("UPDATE $this->bbs SET ( fdate, unit, division, title, content) WHERE no=$no VALUES(?,?,?,?,?)"); $rs = $this->db->execute($sth,$data); if(DB::isError($rs)){ print_r($data); print"<br />"; die(__FUNCTION__ . "<br /> 更新失敗:".$rs->getDebugInfo()); } return 1; }

    • ベストアンサー
    • PHP
  • 初心者です:yum updateコマンドでPHPやMySQLもアップデートされる?

    サーバ初心者です。安価なレンタル専用サーバでいろいろ練習中です。 WADAX専用サーバ エントリープラン GUIソフト:PLESK使用 Red Hat Enterprise Linux 5 PHP 5.1 MySQL 5.0 <質問> yum updateで表示される項目を毎回全てインストール(yコマンド)していると、PHP及びMySQLも自動でアップデートされていくのでしょうか?たとえば、現在のPHP 5.1がPHP 5.2や5.2にアップデートされたり、現在のMySQL 5.0がMySQL 5.1や5.2(将来的には)にアップデートされたりしますか? それとも、PHPやMySQLなどをアップデートする場合、yumではなく、全く別の操作が必要となるのでしょうか? また、将来的にPHP 6やMySQL 6のメジャーバージョンアップが公開された場合、Red Hat Enterprise Linux 5のyum updateを継続していればPHP 5がPHP 6にアップデートされたり、MySQL 5がMySQL 6にアップデートされたりするのでしょうか? WADAXのサポートに聞いたら、サポート対象外ということでした。 参考サイト等ありましたら、URLもお願いします。 よろしくお願いします。

  • 初心者ですがupdateがうまくいかずに困っています

    PHPとMysqlで顧客管理ソフトを作っていますが、updateが「会社登録内容の更新を完了しました。」と出るのですが、見てみると変更されていません。どなたか原因を教えて頂けないでしょうか。 require_once("config.php"); //MySQLに接続 if (! $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD)) { exit("MySQLに接続できませんでした!"); } mysql_query("set names sjis"); //データベースを選択・ $selectdb = mysql_select_db($DBNAME,$con); //idに一致するレコード数を取得します。 $sql = "select count(*) as cnt from kaisya where id = $id "; $rst = mysql_query($sql, $con); $col = mysql_fetch_array($rst); $reccnt = $col["cnt"]; mysql_free_result($rst); if ($reccnt > 0){ $sql ="update kaisya set syamei = '" . $syamei ."', yomi = '" . $yomi ."', gyousyu = '" . $gyousyu ."', zip = '" . $zip ."', fuken = '" . $fuken ."', sityou = '" . $sityou ."', tatemono = '" . $tatemono ."', tel = '" . $tel ."', fax = '" . $fax ."', tantou = '" . $tantou ."', yomi1 = '" . $yomi1 ."', yakusyoku = '" . $yakusyoku ."', keitai = '" . $keitai ."', mail = '" . $mail ."', tantou1 = '" . $tantou1 ."', memo = '" . $memo . "' where id = ' $id '" ; $rst = mysql_query($sql, $con); if ($rst) { //成功したとき $body = "<B>会社登録内容の更新を完了しました。</B>"; } else { //失敗したとき $body = mysql_error(); } print "$body<BR><BR><BR><A href='kensaku.php'>検索一覧へ戻る</A>"; } else { //一致するレコードがないとき // $body =mysql_error(); print "<B>間違っています!</B><BR><BR><INPUT type='button' value=' 戻る ' onClick='history.back()'>"; } //MySQLとの接続を閉じます $con = mysql_close($con);

    • ベストアンサー
    • MySQL
  • php + mysql でフォーム作成時のエラー

    データベースから取り出したデータをラジオボタンで選択し、それをデータベース(別のテーブル)に追加させる機能を作りたいです。 非常に初歩的なことだとは思うのですがご教授ください。 MySQL 4.0.27 PHP 5.2.11 <FORM ACTION="cone3.php" METHOD="post"> <?php $srv = ""; // サーバー名 $id = ""; // ユーザーID $passwd = "; // パスワード $dbn = ""; // データベース名 $sql = "SELECT code, lname, lecturer, kind, gradetype FROM Lecture"; // SQL文 // データベースに接続する $db = mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs = mysql_query($sql,$db); //--- テーブルのレイアウト --- 開始 -----------------------> print("<TABLE><TR>"); print("<TR><th> </th><th>講義名</th><th>教員</th><th>科目区分</th><th>配当学年</th></tr>"); while($row = mysql_fetch_array($rs)) { print '<tr><td><input type="radio" name="regist" value="$row['code']"></td>'; print '<td>' . $row['lname'] . '</td>'; print '<td>' . $row['lecturer'] . '</td>'; print '<td>' . $row['kind'] . '</td>'; print '<td>' . $row['gradetype'] . '</td>'; print '</tr>'; print ("</TR>"); } print("</TABLE>"); print_r($_POST); echo "<br />\n"; mysql_free_result($rs); mysql_close($db); //--- 終了 ---> ?> <input type="submit" name="submit" value="送信"> </form> 以上のようなソースでラジオボタンで配列の$row[code]の値を送りたいんですがうまくいきません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 飲食店のメニュー表を作成中。MySQLの内容を出力する時に画像が×表示になります。<img src="">の使い方を教えて下さい。

    PHP+MySQLで飲食店のメニュー表を作成しています。 -------------------------------------------------- MySQLのテーブル -------------------------------------------------- CREATE TABLE item ( id int(11) NOT NULL auto_increment, menu varchar(50) NOT NULL, comment text NOT NULL, upfilename TEXT NOT NULL, imgdir TEXT NOT NULL, PRIMARY KEY (id) ); id = オートナンバー menu = メニュー名 comment = メニューのコメント upfilename = アップロードするイメージファイル名 imgdir = アップしたイメージファイルのディレクトリ -------------------------------------------------- 質問 -------------------------------------------------- 「imgdir」には、常に「/web/img/」がMySQLに登録されるようにしています。 「menu.php」で出力する時に、「upfilename」にデータが存在しない場合は、×が表示されます。 メニューの写真がない場合もあります。 こういう場合は、どのような処理を行えばよいのでしょうか? よろしくお願い致します。 -------------------------------------------------- menu.php -------------------------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> </head> <body> <?php $dbHandle = mysql_connect("mysql**.lolipop.jp","LA**","g**") or die("can not connect db\n"); $db = "LA**"; $sql = "SELECT id, menu, comment, upfilename, imgdir FROM item ORDER BY id DESC"; $rs = mysql_db_query($db,$sql); while ($item = mysql_fetch_array($rs)){ print $item['id'] . "<BR>"; print $item['menu'] . "<BR>"; print $item['comment'] . "<BR>"; print "<img src=".$item['imgdir'] . $item['upfilename'].">" . "<BR>"; print "<hr>"; } mysql_free_result($rs); mysql_close($dbHandle); ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPエラーについて

    PHPで修正をしたら下記のエラーがでました。 Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /usr/home/g105427/html/test/blog_special.php on line 199 ble border="0" cellpadding="3" cellspacing="0"> <?php $i = 0; do { $i = $i + 1; ?> <tr> <td><IMG src="image/list.gif" width="13" height="13" border="0"><font color="#FF8000"><a href="blog_02.php?id=<?php echo $row_rs_blog_02['id']; ?>"> <?php echo mb_substr($row_rs_blog_02['title'],0,50); ?> <?php if (mb_strlen($row_rs_blog_02['title']) >= '50') { echo('…'); } ?> </a> <?php echo "("; echo substr($row_rs_blog_02['date'], 4,2); echo "/"; echo substr($row_rs_blog_02['date'], 6,2); echo ")"; ?></font></td> </tr> <?php } while ($row_rs_blog_02 = mysql_fetch_assoc($rs_blog_02) and $i < 2); ?> </table> <BR> <BR> ちなみに199行目は ?php } while ($row_rs_blog_02 = mysql_fetch_assoc($rs_blog_02) and $i < 2); ?> になっています。 教えてください。 説明が悪くてすいません。

    • ベストアンサー
    • PHP
  • MySQLに登録したデータをPHPで出力したい。

    PHP+MySQLで飲食店のメニュー表を作成しています。 -------------------------------------------------- MySQLのテーブル -------------------------------------------------- CREATE TABLE item ( id int(11) NOT NULL auto_increment, menu varchar(50) NOT NULL, comment text NOT NULL, upfilename TEXT NOT NULL, imgdir TEXT NOT NULL, PRIMARY KEY (id) ); id = オートナンバー menu = メニュー名 comment = メニューのコメント upfilename = アップロードするイメージファイル名(jpg) imgdir = アップしたイメージファイルのディレクトリ -------------------------------------------------- 下記の「menu.php」を実行すると 「Parse error: syntax error, unexpected T_VARIABLE」 と表示されます。 print "<img src="$item['imgdir'] . $item['upfilename']">" . "<BR>"; の部分がおかしいことは分かるのですが、調べても解決できなかったので投稿しました。 「アップしたイメージファイルのディレクトリ」と「イメージファイル名」を連結して「imgタグ」で表示させようと考えました。 「メニュー名」「コメント」「写真の名前」「写真」を表示させたいです。 よろしくお願い致します。 -------------------------------------------------- menu.php -------------------------------------------------- <html xmlns=" http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>メニュー</title> </head> <body> <?php $dbHandle = mysql_connect("mysql**.lolipop.jp","LA**","g**") or die("can not connect db\n"); $db = "LA**"; $sql = "SELECT id, menu, comment, upfilename, imgdir FROM item ORDER BY id DESC"; $rs = mysql_db_query($db,$sql); while ($item = mysql_fetch_array($rs)){ print $item['id'] . "<BR>"; print $item['menu'] . "<BR>"; print $item['comment'] . "<BR>"; print $item['upfilename'] . "<BR>"; print $item['imgdir'] . $item['upfilename'] . "<BR>"; print "<img src="$item['imgdir'] . $item['upfilename']">" . "<BR>"; print "<hr>"; } mysql_free_result($rs); mysql_close($dbHandle); ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう