データベース更新について
お世話になっております。
データベースの更新ができず困っております。
ご教授いただければと思います。
PHPは初心者です。
コードは下記の用になっております。
form.php
<?php
・
・
・
$member = $_GET[name];
・
・
・
$query_member = sprintf("SELECT * FROM `member` WHERE ID='$member'");
$result_member = mysql_query($query_member, $link);
if ($result_member) {
$row = mysql_fetch_array($result_member);
if ($row) {
$m_id = $row['id'];
$m_first_name = $row['first_name'];
$m_last_name = $row['last_name'];
$m_first_kana = $row['first_kana'];
$m_last_kana = $row['last_kana'];
$m_b_year = $row['b_year'];
$m_b_month = $row['b_month'];
$m_b_day = $row['b_day'];
}
}
?>
<html>
<body>
<form action="complete.php?<?php print $m_id; ?>" method="POST">
<input type="text" name="<?php print $m_first_name; ?>" value="<?php print $m_first_name; ?>" />
<input type="text" name="<?php print $m_last_name; ?>" value="<?php print $m_last_name; ?>" />
<input type="text" name="<?php print $m_first_kana; ?>" value="<?php print $m_first_kana; ?>" />
<input type="text" name="<?php print $m_last_kana; ?>" value="<?php print $m_last_kana; ?>" />
<input type="text" name="<?php print $m_b_year; ?>" value="<?php print $m_b_year; ?>"> 年
<input type="text" name="<?php print $m_b_month; ?>" value="<?php print $m_b_month; ?>"> 月
<input type="text" name="<?php print $m_b_day; ?>" value="<?php print $m_b_day; ?>"> 日
<input type="submit" name="regist" value="編集">
</form>
complete.php
<?php
・
・
・
$m_id = $_GET[name];
・
・
・
$first_name = mysql_real_escape_string($_POST['m_first_name']);
$last_name = mysql_real_escape_string($_POST['m_last_name']);
$first_kana = mysql_real_escape_string($_POST['m_first_kana']);
$last_kana = mysql_real_escape_string($_POST['m_last_kana']);
$year = mysql_real_escape_string($_POST['m_b_year']);
$month = mysql_real_escape_string($_POST['m_b_month']);
$day = mysql_real_escape_string($_POST['m_b_day']);
$query_edit = sprintf("UPDATA `member` SET `first_name`='$first_name', `last_name`='$last_name' WHERE id='$m_id'");
$result_edit = mysql_query($query_edit, $link) or die(mysql_error());
if ($result_edit) {
$msg = '編集しました。';
} else {
$msg = '編集に失敗しました。';
}
?>
<html>
<body>
<?php print $msg; ?>
</body>
</html>
となっております。
$member = $_GET[name];はhttp://oshiete1.goo.ne.jp/qa5783266.htmlにてご教授いただいたので使用しています。
$result_edit = mysql_query($query_edit, $link) or die(mysql_error());でエラーが出力されたところデータの受け渡しができていませんでした。
どこを直せば良いのかわからず困っております。
お分かりの方がいらっしゃいましたらご教授お願いいたします。
No.2ベストアンサー
- 回答日時:
UPDATA→UPDATE
スペルミスですね。
それとよく見ると↓もおかしい。
<form action="complete.php?<?php print $m_id; ?>" method="POST">
<form action="complete.php" method="POST">
<input type="hidden" name="name" value="<?php print $m_id; ?>" />
とした方がいいですね。
そのかわりに、complete.phpでは
$m_id = $_GET[name];
↓
$m_id = $_POST['name'];
と変えなくてはならない。
$_GET['name']を活かしたければ、以下のような感じに変更で。
<form action="complete.php?name=<?php print $m_id; ?>" method="POST">
あとは、
"SELECT * FROM `member` WHERE ID='$member'"
ID='$member'→`id`='$member'
"UPDATA `member` SET `first_name`='$first_name', `last_name`='$last_name' WHERE id='$m_id'"
id='$m_id'→`id`='$m_id'
大文字小文字の統一と、オブジェクト名をすべて``で括るルールを採用するなら、idにも``を、ってところで、別に動作がおかしい原因にはなりませんが、見た目というかプログラミング意識レベルのツッコミですが。
この回答への補足
BellBellさん有難う御座います。
スペルミスでした。申し訳ありません。
><form action="complete.php" method="POST">
><input type="hidden" name="name" value="<?php print $m_id; ?>" />
のように変更したところできました。
有難う御座いました。
No.5
- 回答日時:
横槍の上、蛇足失礼します。
これまでの貴方の投稿を拝見し、疑問を抱いた者です。
少々キツイ事を申し上げますが、別に貴方やこの掲示板のあり方を否定したいわけでは御座いません事、予め申し添えさせて頂きます。
>sprintfにつきましてはPHPの書籍にて勉強したところついておりましたので、使用しています。
>書籍も書籍(ネットもですが)で、ものによっては違う記述がしてあったりするので、できる限り使えるとこは使っているという感じです。
恐らく、No3さんが提示してくれたリンク先さえ読んでいらっしゃらないと思うのですが、「使える所は使う」というレベルであれば誰も指摘なんてしない気がします。
この掲示板の回答者さんは皆さん優しいので、目的の物が完成するまで質問し続ければ、ソースコードを提示してくれたりして、継ぎ接ぎのソースコードで、脆弱性や無駄な処理を抱えたまま、どうにか目的の物が完成するかもしれませんが…
貴方がステップアップして自分で自由に組みたいものを組めるようになりたいと考えるなら、サンプルコードを参考にするにしても、
「何故ここでこのような記述をするのか」
エラーが発生したら
「何故ここでこのようなエラーが発生したのか」
といった事を「考え」「検証」する事が重要だと思います。
(クエリエラーが発生した場合はsql文に問題がある可能性があると考え、SQL文を一旦出力し、そのSQL文が実行可能であるかをチェックするとか…。)
「貰ったアドバイスを無にする」というのは初心者だろうが何だろうが理由にならない気がします。
まず、リンク先を見てsprintfがどういう処理を行うものなのかを確認してみてはいかがでしょうか?
No.4
- 回答日時:
これは ただのアドバイスです。
というか、むしろ ただの余計なお世話です。
つか単に口を出したくなっただけです。
> $m_id = $row['id'];
> $m_first_name = $row['first_name'];
> $m_last_name = $row['last_name'];
> $m_first_kana = $row['first_kana'];
> $m_last_kana = $row['last_kana'];
> $m_b_year = $row['b_year'];
> $m_b_month = $row['b_month'];
> $m_b_day = $row['b_day'];
↑ この部分は、この一行↓で済みます。
extract($row , EXTR_PREFIX_ALL , "m");
ただ extract は マニュアルにも書いていますが、$_GET や $_FILE などには使わないほうがいいので、濫用はしないほうがいいです。
今回は、テーブルのフィールド($rowの中身)以上に展開される事がないので、使用しています。
http://php.net/manual/ja/function.extract.php
あと、 extract() を使う場合は、mysql_fetch_array() ではなく mysql_fetch_assoc() を使ったほうがいい感じです。
mysql_fetch_array() と mysql_fetch_assoc() を var_dump() してみれば分かりますが、
assoc のほうが 作られる配列が少ないので、extract() で 展開した時に、無駄な変数を作りません。
-------------------------------------------------
↓ここら辺の一連の並びとか、
> $first_name = mysql_real_escape_string($_POST['m_first_name']);
↓ここら辺とかは、
> <input type="text" name="m_first_name" value="<?php print $m_first_name; ?>
俺なら別の書き方をしますが、いよいよ邪道っぽくなってくるので 今回は提示しません。
有刺鉄線使ったり電流爆破をするわけではありませんけど。
この回答への補足
ご回答有難う御座います。
また、ご指摘有難う御座います。
何分まだ、初心者のためわからないことや間違っていることがあるためご了承ください。
現在みなさんのお陰である程度のサイトができているため、この辺で自分なりにおさらいをしようと思っております。
いろいろと有難う御座います。
No.3
- 回答日時:
> $member = $_GET[name];
> はhttp://oshiete1.goo.ne.jp/qa5783266.htmlにてご教授いただいたので使用しています。
よぅし。
中途半端な説明でぶん投げてしまった俺が悪いので、
ここは 俺が 責任を持って、説明しましょう。
基本、説明は下手なので、覚悟してください。
ネットにおいて、PHP が HTMLなどからデータを受け取る方法としては、
大雑把に言って $_GET と $_POST と言う スーパーグローバル変数の どちらかを使います。
--------------------------------------------------
$_GET は 前回 俺が説明したように
<a href=Script.php?ID=$id>送信</a>
などのような時に
$id = $_GET[ID]
として受け取ります。
--------------------------------------------------
$_POSTは
<form action=Script.php method=POST>
<input type=text name=ID value='$id'>
<input type=submit value='送信'>
</form>
などのような時に
$id = $_POST[ID]
として受け取ります。
--------------------------------------------------
> たしか、[]内は''を付け忘れても動いたような気がする、
> と記憶していますが、忘れていない方が良いと思うのであえてツッコミ。
あぁ、すみません。そいつは きっと俺のせいです。f(^^;)
↑の書き方を見てもらうと分かるかと思いますが、だいぶ王道から外れた書き方をします。
俺は ハショれるクォート系は ことごとく ハショってしまいます。
W3Cのチェッカー通すと、ことごとく ツッコまれます。
SQL文書く時も、バッククォートは書いた事がありません。
内部的に 速度面とか どうなのか分からないですし、noticeぐらいは出てるかもしれませんが、
warning以上のものは出さずに動けばいいと思ってしまっているところがあります。
閑話休題。前回に引き続き、軽くツッコみどころがあったので。
> $query_member = sprintf("SELECT * FROM `member` WHERE ID='$member'");
> $query_edit = sprintf("UPDATA `member` SET `first_name`='$first_name', `last_name`='$last_name' WHERE id='$m_id'");
何か 他から持ってきたコードを参考にして使っているのは分かりますが、
sprintf は この場合、全く必要ありません。
これ↓でも問題はないはずです。
$query_member = "SELECT * FROM `member` WHERE ID='$member'";
$query_edit = "UPDATA `member` SET `first_name`='$first_name', `last_name`='$last_name' WHERE id='$m_id'";
sprintf の 正しい使い方は こちら。↓
http://php.net/manual/ja/function.sprintf.php
あと、俺なら こう書く。って所が かなり ありますが、
そちらが書いたものを だいぶ 違う形にしてしまうので、自重しておきます。
この回答への補足
bm_hiroさんご回答有難う御座います。
自分の勉強不足でお手数お掛けして申し訳ありません。
sprintfにつきましてはPHPの書籍にて勉強したところついておりましたので、使用しています。
書籍も書籍(ネットもですが)で、ものによっては違う記述がしてあったりするので、できる限り使えるとこは使っているという感じです。
教えてgooは本当にいつもご参考にさせていただいております。
No.1
- 回答日時:
以下のような記述すべてですが
<input type="text" name="<?php print $m_first_name; ?>" value="<?php print $m_first_name; ?>
<input type="text" name="m_first_name" value="<?php print $m_first_name; ?>
と、$_POST['m_first_name']で受ける際の名前にしなければなりません。
<input type="text" name="xxxxx" value="">
name='xxxxx'と指定しているので、
$_POST['xxxxx']
で受け取れるという形です。
他に気になるのは、
$_GET[name];
↓
$_GET['name'];
たしか、[]内は''を付け忘れても動いたような気がする、と記憶していますが、忘れていない方が良いと思うのであえてツッコミ。
この回答への補足
BellBellさんご回答有難う御座います。
先日はお世話になりました。
上記の内容に変更したのですが、かわらずエラーが表示されてしまいます。
エラー内容は下記です。
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 'UPDATA `member` SET `first_name`='XXXX',`last_name`='XXXX',`first_kana`='XXXX' at line 1 at line 1
と表示されています。
お分かりになりますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
Flaskでサーバー立ち上げに関して
-
MySQL,PHPのリロードによる二重...
-
アップロードしたファイルの絶...
-
【PHP】複数語検索について
-
HTMLで前の画面に戻る時、入力...
-
チェックボックスのvalueに変数...
-
フォームへの前回入力値をクリ...
-
<input type="hidden" >で配列...
-
パラメーターを隠す
-
PHPで画像の渡しが上手く行きま...
-
入力フォーム→確認画面→送信画...
-
フォームのテキストボックスに...
-
PHPでファイルアップロード時に...
-
<select>文、foreachと初期値設定
-
smartyでチェックボックスをチ...
-
PHPで郵便番号を検索し、住所を...
-
Smartyで、セレクトボックスが...
-
phpのカウンタのリセット方法
-
phpでのセレクトボックスの値を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
Flaskでサーバー立ち上げに関して
-
PHPからHTMLへの変数の受け...
-
PHP データベース データ更新
-
phpで変数を使ってcopyできない
-
POSTの項目に追加
-
phpで掲示板を作りたい
-
重複を防ぐ記述について教えて...
-
php、sqlite3にデーター追加で...
-
プログラミングC++のmapについて
-
CakePHP テーブル名カラム名の...
-
変数のパターン処理パート3
-
fputcsv()で1レコード1行になる...
-
アップロードファイル名の文字化け
-
openCVのトラックバーについて
-
$_SESSIONに渡した後はそのまま...
-
php で画面にコードが表示され...
-
引数の参照について
-
PHP5でRSS1.0のネームスペース...
-
scanfでの読み込み文字数制限
おすすめ情報