0

テキスト フィールドの複数行をデータベースに挿入しようとしています。

<html>

<head>
</head>


<body>                      
        <table>
            <tr>
                <td><input type="text" id="name[0]" name="name[0]"></td>
                <td><input type="text" id="grade[0]" name="grade[0]"></td>
            </tr>
            <tr>
                <td><input type="text" id="name[1]"   name="name[1]"></td>
                <td><input type="text" id="grade[1]"  name="grade[1]"></td>
            </tr>
            <tr>
                <td><input type="text" id="name[2]"   name="name[2]"></td>
                <td><input type="text" id="grade[2]"  name="grade[2]"></td>
            </tr>
            <tr>
                <td><input type="text" id="name[3]"   name="name[3]"></td>
                <td><input type="text" id="grade[3]"  name="grade[3]"></td>
            </tr>   
        </table>

        <input type="button" id="submit_in" name="submit_in" value="submit">

</body>
</html>

Ajaxを使用してループできるようにIDにインデックスを付けましたが、Ajaxを使用してループして挿入する方法がわかりません。

<script type="text/javascript">
    $(document).ready(function(){
        $('#submit_in').click(function() {

            var stud_name = $('#name[0]').val();
            var stud_grade =  $('#grade[0]').val();

            alert(stud_name+" "+stud_grade);

            $.ajax({
                type:"post",
                url:"insert.php",
                dataType:'json',    
                data:{'name':stud_name,'grade':stud_grade},
                success:function(data){

                }
            });



        });
    });

</script>

そして、ここに私のPHPコードがあります:

<?php
$host = 'Localhost';
$username= 'root';
$password= '12345';
$db_name = 'multiple_ajax';

$con = mysql_connect($host,$username,$password) or die ("Cant Connect");
mysql_select_db($db_name) or die ("Cant Select DataBase");

error_reporting(E_ALL ^ E_NOTICE);


$name= $_POST['name'];
$grade = $_POST['grade'];   

    $insert = "INSERT INTO stud_info VALUES('$name','$grade')";

    if(@!mysql_query($insert)){
        die('error insert'.mysql_error());
    }

?>

私の PHP コードには、Ajax を使用して取得する変数が 2 つしかありません。これは、Ajax が id のインデックスを使用してその変数をループすると想定しているためです。Ajax と PHP は初めてです

4

1 に答える 1

2

HTTP リクエストを介して配列を渡すことができることはご存知でしょう。なぜ一度に 1 つずつリクエストを行うのですか? それらをすべて連結してください!

var GradeData = [];
$("table > tr").each(function() {
   var k = $(this).find("input[type='text']");
   if (k.length == 2) {
      GradeData.push({ "name": k.eq(0).val(), "grade": k.eq(1).val()});
   }
});

GradeData次に、名前とグレードを持つ各要素の配列が作成されます。AJAX 経由で渡すには、次のようにします。

$.ajax({
  url: "insert.php",
  type: "post",
  data: {
     students: GradeData
  }
});

そこから、PHP を使用してそれを回復するのは簡単なこと$_POST['students']です (配列の各要素の形式は常に Array('grade' => 'something', 'name' => 'something になります) '). そこからは、反復処理を行うだけで...完了です!

そこから行を挿入するのも同様に簡単です。

<?php
$host = 'Localhost';
$username= 'root';
$password= '12345';
$db_name = 'multiple_ajax';

$con = mysql_connect($host,$username,$password) or die ("Cant Connect");
mysql_select_db($db_name) or die ("Cant Select DataBase");

error_reporting(E_ALL ^ E_NOTICE);
foreach ($_POST['students'] as $data) {
    $name= $data['name'];
    $grade = $data['grade'];   
    $insert = "INSERT INTO stud_info VALUES('".mysql_real_escape_string($name)."','".mysql_real_escape_string($grade)."')";

    if(@!mysql_query($insert)){
       die('error insert'.mysql_error());
    }
}
?>
于 2012-11-18T20:33:35.233 に答える