• ベストアンサー
  • 困ってます

UPDATEの記述について

  • 質問No.2725280
  • 閲覧数66
  • ありがとう数3
  • 回答数3

お礼率 60% (35/58)

お世話になります。
最近ようやく少しは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の記述をする際、一番気をつけることは何でしょうか??
またどうすればうまくアップ出来るか・・・
よろしくお願いします。

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 51% (3827/7415)

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

お礼率 60% (35/58)

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を使用してます。
投稿日時:2007/02/06 10:26
お礼コメント
hajimete-san

お礼率 60% (35/58)

色々試した結果、無事自分の想定してた
動きが完成しました。

原因かどうかはわからないのですが、テーブルの項目名が悪かった?
ような気がします。
check → chkへ変更したらすんなり行きました。
こんなことってあるのでしょうか??
とりあえず解決できてうれしいです。

色々指南ありがとうございましたm(__)m
投稿日時:2007/02/07 18:28

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 51% (3827/7415)

好き嫌いにもよりますが、以下のようにすると間違いが見つけやすいです。

・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

お礼率 60% (35/58)

今原因らしいのを見つけたような気がします。
元々$codeの中身は前処理から配列のデータを受けるように
しているんですが、変数の中身が

code='PC1-004''PC1-002
と前処理のチェックボックスで選んだものが、全部一つのところに
受けているようです。

なので、うまく更新できないのではないかと・・。

ちなみに前処理は・・
番号 名前 チェックボックス
1 PC1-001 ■
2 PC1-002 ■
3 PC1-003 ■
のようなチェックボックスで選択したものを受け、
チェックしたものを更新する処理です。
投稿日時:2007/02/05 18:31
お礼コメント
hajimete-san

お礼率 60% (35/58)

yambejp様、回答ありがとうございます。

記述内容、受けがちゃんとなってるか、確認出来ました。
ありがとうございます。

うまく変数は受けているのですが、やはりUPDATEは出来ないです・。
$sql="select * from DB名 where id='$idg' ~ "で、
mysql_num_row()でちゃんとあるのかを試して、やはり条件にあった
データは存在します。
データはあるのに・・・更新できないなんて(涙)

また頑張ってみます、ありがとうございます。
再度気づいた点ございましたら、回答お願い致します。
投稿日時:2007/02/05 15:23
  • 回答No.1

ベストアンサー率 50% (1/2)

$up = "UPDATE DB名 SET check= '1',staff='" . $staff . "' where id='" . $idg . "' AND code='" . $codeg . "' AND shop='hoge'";

シングルとダブルのクォーテーションの違いだと思います。
上記でいけるかと思います。
お礼コメント
hajimete-san

お礼率 60% (35/58)

briantaphy様、回答ありがとうございます。

試してみたのですが、やはりダメでした(TT
コピペもしてみたのですが、やはりこちらもダメでした。

再度色々試してみます、ありがとうございます。m(__)m
投稿日時:2007/02/05 15:12
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