我对js还很陌生。这里我有一个js脚本,它使用基于php的mysql向数据库添加了一个点击查询时输入的文本框。每个新添加的文本框都有一个id名称,末尾有一个连续的数字,表示从js按钮添加的文本盒的数量,如id_0、id_1等。我想知道是否可以单独为每个连续的文本框运行php查询。我遇到的问题是跟踪添加了多少新文本框,以了解我应该运行多少次查询迭代,因为点击次数是一个js变量。有没有一种方法可以根据js的点击次数,特别是js变量来迭代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 <textarea rows="1" name="id_'+ value0 +'"><?php echo $_POST["id_'+ value0 +'"]; ?></textarea></label> ';
}
</script>
对于php部分,我将$_POST变量转换为php变量,并对将php变量与特定列匹配的数据库运行一个简单的查询。到目前为止,只有当我知道将有多少$_POST变量时,我才能做到这一点。
我这样做的方式(这可能不是最好的方式)是有一个隐藏的HTML输入,其中包含您创建的文本框的数量。每次在JS中添加新的文本框时,都会增加隐藏输入的值。
然后,您可以在PHP中进行一个循环来获取每个POST元素。
如果动态编写查询,则不需要知道有多少$_POST
变量。只需确保所有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键作为列存在于表中,则它将被插入。