環境Mac Monterey12.1
MAMAP
PHP Version 7.3.21
Server version: 5.7.30 - MySQL
会員データをデータベースに登録するところを作っているのですが、
うまくいきません。
var_dump($data);でデバッグし載せているコードのところまでは正常に動くことはわかりましたが、
$stmt->execute($data);107行目(shop_form_done.php)を超えるとエラーがでるので、そこが悪いとは思うのですが的確にどこを治すべきなのかわかりません。
よろしくおねがいします。
php(shop_form_done.php)
<?php session_start(); session_regenerate_id(true); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php try { require_once('../common/common.php'); $post=sanitize($_POST); $onamae=$post['onamae']; $email=$post['email']; $postal1=$post['postal1']; $postal2=$post['postal2']; $address=$post['address']; $tel=$post['tel']; $chumon=$post['chumon']; $pass=$post['pass']; $danjo=$post['danjo']; $birth=$post['birth']; print $onamae.'様 <br/>'; print 'ご注文ありがとうございます。<br />'; print $email.'にメールをお送りしましたのでご確認ください。<br />'; print '商品は以下にお送りさせていただきます。'; print $postal1. '-' .$postal2. '<br />'; print $address. '<br />'; print $tel. '<br />'; $honbun =''; $honbun.="\n"; $honbun.=$onamae." 様\n\nこの度はご注文ありがとうございました。\n"; $honbun.="\n"; $honbun.="ご注文商品\n"; $honbun.="----------------\n"; $cart = $_SESSION['cart']; $kazu = $_SESSION['kazu']; $max = count($cart); $dsn = 'mysql:dbname=shop;host=localhost:8889;charset=utf8'; $user = 'root'; $password = 'root'; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); for($i=0;$i<$max;$i++) { $sql = 'SELECT name,price FROM mst_product WHERE code=?'; $stmt = $dbh->prepare($sql); $data[0] = $cart[$i]; $stmt -> execute($data); $rec = $stmt->fetch(PDO::FETCH_ASSOC); $name = $rec['name']; $price = $rec['price']; $kakaku[] = $price; $suryou = $kazu[$i]; $shokei = $price * $suryou; $honbun .= $name.' '; $honbun .= $price.'円 x '; $honbun .= $suryou.'個 ='; $honbun .= $shokei. "円 \n"; } $sql = 'LOCK TABLES dat_sales WRITE, dat_sales_product WRITE, dat_member WRITE'; $stmt = $dbh->prepare($sql); $stmt -> execute(); $lastmembercode=0; if($chumon=='chumontouroku') { $sql ='INSERT INTO dat_member(password,name,email,postal1,postal2,address,tel,danjo,born) VALUES(?,?,?,?,?,?,?,?,?)'; $stmt = $dbh->prepare($sql); $data = array(); $data[]=md5($pass); $data[]=$onamae; $data[]=$email; $data[]=$postal1; $data[]=$postal2; $data[]=$address; $data[]=$tel; if($danjo=='dan') { $data[]=1; } else { $data[]=2; } $data[]=$birth; var_dump($data); exit(); $stmt->execute($data); $sql= 'SELECT LAST_INSERT_ID()'; $stmt = $dbh->prepare($sql); $stmt->execute(); $rec = $stmt->fetch(PDO::FETCH_ASSOC); $lastmembercode=$rec['LAST_INSERT_ID()']; } $sql = 'INSERT INTO dat_sales(code_member,name,email,postal1,postal2,address,tel) VALUES(?,?,?,?,?,?,?)'; $stmt = $dbh->prepare($sql); $data = array(); $data[] = $lastmembercode; $data[] = $onamae; $data[] = $email; $data[] = $postal1; $data[] = $postal2; $data[] = $address; $data[] = $tel; $stmt -> execute($data); $sql = 'SELECT LAST_INSERT_ID()'; $stmt = $dbh->prepare($sql); $stmt -> execute(); $rec = $stmt->fetch(PDO::FETCH_ASSOC); $lastmembercode = $rec['LAST_INSERT_ID()']; // var_dump($kakaku); // exit; for($i=0;$i<$max;$i++) { $sql = 'INSERT INTO dat_sales_product (code_sales,code_product,price,quantity) VALUES(?,?,?,?)'; $stmt = $dbh->prepare($sql); $data = array(); $data[] = $lastmembercode; $data[] = $cart[$i]; $data[] = $kakaku[$i]; $data[] = $kazu[$i]; $stmt -> execute($data); } $sql = 'UNLOCK TABLES'; $stmt = $dbh->prepare($sql); $stmt -> execute(); $dbh = null; $honbun .="送料は無料です。\n"; $honbun .="--------------\n"; $honbun .="\n"; $honbun .="代金は以下の口座に振り込みください.\n"; $honbun .="ろくまる銀行 やさい支店 普通口座 1234567\n"; $honbun .="入金確認が取れ次第、梱包、発送させていただいきます。 \n"; $honbun .="\n"; $honbun .="□□□□□□□□□□□□□□□□□□□□□□□□□□\n"; $honbun .="~安心野菜のろくまる農園~\n"; $honbun .="\n"; $honbun .="○○県六丸郡六丸村123-4\n"; $honbun .="電話 090-6060-xxxx\n"; $honbun .="メール info@rokumarunouen.co.jp\n"; $honbun .="□□□□□□□□□□□□□□□□□□□□□□□□□□\n"; // print "\n"; // print nl2br($honbun); $title = 'ご注文ありがとうございます。'; $header = 'From: info@rokumaurnouen.co.jp'; $honbun = html_entity_decode($honbun,ENT_QUOTES,'UTF-8'); mb_language('Japanese'); mb_internal_encoding('UTF-8'); // mb_send_mail($email,$title,$honbun,$header); $title = 'お客様からご注文がありました。'; $header = 'From: ' .$email; $honbun = html_entity_decode($honbun,ENT_QUOTES,'UTF-8'); mb_language('Japanese'); mb_internal_encoding('UTF-8'); // mb_send_mail('info@rokumarunouen.co.jp',$title,$honbun,$header); $_SESSION=array(); if(isset($_COOKIE[session_name()])==true) { setcookie(session_name(),'',time()-42000,'/'); } session_destroy(); } catch (Exception $e) { print 'ただいま障害により大変ご迷惑をおかけしております。'; exit(); } ?> <br /> <a href="shop_list.php">商品画面へ</a> </body> </html>
php(shop_form.html)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> お客様情報を入力してください。<br /> <form method="post" action="shop_form_check.php"> お名前<br/> <input type="text" name="onamae" style="width:200px"><br/> メールアドレス<br /> <input type="text" name="email" style="width:200px"><br/> 郵便番号<br /> <input type="text" name="postal1" style="width:50px"> - <input type="text" name="postal2" style="width:80px"><br /> 住所<br /> <input type="text" name="address" style="width:500px"><br /> 電話番号<br /> <input type="text" name="tel" style="width:500px"><br /> <br /> <input type="radio" name="chumon" value="chumonkonkai" checked> 今回だけの注文 <br /> <input type="radio" name="chumon" value="chumontouroku">会員登録して注文<br/> <br /> ※会員登録する方以下の項目も入力してください。<br /> パスワードを入力してください。<br /> <input type="password" name="pass" style="width:100px"><br/> パスワードをもう1度入力してください。<br /> <input type="password" name="pass2" style="width:100px"><br/> 性別<br /> <input type="radio" name="danjo" value="dan" checked>男性<br /> <input type="radio" name="danjo" value="jo">女性<br /> 生まれ年<br /> <select name="birth"> <option value="1910">1910年代</option> <option value="1920">1920年代</option> <option value="1930">1930年代</option> <option value="1940">1940年代</option> <option value="1950">1950年代</option> <option value="1960">1960年代</option> <option value="1970">1970年代</option> <option value="1980">1980年代</option> <option value="1990" selected>1990年代</option> <option value="2000">2000年代</option> <option value="2010">2010年代</option> <option value="2020">2020年代</option> </select> <br/> <br/> <input type="button" onclick="history.back()" value="戻る" > <input type="submit" value="OK"><br /> </form> </body> </html>
php(shop_form_check.php)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ろくまる農園</title> </head> <body> <?php require_once('../common/common.php'); $post=sanitize($_POST); $onamae=$post['onamae']; $email=$post['email']; $postal1=$post['postal1']; $postal2=$post['postal2']; $address=$post['address']; $tel=$post['tel']; $chumon=$post['chumon']; $pass=$post['pass']; $pass2=$post['pass2']; $danjo=$post['danjo']; $birth=$post['birth']; $okflg=true; if($onamae=='') { print 'お名前が入力されていません。<br /><br />'; $okflg=false; } else { print 'お名前<br/>'; print $onamae; print '<br /><br />'; } if(preg_match('/\A[\w\-\.]+\@[\w\-\.]+\.([a-z]+)\z/',$email)==0) { print 'メールアドレスを正確に入力してください。<br /><br />'; $okflg=false; } else { print 'メールアドレス<br/>'; print $email; print '<br /><br />'; } if(preg_match('/\A[0-9]+\z/',$postal1)==0) { print '郵便番号は半角数字で入力してください。<br /><br />'; $okflg=false; } else { print '郵便番号<br />'; print $postal1; print '-'; print $postal2; print '<br /><br />'; } if(preg_match('/\A[0-9]+\z/',$postal2)==0) { print '郵便番号は半角数字で入力してください。<br /><br />'; $okflg=false; } if($address=='') { print '住所が入力されていません.<br /><br />'; $okflg=false; } else { print '住所<br/>'; print $address; print '<br /><br />'; } if(preg_match('/\A\d{2,5}-?\d{2,5}-?\d{4,5}\z/',$tel)==0) { print '電話番号を正確に入力してください。<br /><br />'; $okflg=false; } else { print '電話番号<br/>'; print $tel; print '<br /><br />'; } if($chumon=="chumontouroku") { if($pass=='') { print 'パスワードが入力されていません。<br /><br />'; $okflg=false; } if($pass!=$pass2) { print 'パスワードが一致しません。<br /><br />'; $okflg=false; } print '性別<br />'; if($danjo=='dan') { print '男性'; } else { print'女性'; } print'<br /><br />'; print '生まれ年<br />'; print $birth; print '年代'; print '<br /><br />'; } if($okflg==true){ print'<form method="post" action="shop_form_done.php">'; print'<input type="hidden" name="onamae" value="'.$onamae.'">'; print'<input type="hidden" name="email" value="'.$email.'">'; print'<input type="hidden" name="postal1" value="'.$postal1.'">'; print'<input type="hidden" name="postal2" value="'.$postal2.'">'; print'<input type="hidden" name="address" value="'.$address.'">'; print'<input type="hidden" name="tel" value="'.$tel.'">'; print'<input type="hidden" name="chumon" value="'.$chumon.'">'; print'<input type="hidden" name="pass" value="'.$pass.'">'; print'<input type="hidden" name="danjo" value="'.$danjo.'">'; print'<input type="hidden" name="birth" value="'.$birth.'">'; print'<input type="button" onclick="history.back()" value="戻る">'; print'<input type="submit" value="OK">'; print'</form>'; } else { print '<form>'; print '<input type="button" onclick="history.back()"value="戻る">'; print '</form>'; } ?> </body> </html>
まだ回答がついていません
会員登録して回答してみよう