データベースへの接続まではうまくいっています。
それ以下のどこがおかしいのかがわかりません。
教えてくださいよろしくお願いいたします。
<!— 部品1:書き込みフォーム —> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>Contact</title> <link href="css/common.css" rel="stylesheet" type="text/css"> <!-- スマートフォン --> <link href="css/smartphone.css" rel="stylesheet" type="text/css" media="only screen and (max-width:480px)"> <!-- タブレット --> <link href="css/tablet.css" rel="stylesheet" type="text/css" media="only screen and (min-width:481px) and (max-width:768px)"> <!-- デスクトップ --> <link href="css/desktop.css" rel="stylesheet" type="text/css" media="only screen and (min-width:769px)"> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <script src="SpryAssets/SpryValidationTextField.js" type="text/javascript"></script> <script src="SpryAssets/SpryValidationTextarea.js" type="text/javascript"></script> <link href="SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css"> <link href="SpryAssets/SpryValidationTextarea.css" rel="stylesheet" type="text/css"> </head> <body> <div id="wrapper"> <header> <h1>hoge</h1> <hgroup> <h2>hoge</h2> <h3>hoge</h3> </hgroup> <nav> <ul> <li><a href="index.html">Home</a></li> <li><a href="hoge.php">Login</a></li> <li><a href="contact.html">Contact</a></li> <li><a href="link.html">Link</a></li> </ul> </nav> </header> <div id="side_menu"> <nav> <h3>Navigation</h3> <ul> <li><a href="test.html">test</a></li> </ul> </nav> <aside> </aside> </div> <div id="contents"> <section> <article> <h2>お問い合わせ</h2> <center> <form action="contact.php" method="post" enctype="text/plain" name="mail" id="mail"> <table class="contact" width="600" border="0"> <tr class="contact gray_back"> <td class="contact">氏名</td> <td class="contact"><input name="yourname" type="text" id="yourname" size="20" maxlength="20"></td> </tr> <tr class="contact"> <td class="contact">ふりがな</td> <td class="contact"><input name="kana" type="text" id="kana" size="20" maxlength="20"></td> </tr> <tr class="contact gray_back"> <td class="contact">電話番号</td> <td class="contact"><input name="tel" type="text" id="tel" size="20" maxlength="20"></td> </tr> <tr class="contact"> <td class="contact">メールアドレス</td> <td class="contact"><span id="sprytextfield1"> <input name="email" type="text" id="email" size="20"> <span class="textfieldRequiredMsg">値を指定する必要があります。</span><span class="textfieldInvalidFormatMsg">無効な形式です。</span></span></td> </tr> <tr class="contact gray_back"> <td class="contact">サイトを知ったきっかけ</td> <td class="contact"> <label> <input type="checkbox" name="chance" value="search" id="chance_0"> 検索サイト</label> <br> <label> <input type="checkbox" name="chance" value="mouth" id="chance_1"> 口コミ</label> <br> <label> <input type="checkbox" name="chance" value="magazine" id="chance_2"> 雑誌</label> <br> <label> <input type="checkbox" name="chance" value="other" id="chance_3"> その他</label> </td> </tr> <tr class="contact"> <td class="contact">性別</td> <td class="contact"> <label> <input type="radio" name="sei" value="man" id="sei_0"> 男</label> <br> <label> <input type="radio" name="sei" value="woman" id="sei_1"> 女</label> </td> </tr> <tr class="contact gray_back"> <td class="contact">用件</td> <td class="contact"><select name="title" id="title"> <option value="web">WEBサイト制作について</option> <option value="manage">WEBマネジメントについて</option> <option value="recruit">採用について</option> <option value="site">このサイトについて</option> <option value="other">その他</option> </select></td> </tr> <tr class="contact"> <td class="contact">質問内容</td> <td class="contact"><span id="sprytextarea1"> <textarea name="content" id="content" cols="20" rows="5"></textarea> <span class="textareaRequiredMsg">値を指定する必要があります。</span></span></td> </tr> <tr class="contact gray_back"> <td colspan="2" class="contact btn"><input type="submit" name="button" id="button" value="送信"> <input type="reset" name="button2" id="button2" value="リセット"></td> </tr> </table> </form> <!-- 部品2から部品4 ここから↓ --> <!-- 部品2:データベースへの接続 --> <?php //接続設定(サーバー/データベース/ユーザー/パスワード) $sv = "localhost"; $dbname = "***"; $user = "***"; $pass = "***"; //データベースに接続する $conn = mysql_connect($sv, $user, $pass) or die("接続エラー"); mysql_select_db($dbname) or die("接続エラー"); ?> <!-- 部品3:メッセージ書き込みスクリプト --> <?php //POSTメソッドで送信された場合は書き込み処理を実行する if ($_SERVER["REQUEST_METHOD"] == "POST"){ //フォームからデータを受け取る $yourname = cnv_dbstr($_POST["yourname"]); $kana = cnv_dbstr($_POST["kana"]); $tel = cnv_dbstr($_POST["tel"]); $email = cnv_dbstr($_POST["email"]); $chance = cnv_dbstr($_POST["chance"]); $sei = cnv_dbstr($_POST["sei"]); $title = cnv_dbstr($_POST["title"]); $content = cnv_dbstr($_POST["content"]); //名前とメッセージが入力されていればデータの追加を実行する if (!empty($yourname) and !empty($kana) and !empty($tel) and !empty($chance) and !empty($sei) and !empty($title) and !empty($content)) { //データを追加する $sql = "INSERT INTO ***(yourname, kana, tel, email, chance, sei, title, content, date) "; $sql .= "VALUES("; $sql .= "'" . $yourname . "',"; $sql .= "'" . $kana . "',"; $sql .= "'" . $tel . "',"; $sql .= "'" . $email . "',"; $sql .= "'" . $chance . "',"; $sql .= "'" . $sei . "',"; $sql .= "'" . $title . "',"; $sql .= "'" . $content . "',"; $sql .= "'" . date("Y/m/d H:i:s") . "'"; $sql .= ")"; $res = mysql_query($sql, $conn) or die("データ追加エラー"); if ($res) { echo "<p>書き込みありがとうございました</p>"; } } //名前やメッセージが空白の場合はエラーメッセージを出力する else { echo "<p><b>未入力項目があります</b></p>"; } } //SQLコマンド用の文字列に変換する関数 function cnv_dbstr($string) { //タグを無効にする $string = htmlspecialchars($string); //magic_quotes_gpcがONの場合はエスケープを解除する if (get_magic_quotes_gpc()) { $string = stripslashes($string); } //SQLコマンド用の文字列にエスケープする $string = mysql_real_escape_string($string); return $string; } ?> <!-- 部品4:メッセージ表示スクリプト --> <?php //SELECTコマンドを実行してデータを取得する $sql = "SELECT * FROM contact_data ORDER BY id DESC"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); //取得したデータを1件ずつ表示する while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo "<hr>"; if (!is_null($row["email"])) { echo"<a href=\"mailto:" . $row["email"] . "\">" . $row["yourname"] . "</a>"; } else { echo $row["yourname"]; } echo "(" . date("Y/m/d H:i", strtotime($row["date"])) . ")"; echo "<p>" . nl2br($row["content"]) . "</p>"; } ?> <!-- 部品2から部品4 ここまで↑ --> </body> </html>
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
タイトルは要件を書いてください。
PHPなのはタグでわかりますし、何かがおかしいから質問しているわけですよね。
起きている問題、実現したいこと。
本文もコードだけで丸投げするのではなく、きちんと説明してください。これではデバッグ依頼です。
こういう仕様、こういう設計に基づいてコードを書いてみたけど、こういう現象が発生している、っていう情報がないと的確に回答できません。
一通りおかしいので全部見直して
って回答でよければしますよ。
全部書くのが面倒なくらい。
あとは自分が何を目指したコードを組んだのか次第です。
(えっ、気づいたところ回答しちゃったし
phpのフォームをmariaDBに入力させたいだけなんですが難しいです。
古い書籍を参考にしてあまりわからずにコピペして作ったのですが甘かったです。
もっと勉強します。
これから学習するところであれば、PHP7対応の書籍で学習するべきです。
過去の書籍で説明されている事柄がPHP言語の仕様変更によって多数変更されて改善されています。
ありがとうございます。
ご指摘の通りです。
最新の書籍で勉強します。
書籍の通りにコピペすれば正常に動作したので、自分流にアレンジしてみたらダメでした。
ひとまずお手上げです。
これはひどい。回答に費やした時間を返してくれ
>自分流にアレンジしてみたら
そらそうだ。文法も何も基本的なところを理解せずに適当に書くから。
プログラムは書いた通りにしか動かない。「通り」は「プログラムの仕様通り」。思った通りに動かそうと思ったら仕様を理解する必要があるわけで。
その前に整理すべきことは幾らでもあるでしょう。
「要件」です。「何を目的としたプログラムなのか」「何を実現したいプログラムなのか」を「具体的に」まとめる作業が先です。
質問するのであればその「要件」をきちんと説明する必要があります。
書籍とか関係ありません。問題が起きているのはあなたが書いたコード。書籍をそのままうつしたものであっても、ネットで見つけたコードをコピペしただけであっても、責任は自分自身にしかないわけです。
「質問するな」というわけではありません。質問するということは解決するための責任が発生しますが、その責任は質問者にしかありません。
回答者は気まぐれで見て、回答できそうな内容なら回答し、できなさそうならスルーするか・ここに書かれているように質問への追記修正依頼をするだけです。
質問を見る人は全てが赤の他人です。でしたら、自分が持っている情報や想いはきちんと書かなければ伝わらないのは当然です。
どんな熟練の技術者であっても赤の他人の要件をくみ取るとか無理ですよ。
そういった齟齬やすれ違いをなるべくなくすための「質問するときのヒント https://teratail.com/help/question-tips 」であったり質問テンプレートがあるわけです。
https://teratail.com/help/question-tips#questionTips3-8
質問に追記修正依頼なり何かしらのコメントがあるということは質問や問題に関心が寄せられているということです。
つまり、アドバイスをもらえるチャンスであるわけです。
そのチャンスを拾えるかどうかは質問者次第です。
teratailのPHPを見たときに回答率は高い方です。
https://teratail.com/tags/PHP
質問数も多く、登録しているユーザーも多いです。
それだけ目につきやすく、解決しやすいとも言えますが、それも質問内容次第です。せっかく質問したのでしたらきちんと解決するまで対応しましょう。
それが「お手上げ状態」から脱するための唯一の前向きな手段です。