前提・実現したいこと
とあるサイトを参考に、簡易的なお問い合わせフォームを作っています。
フォームに入力したデータを送信するところまでは成功しましたが、以下のエラーが出ており、送信したデータがテーブルに登録されません。
長時間トライ&エラーを繰り返していますがなかなかうまくいかないので、ご教授頂きたいです。
発生している問題・エラーメッセージ
PHP Warning: mysqli_stmt::execute() expects exactly 0 parameters, 1 given in C:\MAMP\htdocs\phpstudy\questionForm.php on line 32
2021/07/23 追記
回答いただいた内容を参考にソースコードを一部修正したところ、エラーは出なくなりましたが相変わらずテーブルにレコード登録されません。
該当のソースコード
エラーが出ている箇所のソースコードは以下の通りです。
<?php session_start(); require('dbconnect.php'); if(!isset($_SESSION['join'])){ header('Location:index.php'); exit(); } if(!empty($_POST)){ $statement=$db->prepare('INSERT INTO question_form SET nameSei=?, nameMei=?, gender=?, year=?, address1=?, address2=?, phone=?, email=?, question=?, create_at=NOW() '); echo $ret=$statement->execute(array( $_SESSION['join']['nameSei'], $_SESSION['join']['nameMei'], $_SESSION['join']['gender'], $_SESSION['join']['year'], $_SESSION['join']['address1'], $_SESSION['join']['address2'], $_SESSION['join']['phone'], $_SESSION['join']['email'], $_SESSION['join']['question'] )); unset($_SESSION['join']); header('Location: Recieve.php'); exit(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>【練習】問い合わせフォーム</title> </head> <body> <p>【確認】お問い合わせ内容</p> <form action="" method="post"> <input type="hidden" name="action" value="submit"> <dl> <dt>お名前</dt> <dd> 姓:<?php echo htmlspecialchars($_SESSION['join']['nameSei'], ENT_QUOTES);?><br> 名:<?php echo htmlspecialchars($_SESSION['join']['nameMei'], ENT_QUOTES);?> </dd> <dt>性別</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['gender'], ENT_QUOTES);?> </dd> <dt>生年月日</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['year'], ENT_QUOTES);?>年 <?php echo htmlspecialchars($_SESSION['join']['month'], ENT_QUOTES);?>月 <?php echo htmlspecialchars($_SESSION['join']['day'], ENT_QUOTES);?>日 </dd> <dt>〒郵便番号</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['address1'], ENT_QUOTES);?> </dd> <dt>住所</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['address2'], ENT_QUOTES);?> </dd> <dt>電話番号</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['phone'], ENT_QUOTES);?> </dd> <dt>メールアドレス</dt> <dd> <?php if($_SESSION['join']['email'] == ''):?> <label>未入力</label> <?php endif; ?> <?php echo htmlspecialchars($_SESSION['join']['email'], ENT_QUOTES);?> </dd> <dt>お問い合わせ内容</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['question']); ?> </dd> </dl> <input type="submit" value="登録する" > </form> </body> </html>
2021/07/23 追記(PHP部分を以下のように修正しました)
<?php session_start(); require('dbconnect.php'); if(!isset($_SESSION['join'])){ header('Location:index.php'); exit(); } if(!empty($_POST)){ $statement=$db->prepare('INSERT INTO question_form SET nameSei=?, nameMei=?, gender=?, year=?, address1=?, address2=?, phone=?, email=?, question=?, create_at=NOW() '); $nameSei = $_SESSION['join']['nameSei']; $nameMei = $_SESSION['join']['nameMei']; $gender = $_SESSION['join']['gender']; $year = $_SESSION['join']['year']; $address1 = $_SESSION['join']['address1']; $address2 = $_SESSION['join']['address2']; $phone = $_SESSION['join']['phone']; $email = $_SESSION['join']['email']; $question = $_SESSION['join']['question']; echo $ret=$statement->bind_param('ssssissss', $nameSei, $nameMei, $gender, $year, $address1, $address2, $phone, $email, $question); $statement->execute(); unset($_SESSION['join']); header('Location: Recieve.php'); exit(); } ?>
試したこと
このサイト内外問わず似たような質問を探し色々試しましたが、同じエラーが出続けます。
上記のエラーが出る原因の1つとして、prepare()でfalseが返ってきているから→テーブル定義で何か問題が起きているから、というコメントを見かけたので各カラムの型を見なおしたりしましたが、解消されません。念のためテーブル定義の情報も載せておきます。
# Name Type Null Extra 1 record_id int(11) No AUTO_INCREMENT 2 nameSei varchar(36) No 3 nameMei varchar(36) No 4 gender varchar(5) Yes 5 year date Yes 6 address1 int(7) No 7 address2 text No 8 phone varchar(15) No 9 email text Yes 10 question text Yes 11 create_at timestamp No
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/25 09:20