2016-05-11 8 views
0

私はかなりjsを新しくしています。ここで私はPHPベースのMySQLを使用してデータベースへのクエリのクリックでテキストボックス入力を追加するjsスクリプトを持っています。それぞれの新しい追加されたテキストボックスには、id_0、id_1などのjsボタンから追加されたテキストボックスの数の最後に連続した番号のID名があります。連続したテキストボックスごとにPHPクエリを実行できるかどうかは疑問です。私が抱えている問題は、クリック数がjs変数であるため、実行する必要があるクエリの反復回数を知るためにいくつの新しいテキストボックスが追加されたかを把握しておくことです。 jsのクリック数、具体的にはjs変数に基づいてPHPクエリを反復する方法はありますか? (または私は間違った方法でこれを行うと思うのですか?)入力ボックス追加するjsのクリックに基づく複数のPHPクエリ

スクリプト:PHPの一部に

<input id="btnAdd" type="button" value="Add" /> 
<br /> 
<br /> 
<div id="TextBoxContainer"> 
</div> 
<br /> 
<input id="btnGet" type="button" value="Get Values" /> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    var click_number = 0; 
    $("#btnAdd").bind("click", function() { 
     var div = $("<div />"); 
     click_number++; 
     console.log(click_number); 
     div.html(GetDynamicTextBox("id"+click_number)); 
     $("#TextBoxContainer").append(div); 
    }); 
    $("body").on("click", ".remove", function() { 
     $(this).closest("div").remove(); 
     click_number--; 
     console.log(click_number); 
    }); 
}); 
function GetDynamicTextBox(value0) { 

    return '<label>Input &nbsp;<textarea rows="1" name="id_'+ value0 +'"><?php echo $_POST["id_'+ value0 +'"]; ?></textarea></label>&nbsp;'; 

} 
</script> 

が、私はPHPの変数に$ _POST変数をオンにし、シンプルを実行しますphp変数と特定の列を照合してデータベースに照会します。これまでは、$ _POST変数がいくつあるか分かっていれば、これを行うことができます。

答えて

0

私がこれを行う方法(これは最良の方法ではないかもしれません)は、作成したテキストボックスの数を含む隠しHTML入力を持つことです。 JSに新しいテキストボックスを追加するたびに、非表示入力の値を増やします。

PHPで各POST要素を取得するループを作成できます。

0

クエリを動的に書き込む場合、いくつの変数があるかを知る必要はありません。例えば

、あなたが持っている場合:ただ、すべてのPOSTのインデックスは、テーブル内の列名と一致していることを確認してください。..

$_POST['name']="bob" 
$_POST['age'] = "102" 

はあなたが動的にクエリにそれを回すことができる

// First, for security, we should create an array 
// with column names to check against to avoid SQL injection 
$tableColumns = array("name", "age", "birthday", "favorite_color"); 

// This will contain the data that we want to insert 
$insertables = array(); 

// Get the data from the post variables that 
// are named after columns in our table 
foreach($_POST as $k->$v) 
    if(in_array($k, $insertables)) 
     $insertables[$k] = $v; 

// Create a a query dynamically 
// I'm assuming you're using PDO since you didn't specify 
$sql = $pod->prepare("INSERT INTO `table` (`".implode("`, `", array_keys($insertables))."`) VALUES (:".implode(", :", array_keys($insertables)).")"); 

// Execute it 
$sql->execute($insertables); 

これで、必要なPOSTデータを送信できます。POSTキーがテーブルの列として存在する場合は、挿入されます。

+0

投稿インデックスを列に一致させると、テキストボックスを追加するたびに最新の追加されたテキストボックスが前のテキストボックスの前の入力を上書きすることはありません。 – Steven

+0

いいえ、すべてのajax呼び出しに対して新しい行を挿入するだけです。 「挿入」クエリを実行しても何も上書きされません。 「更新」クエリは物事を上書きすることができます。 –

+0

私は自分のフォローアップの質問を間違っていると思っている、あるいはまだ混乱しているかもしれないと思います。最初は$ _POST ['name'] = "bob"を設定しました。入力用の変数として$ _POST ['name']を持つjsスクリプトで2つの入力ボックスを作成すると、同じidを持つ2つの同一のテキストエリアが作成され、後者のid入力だけが認識されます。これは正しい? – Steven

関連する問題