実現したいこと
お問合せフォームから送信したデータを正しくphpmyadminに登録したい
前提
お問合せ画面で情報を入力すると、
↓
phpmyadminに↓登録されますが、メールアドレスとお問い合わせの部分が正しく登録されません
↓
結果↓のようになってしまいます。4の山田太郎のようにデータが登録されるのが結果的にやりたいことです。
該当のソースコード
//contact.php <?php session_start(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" type="text/css" href="contact.css"> <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script> </head> <body> <?php include('header.php'); ?> <div class="contact"> <h2>お問い合わせ</h2> <div class="contact-form"> <p>下記の項目をご記入の上送信ボタンを押してください</p> </div> <div class="contact-text"> <p>送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。</p> <p>なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。</p> <p><span>*</span>は必須項目となります。</p> </div> <form method="post" action="confirm.php"> <div class="contact-input"> <p>氏名<span>*</span></p><?php if(isset($_SESSION['result_name'])) { echo "<font color=\"red\">{$_SESSION['result_name']}</font>"; }?> <input type="text" name="name" id="mane" placeholder=" 山田太郎" value="<?php if(isset($_SESSION['name_ret'])) { echo "{$_SESSION['name_ret']}"; } ?>"> <p>フリガナ<span>*</span></p><?php if(isset($_SESSION['result_ruby'])) { echo "<font color=\"red\">{$_SESSION['result_ruby']}</font>"; }?> <input type="text" name="ruby" id="ruby" placeholder=" ヤマダタロウ" value="<?php if(isset($_SESSION['ruby_ret'])) { echo "{$_SESSION['ruby_ret']}"; } ?>"> <p>電話番号(ハイフンなし)<span></span></p><?php if(isset($_SESSION['result_phone'])){ echo "<font color=\"red\">{$_SESSION['result_phone']}</font>"; }?> <input type="text" name="phone" id="phone" placeholder=" 09012345678" value="<?php if(isset($_SESSION['phone_ret'])) { echo "{$_SESSION['phone_ret']}"; } ?>"> <p>メールアドレス<span>*</span></p><?php if(isset($_SESSION['result_email'])) { echo "<font color=\"red\">{$_SESSION['result_email']}</font>"; }?> <input type="text" name="email" id="email" placeholder=" test@test.co.jp" value="<?php if(isset($_SESSION['email_ret'])) { echo "{$_SESSION['email_ret']}"; }?>"> </div> <div class="contact-form"> <p>お問い合わせ内容をご記入ください<span>*</span></p> </div> <div class="contact-textarea"><?php if(isset($_SESSION['result_contact'])) { echo "<font color=\"red\">" . htmlspecialchars($_SESSION['result_contact']) . "</font>"; }?> <textarea type="text" name="contact" id="contact"><?php if(isset($_SESSION['contact_ret'])) { echo htmlspecialchars($_SESSION['contact_ret']); }?></textarea> </div> <div class="contact-button"><button onclick="return check()" type="submit" name="submit" class="submit">送 信</button></div> </form> </div> <?php require_once('database.php'); try{ $pdo->beginTransaction(); $sql = "SELECT * FROM contacts"; $stmt = $pdo->query($sql); $pdo->commit(); }catch (PDOException $error) { $pdo->rollBack(); header('Content-Type: text/plain; utf8_general_ci', true, 500); exit($error->getMessage()); } ?> <h3>データ</h3> <table class="db-table"> <tr> <th nowrap class="id">ID</th> <th nowrap class="name">氏名</th> <th nowrap class="ruby">フリガナ</th> <th nowrap class="phone">電話番号</th> <th nowrap class="email">メールアドレス</th> <th nowrap class="contact">お問い合わせ内容</th> <th nowrap class="created_at">送信日時</th> <th nowrap class="edit">編集</th> <th nowrap class="delete">削除</th> </tr> <?php foreach($stmt as $value): ?> <td nowrap class="id"><?= $value['id']."<br>";?></td> <td nowrap class="name"><?= $value['name']."<br>";?></td> <td nowrap class="ruby"><?= $value['ruby']."<br>";?></td> <td nowrap class="phone"><?= $value['phone']."<br>";?></td> <td nowrap class="email"><?= $value['email']."<br>";?></td> <td class="contact"><?= $value['contact']."<br>";?></td> <td class="created_at"><?= $value['created_at']."<br>";?></td> <td class="edit"><a href="edit.php?id=<?= $value["id"];?>">編集</a></td> <td class="delete"><a id='delete' href="delete.php?id=<?= $value["id"];?>" onclick="return confirm('本当に削除しますか?')">削除</a></td> </tr> <?php endforeach ?> </table> <script> function check() { var result = ""; var aaa = document.getElementById("phone"); var phoneValue = aaa.value; var bbb = document.getElementById("email"); var emailvalue = bbb.value; if ($("input[name='name']").val() == '' || $("input[name='name']").val().length >= 10) { var name = "氏名は必須入力事項です。10文字以内で入力してください。\n"; var result = result + name; } if ($("input[name='ruby']").val() == '' || $("input[name='ruby']").val().length >= 10) { var ruby = "フリガナは必須入力事項です。10文字以内で入力してください。\n"; var result = result + ruby; } if ($("input[name='phone']").val() != '' && !phoneValue.match(/^[0-9]+$/)) { var phone = "電話番号は0-9の半角数字でご入力ください(ハイフンなし)\n"; var result = result + phone; } if ($("input[name='email']").val() == '' || !emailvalue.match(/.+@.+\..+/)) { var email = "メールアドレスは正しくご入力ください。\n"; var result = result + email; } if ($("textarea[name='contact']").val() == '') { var contact = "お問い合わせ内容は必須入力事項です。\n"; var result = result + contact; } if (result === "") { return true; } else { alert(result); } }; </script> <?php include 'footer.php'; ?> </body> </html>
//database.php <?php define('DB_HOST', 'localhost'); define('DB_NAME', 'cafe'); define('DB_USER', 'blog_user'); define('DB_PASSWORD', 'ここはPW入力しています'); try { $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD); } catch (PDOException $e) { exit('データベースに接続できませんでした。'.$e->getMessage()); } $pdo->exec('SET NAMES utf8'); ?>
調査したこと、試したこと
メールアドレスとお問い合わせ内容の表示が正しくなるよう、該当の行を入れ替えたー改善なし
<td nowrap class="email"><?= $value['email']."<br>";?></td> <td class="contact"><?= $value['contact']."<br>";?></td>html
1 2<form method="POST" action="submit.php"> 3 <label for="name">氏名:</label> 4 <input type="text" name="name" required><br> 5 6 <label for="ruby">フリガナ:</label> 7 <input type="text" name="ruby" required><br> 8 9 <label for="phone">電話番号:</label> 10 <input type="text" name="phone" required><br> 11 12 <label for="email">メールアドレス:</label> 13 <input type="email" name="email" required><br> 14 15 <label for="contact">お問い合わせ内容:</label> 16 <textarea name="contact" required></textarea><br> 17 18 <input type="submit" value="送信"> 19</form>
submit.php
1<?php 2require_once('database.php'); 3 4if ($_SERVER['REQUEST_METHOD'] === 'POST') { 5 $name = $_POST['name']; 6 $ruby = $_POST['ruby']; 7 $phone = $_POST['phone']; 8 $email = $_POST['email']; 9 $contact = $_POST['contact']; 10 11 try { 12 $pdo->beginTransaction(); 13 14 $sql = "INSERT INTO contacts (name, ruby, phone, email, contact, created_at) VALUES (:name, :ruby, :phone, :email, :contact, NOW())"; 15 $stmt = $pdo->prepare($sql); 16 $stmt->bindParam(':name', $name); 17 $stmt->bindParam(':ruby', $ruby); 18 $stmt->bindParam(':phone', $phone); 19 $stmt->bindParam(':email', $email); 20 $stmt->bindParam(':contact', $contact); 21 $stmt->execute(); 22 23 $pdo->commit(); 24 25 echo "データの登録が完了しました。"; 26 } catch (PDOException $error) { 27 $pdo->rollBack(); 28 header('Content-Type: text/plain; utf8_general_ci', true, 500); 29 exit($error->getMessage()); 30 } 31} 32?> 33
補足情報(FW/ツールのバージョンなど)
・MAMPを使用
・phpmyadminを使用
• DB名: cafe
• テーブル名:contacts
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。