PHPでお店の情報をデータベースに書き込むプログラムが動作しない

このQ&Aのポイント
  • 最近始めたPHPの勉強で、お店の情報をデータベースに書き込むプログラムを作成していますが正常に動作しません。入力チェックをしたときにエラーメッセージを表示することができず、困っています。
  • form.phpというファイルからPOSTで送られた値をチェックし、すべての項目が記入されていれば確認のページにジャンプする仕組みです。しかし、記入漏れがあるとエラーメッセージが表示されず、入力した値が反映されない状態です。
  • この問題について、文法や設定に問題がある可能性があります。お手数ですが、間違っている部分を指摘していただけると助かります。
回答を見る
  • ベストアンサー

プログラムがちゃんと動作しません。

最近PHPの勉強をはじめました。 今お店の情報をデータベースに書き込むPHPを作成しています。 概要としては、form.phpからinputで入力された値をPOSTでform.htmlに送りそれぞれの項目の記入忘れがないかをチェックし、すべて記入されていれば確認のページへジャンプするというページを作成しています。 入力チェックをしたときに、記入忘れの項目を指摘し、ちゃんと入力するようにメッセージを表示するようにしたいのですが、何も表示されずに困っています。(記入忘れがあるときはすでに入力したものがフォームに入力されたままの状態になるようにしたいと重いinputにはvalueを設定しています) form.phpは以下のように記述されています。 form.php----------------------------------------------------------- <?php $error_message = array(); $listname = array( "tenmei" => "店名", "tenmei_y" => "店名のよみがな", "zipcode" => "郵便番号", "address" => "住所", "address_y" => "住所の読み仮名", "tel" => "電話番号" ); if (isset($_POST["regist"])) { foreach($_POST as $key => $val){ if (isset($val)) { $value[$key] = "$val"; } else { $i = $listname["$val"]; $error_message[] = "$iを入力して下さい"; } } } $tenmei = $value[tenmei]; $tenmei_y = $value[tenmei_y]; $zipcode = $value[zipcode]; $address = $value[address]; $address_y = $value[address_y]; $tel = $value[tel]; ?> <HTML> <BODY> <?php if (count($error_message)) { foreach ($error_message as $message) { print ($message<br>); } } print <<<eot <form method="POST" action="form.php"> 店名:<input type="text" name="tenmei" value="$tenmei"><br> 店名のよみがな:<input type="text" name="tenmei_y" value="$tenmei_y"><br> 郵便番号:<input type="text" name="zipcode" value="$zipcode"><br> 住所:<input type="text" name="address" value="$address"><br> 住所のよみがな:<input type="text" name="address_y" value="$address_y"><br> 電話番号:<input type="text" name="tel" value="$tel"><br> <input type="submit" name="regist" value="入力完了"> </form> eot; ?> ------------------------------------------------------------------- まだ、入力チェックすらできない状態なので、ちゃんと入力した場合に確認のページへジャンプする機能はまだつけていません。 情報が不足している部分がありましたら補足いたします。 文法が間違っている部分がたくさんあるかもしれませんが その部分を指摘していただけたら幸いです。 どうかご教授のほどよろしくおねがいします。

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

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

  • ベストアンサー
  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.2

元と違いますが、 こんな感じでいかがでしょう。 <?php //変数を空にしておく $error = ""; $tenmei = ""; $tenmei_y = ""; //POSTデータを取得 if (isset($_POST["regist"])) { //tenmeiに入っている値のエスケープ文字の変換 $tenmei = htmlspecialchars($_POST["tenmei"], ENT_QUOTES); $tenmei_y = htmlspecialchars($_POST["$tenmei_y"], ENT_QUOTES); //値がなかったらエラーメッセージ if(strlen($tenmei)==0){echo "<p>店名を入力して下さい</p>";} if(strlen($tenmei_y)==0){echo "<p>店名のよみがなを入力して下さい</p>";} } ?>

