前提・実現したいこと
現在PHPを使い、MySQLにデータを登録するプログラムを書いています。
開発環境はMAMP,phpMyAdminです。
HTMLの入力フォーム3つ以上に入力された値全てをデータベースに登録したいです。
発生している問題・エラーメッセージ
学籍番号,姓,名といった項目があり、それらを登録したいのですが、3つ以上になると登録できません。
下記プログラムで言いますと学籍番号と姓や学籍番号と名といったフォームだと、問題なくデータベースに登録されるのですが、学籍番号、姓、名の全てフォームに実装して登録しようとすると”登録が失敗しました”が表示されます。
登録ボタンを押した後は、"登録が失敗しました"と表示されるだけで、具体的なエラーメッセージは表示されません。
該当のソースコード
HTML
1<!DOCTYPE html> 2 <form method="post" action="form2.php"> 3 <p>学籍番号</p><input type="text" name="student_id"><br> 4 <p>姓</p><input type="text" name="l_name"><br> 5 <p>名</p><input type="text" name="f_name"><br> 6 <input type="submit" value="登録する"><br> 7 </form>
PHP
1<?php 2 // データーベースへ接続 3 $link = mysqli_connect(" "," "," ",""); 4 5 // 接続に失敗すれば強制終了 6 if(mysqli_connect_error()){ 7 die("Failed Connect DB."); 8 } 9 //データが入力されているかどうかチェックする 10 if(array_key_exists('student_id',$_POST) OR array_key_exists('l_name', $_POST) OR array_key_exists('f_name', $_POST)) 11 { 12 if($_POST['student_id'] == ''){ 13 echo "学籍番号を入力してください"; 14 } 15 elseif($_POST['l_name']==''){ 16 echo "姓を入力してください"; 17 } 18 elseif($_POST['f_name']==''){ 19 echo "名を入力してください"; 20 } 21 else{ 22 //学籍番号が既に使用されていないかチェックする 23 $query = "SELECT `student_id` FROM `students` WHERE student_id = '".mysqli_real_escape_string($link,$_POST['student_id'])."'"; 24 $result = mysqli_query($link,$query); 25 if(mysqli_num_rows($result) > 0){ 26 echo "既にその学籍番号は使用されています。"; 27 }else{ 28 //未使用の場合、データベースに登録する 29 $query = "INSERT INTO `students` (`student_id`,`l_name`, 'f_name') VALUES('" 30 .mysqli_real_escape_string($link,$_POST['student_id']) 31 ."','" 32 .mysqli_real_escape_string($link,$_POST['l_name']) 33 ."','" 34 .mysqli_real_escape_string($link,$_POST['f_name']) 35 ."')"; 36 37 if(mysqli_query($link,$query)){ 38 echo "登録が成功しました。"; 39 } else{ 40 echo "登録が失敗しました"; 41 } 42 } 43 } 44 } 45?>
試したこと
フォームの値が正しく受け取れていないのかと思ったので、echoでPOSTされた値を出してみたり、データベース側のテーブル名やカラム名が間違っていないか見直したりしましたが、特に問題はありませんでした。
入力フォームが2つの場合はINSERTできているので、基本的な文は合っているかと思うのですが、3つ以上になると最後の$queryが実行できず、"登録が失敗しました"となってしまいます。
実際のプログラムでは、$link = mysqli_connect(" "," "," ","");
の部分は値を入れています。接続も確認済みです。
同じような経験がある方や、PHP経験者の方のアドバイスを頂きたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/09 00:18