• ベストアンサー

PHPのupdate文はこれでいいのでしょうか?

php初心者ですが、どうしても出来ないので ご教授お願いいたします。 phpでmysqlのupdate をしたいのですが、 参考書などは私が作ろうとしている物より複雑で シンプルに書き換えることが出来ませんん。 会員登録をPHPで作ろうとしています。 会員自身でPR文と更新日を書き換えられるようにしたいのですが、 このような書き方でいいのでしょうか? **他のページにフォームを作ってこちらに送っています バージョンは MYSQL ver4.0.26 PHP ver4.2.2 phpMyAdmin ver2.4.6  です。 <?PHP //データベース関連のデータをインクルードします require_once("dbini.php"); //MySQLに接続します $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); //データベースを選択します $selectdb = mysql_select_db($DBNAME, $con); //MySQLレコード修正 $sql = "update mem set regdate = now() ,pr1 = '$pr1' where id = '00001' "; mysql_query($sql); echo "レコードの修正が完了しました"; exit; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>修正ページ-2</title> </head> <body> </body> </html>

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

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

No2の回答の補足に関してなのですが、 formのアクションでmember1.phpを呼び出していると思うのですが、 echo "<p>PR文:<input type = \"text\" pr1 = \"pr1\" value =\""; echo $row["pr1"]; の部分って echo "<p>PR文:<input type = \"text\" name= \"pr1\" value =\""; echo $row["pr1"]; じゃないでしょうか? また、<input type = "hidden"・・・>等で 会員番号:$row["id"]も渡さないといけないのでは?

kiyomidesuyo
質問者

お礼

ありがとうございます、 echo の部分の変更をやってみたら更新できました。 後、パスワードを入れてからなど やる事はあるのですが、ここはクリアできました。 また、お尋ねするかもしれませんが よろしくお願いいたします。

その他の回答 (3)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 フォームから送られたデータを処理する質問文にあるスクリプトの mysql_query($sql); の後に echo mysql_error(); を追加してみてください。 エラーが存在するとエラーメッセージが表示されます。 また、省略しているのかもしれませんが、$sqlの中にある$pr1はちゃんと受け取ってますか? $pr1 = $_POST['pr1']; (タグの除去等の処理は省略しています。実装するときは注意して下さい。) まずはecho mysql_error();にて何か表示されるか。 表示されない場合、idが00001のレコードの更新日付が更新されているか。 質問文にあるスクリプトが省略していない状態なのであれば $_POST['pr1']よりフォームからの情報を取得してください。 この辺をチェックしてみてください。 また修正フォームの表示ですが、 $sqlの中のid = 00200はid = '00200'として下さい。 $rows = mysql_num_rows($result); を行っているので while($row = mysql_fetch_array($result)){ } で囲む必要はありません。 (1件しか取れないのであれば) 文字コードも統一したほうが良いですよ。 入力はs-jisになっているが更新処理後表示するものがeuc-jpになっています。 あとは、余計なお世話かもしれませんが動きのイメージは出来ているでしょうか? 勉強するのに作っているのならとりあえず問題はないですが運用していこうとなると下のような問題が出てきます。 例えば、ユーザIDをユーザに入力してもらい更新する際 パスワード等で制限をかけないと、他のユーザIDの人が適当にユーザIDを 入力し、勝手にPR文を更新されます。 その辺のイメージも出来てからスクリプトを組んでいかないとつぎはぎだらけのスクリプトになってしまい、 後々機能を追加する時やなにかに困ってしまうかもしれません。 いろいろ作ってみて学んでいくのも良いですが、どういう動きにするか設計する力も大切です。

kiyomidesuyo
質問者

お礼

ありがとうございました。 s-jisに統一して、no3の回答のようにechoの部分を書き換えたら うまく変更できました。 それから、動きのイメージはあるのですが 出来ることからやって、ご指摘の通り つぎはぎになると言うより、するしかないかな? と思いながら作業をしています。 でも、やはり最初からちゃんと設計してからの方がよさそうなので もう一度考えて見ます。 何度もお手を煩わせてスミマセン、 またお尋ねするかもしれませんが よろしくお願いいたします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 前の質問と照らし合わせましたが、 テーブルレイアウトのidカラムってint(10)でしょうか? int(10)だとすると、多分idが1の人が更新されていると思います。 00001とか01234とかでユーザIDを使用したいのであればidカラムを charかvarcharで持ったほうが良いですよ。

kiyomidesuyo
質問者

補足

何度もスミマセン、要領を得なくて。。 id varchar になっていました。 更新時間とPR文だけ変更したいのですが エラーは出なくて、更新できません。 (フィールドはもっと沢山あります) 本当は会員の人が自分のid を入力して PR文を更新させたいのですがちょっと分からないので 00001 の人が更新するページを作ろうとしています。 入力用のページは下記になります。 こちらで入力したのを、先ほどのページで更新しようとしています。 よろしくお願いいたします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>会員修正ページ</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <?php //データベース関連のデータをインクルードします require_once("dbini.php"); //MySQLに接続します $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); //データベースを選択します $selectdb = mysql_select_db($DBNAME, $con); //修正のためのフォーム $sql = "select * from mem where id = 00200"; $result = mysql_query($sql); $rows = mysql_num_rows($result); while($row = mysql_fetch_array($result)){ echo "<p>データを修正してください。</p>"; echo "<form action = \"member1.php\" method = \"post\">"; echo "会員番号:"; echo $row["id"]; echo "<br>"; echo "登録日:"; echo $row["regdate"]; echo "<br>"; echo "<p>PR文:<input type = \"text\" pr1 = \"pr1\" value =\""; echo $row["pr1"]; echo "\" size = \"40\"></p>"; echo "<p><input type=\"submit\" value=\"登録\">"; echo "<input type=\"reset\" value=\"リセット\"></p>"; echo "</form>"; } ?> </body> </html>

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 >どうしても出来ないのでご教授お願いいたします。 何をしようとしてどう出来ないを伝えて頂かないと的確な回答が出来ません。 例: 更新しようとしているけどエラーが表示される。そのエラーは「・・・」 エラーは表示されないけどテーブルが更新されない。 会員が自身で更新ということで、多分idが会員を一意に扱ってる値 だと思いますが、固定になっているのはテストの為でしょうか? 現状のsqlですとidが00001の人しか更新されません。

関連するQ&A