sachi-999
質問者

お礼

2度目の回答ありがとうございます。 そうですね、一つ一つエラーを表示していけば確実ですね。 項目が実際には30個近くまで増えるのらしいので何とかあとの編集がラクになるようなプログラムが書きたかったのですが、私のプログラムはまだまだ、勉強をはじめたばかりなのにちょっと欲張りすぎてしまった感じがしますね(>_<) 30個なのでその方法で行くことにします。 ありがとうございました!

その他の回答 (1)

  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.1

とりあえず40行目のprint ($message<br>);を、 print ("$message<br>");にすると動くようです。

sachi-999
質問者

お礼

動きました、ありがとうございます。 初歩的なミスですね、すみません。 でも、まだ「○○が入力されていません」というメッセージがちゃんと表示されません。 どこがおかしいのでしょうか?…(泣)

関連するQ&A

  • 複数のフォームから送信

    複数のフォームからtextの値を送信したいのですができますか?〒番号を入力して検索ボタンをおすと住所がでてきて最後に登録をしたいです。検索だけのプログラムはできてますがフォームを二つにすると両方のsubmitが登録になります・・・ 一応自分でいろいろためしましたがだめでした。。。 html,php,javascriptです。 二つともだめでした。。。。 rei1.php ------------------------- <html> <body <form method="POST" action="1.php"> お名前:<input type="text" name="name"> <br> <br> <form method="POST" action="yubin.php"> 〒:<input type="text" name="yubin"> <input type="submit" value="検索"> <br> 住所:<input type="text" name="zyu"> <br> </form> メールアドレス:<input type="text" name="email"> <br> <input type="submit" value="登録する"> </form> </body> </html> -------------------------------------- rei2.php -------------------------------------- <html> <head> <script language="javascript"><!-- function send() { document.nform.submit(); document.nform2.submit(); document.nform3.submit(); } //--></script> </head> <body> <form name="nform" method="POST" action="1.php"> お名前:<input type="text" name="name"> <br> </form> <form name="nform2" method="POST" action="yubin.php"> 〒:<input type="text" name="yubin"> <input type="submit" value="検索"> <br> 住所:<input type="text" name="zyu"> <br> </form> <form name="nform3" method="POST" action="1.php"> メールアドレス:<input type="text" name="email"> <br> <input type="submit" value="登録する"> </form> </body> </html> ------------------------------------

  • フォームへ入力した値の取得について

    PHPを始めたばかりの初心者です。 Windows NT4.0 + apache 1.3.24 + php 4.20の環境で 以下のようなサンプルプログラムを作って実行したのですが、「送信」ボタンを押しても、入力した文字が表示されません。初歩的な質問ですいませんが、原因を御教授下さい。 <HTML> <body> <FORM ACTION="sample.php" METHOD="POST"> 文字の入力 <INPUT TYPE="text" NAME="val" VALUE=""><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> <BR> <?PHP print "入力文字は<B>" . $val . " </B>です。"; ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • メールフォームにある必須入力について

    こんばんは、今メールフォームを作っています。入力画面→確認画面→完了ページという流れで作ったのですがよく必須項目に何も入れなかったり、間違った文字をいれたりするとエラーページが表示されるようにしたいと思っているのですが、なかなか上手くできません。下記のスクリプトからだとどうやってやったら良いのでしょうか?よろしくおねがいします。 <?php if (! isset($_POST[btn1]) and! isset($_POST[btn2]) and! isset($_POST[cancel])) { //入力画面 $body = "必要な項目を入力して[OK]ボタンをクリックしてください。 <FORM action='$_SERVER[PHP_SELF]' method='POST'> 名前:<INPUT size='40' type='text' name='name'><BR><BR> フリガナ:<INPUT size='40' type='text' name='kana'><BR><BR> 電話番号:<INPUT size='40' type='text' name='tel'><BR><BR> E-Mailアドレス:<INPUT size='40' type='text' name='email'><BR><BR> お問い合わせ内容:<BR><TEXTAREA rows='6' cols='40' name='inquiry'></TEXTAREA><BR><BR> <INPUT type='submit' name='btn1' value=' OK '> </FORM>"; } elseif (isset($_POST[btn1])) { //入力画面で[OK]がクリックされたとき $name = htmlspecialchars(stripcslashes($_POST[name])); $kana = htmlspecialchars(stripcslashes($_POST[kana])); $tel = htmlspecialchars(stripcslashes($_POST[tel])); $email = htmlspecialchars(stripcslashes($_POST[email])); $inquiry = htmlspecialchars(stripcslashes($_POST[inquiry])); $body = "ご入力した内容でメッセージを送信します。<BR> よろしければ[送信]ボタンをクリックしてください。 <FORM action='$_SERVER[PHP_SELF]' method='POST'> 名前:$name<BR><BR> フリガナ:$kana<BR><BR> 電話番号:$tel<BR><BR> E-Mailアドレス:$email<BR><BR> お問い合わせ内容:<BR>" . nl2br($inquiry) . "<BR><BR> <INPUT type='submit' name='btn2' value=' 送信 '> <INPUT type='submit' name='cancel' value='キャンセル'> <INPUT type='hidden' name='name' value=\"$name\"> <INPUT type='hidden' name='kana' value=\"$kana\"> <INPUT type='hidden' name='tel' value=\"$tel\"> <INPUT type='hidden' name='email' value=\"$email\"> <INPUT type='hidden' name='inquiry' value=\"$inquiry\"> </FORM>"; } elseif (isset($_POST[btn2])) { //確認画面で[送信]がクリックされたとき //メールの送信処理を行う $name = stripcslashes($_POST[name]); $kana = stripcslashes($_POST[kana]); $tel = stripcslashes($_POST[tel]); $email = stripcslashes($_POST[email]); $inquiry = stripcslashes($_POST[inquiry]); $mailto = "kuma202000@yahoo.co.jp"; $mailsbj = "メールフォームからの送信"; $mailbody = "$name さんからのメールが届きました。\n" . "---------------------------------------------\n" . "名前:$name \n" . "フリガナ:$kana \n" . "電話番号:$tel \n" . "E-Mailアドレス:$email \n" . "メッセージ:$inquiry \n" . "---------------------------------------------\n"; mb_language("ja"); if (mb_send_mail($mailto, $mailsbj, $mailbody, $mailheader)) { $body = "メールを送信しました。ありがとうございました。<BR><BR>"; } else { $body = "メールの送信に失敗しました。<BR><BR>"; } $body .= "<A href='$_SERVER[PHP_SELF]'>戻る</A>"; } elseif (isset($_POST[cancel])) { //確認画面で[キャンセル]がクリックされたとき header("location: $_SERVER[PHP_SELF]"); exit(); } ?> <HTML> <HEAD> </HEAD> <BODY> <?=$body?> </BODY> </HTML>

    • 締切済み
    • PHP
  • PHP+HTMLの確認画面から入力画面に戻る際のデータ保持について質問

    PHP+HTMLの確認画面から入力画面に戻る際のデータ保持について質問致します。 1.入力→2.確認→3.実行の3ページを作成しましたが、 2.確認で入力した値が間違っていた場合、1.入力に戻って訂正する仕様です 私は2.確認の戻るボタンにjavaのhistory.back();を使ったのですが ブラウザやOSにより、戻った際にデータが保持されていない場合があるとの事だったので 他の方法がないかご教授下さい。サンプルコードを書いて頂くと助かります。 以下、作成したコード 1.入力画面(mail.html) <html> <body> <form action="chk.php" method="post"> 件名:<br> <input type="text" name="subject" size="30" value=""><br> 送信者名:<br> <input type="text" name="name" size="30" value=""><br> メールアドレス:<br> <input type="text" name="mail" size="30" value=""><br> 本文:<br> <textarea name="message" cols="30" rows="5"></textarea><br> <br> <input type="submit" value="確認する">&nbsp&nbsp<input type="reset" value="クリア"> </form> </body> </html> 2.確認画面(chk.php) <?php $name = $_POST["name"]; $message = $_POST["message"]; $subject = $_POST["subject"]; $mail = $_POST["mail"]; ?> <html> <body> <form action="send.php" method="post"> 件名:<?php echo $subject; ?><br> 送信者名:<?php echo $name; ?><br> メールアドレス:<?php echo $mail; ?><br> 本文:<?php echo $message; ?><br> <input type="submit" value="これでOK"> &nbsp&nbsp //下記の戻るボタンで戻るとデータ保持をするようにしたい。history.back以外で。 <input type="button" value="戻る" onclick="history.back();"> <input type="hidden" name="name" value="<?php echo $name; ?>"> <input type="hidden" name="message" value="<?php echo $message; ?>"> <input type="hidden" name="subject" value="<?php echo $subject; ?>"> <input type="hidden" name="mail" value="<?php echo $mail; ?>"> </form> </body> </html> 3.送信画面(send.php) <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"]; if (!mb_send_mail("hoge@example.com", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?> <html> <body> <p>メールが送信されました。</p> </body> </html> 初心者ですので、わかりやすい表記をお願い致します。

    • 締切済み
    • PHP
  • PHPのsubmitボタンが複数ある場合

    PHPのsubmitボタンが複数ある場合 PHPにて会計システムを開発しているのですが、計算ボタンと、更新してDBに追加するためのボタンとが混在している場合、 $_POST等で押されたボタンの処理を分けることは可能なのでしょうか?下の例は、 name="calculation"が押された場合は、val1とval2の値を計算し、totalへ値を入れます。 name="update"が押された場合は、それぞれのフォームの値をDBに更新をかけます。 <?php <form action="****.php" method="POST"> <input type="text" name="val1" value="20"/> <input type="text" name="val2" value="30"/> <input type="text" name="total" value="50"/> <input type="submit" name="calculation"/> <input type="submit" name="update"/> </form> ?> お分かりになる方、ご教授お願いいたします。

    • 締切済み
    • PHP
  • ホームページ作成・フォームの送信について

    HP作成で多分初歩的なことだと思うのですが… 入力されたフォームの内容を送信する際、メールアドレスを使おうと思っています。 <form action="mailto:メールアドレスを入力"method="post"><br> お名前<p> <input type="text"name="name"><br><br> メッセージ<p> <textarea rows=8 cols=40 wrap="hard" name="メッセージ"></textarea><br><br> サイト評価<p> <input type="radio"name"goodorbad"value="良い">良い <input type="radio"name"goodorbad"value="普通">普通 <input type="radio"name"goodorbad"value="良くない">良くない <input type="reset"value="リセットします"> <input type="submit"value="投函する"><br><br><br> </form> だと送信ボタンをクリックした時にメールの新規作成画面に飛んでしまいます。 これはどこかおかしいのでしょうか?

  • テキストボックス未記入時のアラート表示 JS

    【出来ていること】 下記のように電話番号の未入をチェックしアラートを出すことができました。 <script> function check3() { tel3check = document.form3.tel3.value; data13 = tel3check; if(!data13) { alert("電話番号が未入力です13"); return; } else { document.form3.submit(); } } </script> <form method="POST" action="in.php" name = "form3"> <input type="text" name="tel3" value="" /> <input type="button" value="確認" name="sub1" onclick="check3();"> </form> 【躓いていること】 電話番号の未入だけでなく、FAXの未入もチェックしそれぞれでアラートを出そうとしましたが動きません。ご指導いただけますでしょうか? よろしくお願いいたします。 <script> function check3() { tel3check = document.form3.tel3.value; fax3check = document.form3.fax3.value; data13 = tel3check; data133 = fax3check; if(!data13) { alert("電話番号が未入力です13"); return; } elseif(!data133) { alert("FAX番号が未入力です133"); return; } else { document.form3.submit(); } } </script> <form method="POST" action="in.php" name = "form3"> <input type="text" name="tel3" value="" /> <input type="text" name="fax3" value="" /> <input type="button" value="確認" name="sub1" onclick="check3();"> </form>

  • 既存プログラムを改造したら動かなくなってしまったのですが、その原因は

    PHP4で外注で作ったPHPの一部を流用しようとしているのですが、 個人的好みで、タグ混在型を極力さけたいので以下の変更案のように 簡素化してみました。 しかし、実行してみると、IE6に下記の生テキストが展開されてしまいます。 Var1" VALUE=""><input type="text" name="1 元プログラムの方ですと、下記のように正しく展開されるのですけど。 <input type="text" name="Var1" value=""> 変更案の何がいけないのでしょうか。 ■元プログラム <?php define("MyTeisu", "Var1"); // HTMLエスケープして表示 function HtmlEsc ( $data ) { echo( htmlspecialchars( nl2br( $data ) ) ); } $KM=MyTeisu; if($mode=="1"){ HtmlEsc( number_format($g_FORM[ $KM ][ "VALUE" ]) ); ?> <input type="hidden" name="<?php print($KM); ?>" VALUE="<?php HtmlEsc( $g_FORM[ $KM ][ "VALUE" ] ); ?>"> <?php } else { ?> <input type="text" name="<?php print($KM); ?>" VALUE="<?php HtmlEsc( $g_FORM[ $KM ][ "VALUE" ] ); ?>"> <?php } ?> ■変更案→途中の「<?php」を極力除去 $KM=MyTeisu; if($mode=="1"){ HtmlEsc( number_format($g_FORM[ $KM ][ "VALUE" ]) ); echo "<input type=\"hidden\" name=\"" . print($KM) . "\" value=\"" . HtmlEsc( $g_FORM[ $KM ][ "VALUE" ] ) . "\">"; } else { echo "<input type=\"text\" name=\"" . print($KM) . "\" value=\"" . HtmlEsc( $g_FORM[ $KM ][ "VALUE" ] ) . "\">"; }

    • ベストアンサー
    • PHP
  • PHPでのCookie

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 form2.phpで一度更新しないと、結果が画面に表示されません。 これをform2.phpを開いた時点で表示されるようにするには、どのように書けばいいのでしょう。 後1つあります。form.phpで 「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。 これはなぜでしょうか? お願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php if ($_POST) { $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); } parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • フォームのリンクについて

    nyuryoku.php <form method="POST" action="kakunin.php"> <p> </p> <p><a href="変更フォーム"><img border="0" src="henkou.gif"></a><a href="会社フォーム"><img border="0" src="kaisya.gif"></a></p> <p>変更フォーム</p> <p>名前<input type="text" name="T1" size="20"></p> <p>住所<input type="text" name="T2" size="20"></p> <p>TEL<input type="text" name="T3" size="20"></p>  <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <p>会社フォーム</p> <p>会社名<input type="text" name="T4" size="20"></p> <p>会社住所<input type="text" name="T5" size="20"></p> <p>会社TEL<input type="text" name="T6" size="20"></p> <p> </p> <p><input type="submit" value="送信" name="B1"><input type="reset" value="リセット" name="B2"></p> </form> <form>から</form>の中に変更フォームと会社フォームがあり henkou.gifをクリックすると画面上に変更フォームが現れて、kaisya.gifをクリックすると会社フォームが表れるようにしたいのです。 そして入力された情報は<input type="submit" value="送信" name="B1">で一度に送信できるようにしたいのですが、 henkou.gifとkaisya.gifにどういう風にリンクをはり各フォームだけを表示するにはどうしたらいいでしょうか?

    • ベストアンサー
    • PHP