2017-05-03 10 views
0

これは私の最初の投稿ではmysqliではなくmysqlを使用していましたので、推奨事項に従っていくつかの更新を行いました。 私は、javascriptを介してユーザーによって制御されるフィールドの可変セット(1〜20セット)を持つフォームを持っています。動的フォームを使用して1つまたは複数のフィールドセットをデータベースに挿入します。

動的コンテンツがないとすべて正常に動作します。私はcityからcity[]に私のHTMLフォームを変更した後、明らかに私のデータベースにデータを渡すことを停止しました。

私はこの仕事を成功させるためにあらゆる種類の方法を試みました。何か案は?

フォーム操作:

var i=0; //Global Variable i 
//function for increment 
function increment(){ 
    i +=1; 
} 

$(document).ready(function(e){ 
    /// Variables 
    var html ='<p /><div>'; 
     html+='<label for="city">City:</label>'; 
     html+=' <input type="text" name="childcity[]" id="city">'; 
     html+=' <label for="date">Date:</label>'; 
     html+=' <input type="text" name="childdate[]" id="date">'; 
     html+='<a href="#" id="removecity">Remove City</a>'; 
     html+='</div>'; 

    var maxRows = 20; 
    // var x = 1; 

    // Rows 
    $("#addcity").click(function(e){ 
     if(i <= maxRows){ 
      $("#container").append(html); 
      i++; 
     } 
    }); 

    // Remove Rows 
    $("#container").on('click','#removecity', function(e){ 
     $(this).parent('div').remove(); 
     i--; 
    }); 
}); 

フォームデータ検索および照会:

<?php 
/* Attempt MySQL server connection. Assuming you are running MySQL 
server with default setting (user 'root' with no password) */ 

$mysqli = new mysqli("localhost", "root", "", "pb1646a_jos1"); 

// Check connection 

// Escape user inputs for security 

$city = $_POST['city']; 
$date = $_POST['date']; 

foreach($city AS $key => $value){ 
    // attempt insert query execution 
    $sql = "INSERT INTO employe_table(name,age) 
    VALUES (
     '".$mysqli->real_escape_string($value)."', 
     '".$mysqli->real_escape_string($date['$key'])."' 
    )"; 
    $insert = $mysqli->query($query); 
} 
$mysqli->close(); // Close connection 
header("location: http://www.orastravelagency.com/modules/mod_pari/test/index.html") 
?> 

フォーム:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script src="java.js" type="text/javascript"></script> 
<meta charset="UTF-8"> 
<title>Add Record Form</title> 
</head> 
<body> 
<form action="insert2.php" method="post"> 
    <div> 
    <p> 
     <label for="name">Trip Name:</label> 
     <input type="text" name="name" id="name"> 
    </p> 
    </div> 
    <div id="container"> 
    <p> 
     <label for="">City:</label> 
     <input type="text" name="city" id="city[]"> 
     <label for="date">Date:</label> 
     <input type="text" name="date" id="date[]"> 
     <a href="#" id="addcity">Add City</a> 
    </p> 
    </div> 
    <p /> 
    <input type="submit" value="submit"> 
</form> 
</body> 
</html> 

答えて

1

$date['$key']$date[$key]であるべきです。引用符によって$key変数の評価が妨げられているため、リテラルインデックスとして$keyが使用されています。

ただし、変数を連結するのではなく、準備済みの文を使用する必要があります。

$city = $_POST['city']; 
$date = $_POST['date']; 

$stmt = $mysqli->prepare("INSERT INTO employe_table(name, age) VALUES (?, ?)"); 
$stmt->bind_param("ss", $name, $age); 
foreach ($city as $key => $name) { 
    $age = $date[$key]; 
    $stmt->execute(); 
} 
+0

私はそれが私にサーバエラーを与えてくれるようにしようとしています( "si"は何を表していますか?) –

+0

siは最初のカラムを文字列、2番目のカラムを整数として表します。 – Barmar

+0

エラーは何ですか? – Barmar

0

プロセスにはいくつか問題があります。

複数の入力フィールドを生成し、配列として$_POSTに格納したいとします。

変更この:しかし、あなたは間違って属性を記述している

、$ _POSTはid年代を読み取れません:これに

<input type="text" name="city" id="city[]"> 
<input type="text" name="date" id="date[]"> 

<input type="text" name="city[]"> 
<input type="text" name="date[]"> 

私が削除されていますあなたのid属性はあなたのページに重複したIDを持つべきではありません。 cssのためにこれらのフィールドを特定する必要がある場合は、そのname属性を使用するか、またはclass属性を追加してそれらを識別します。

JavaScriptを動的に追加する場合は、name=city[]name=date[]を再度使用する必要があります。 IDを削除します。

これは、ご使用の$_POST配列が意図したとおりに正しく埋め込まれた多次元配列になるようにします。

$name=$_POST['name']; // this is a string 
$cities=$_POST['city']; // this is an array 
$dates=$_POST['date']; // this is an array 

あなたのクエリに含める予定されていない場合cityはあなたの形態である、なぜ私は本当に理解していない - 私は私の溶液中に含まれます。また、テーブルの列には直観的に名前が付けられていないので、格納する値をよりよく表すものに変更することを検討してください。

$stmt=$mysqli->prepare("INSERT INTO employe_table (`name`,`city`,`date`) VALUES (?,?,?)"); 
$stmt->bind_param("sss",$name,$city,$date); 
foreach($cities as $index=>$city){ 
    $date=$dates[$index]; 
    $stmt->execute(); 
} 

プログラミングする場合、必ずDAMP and DRY仕事を生産するために努力する - それは指数関数的にあなたとそれを見て他の誰かを助けます。

関連する問題