[英]separating text from a single textbox into 2 php variables using javascript
[英]Separating variables for SQL insert using PHP and JavaScript
通过PHP / MySQL将显示一个网格表,该表具有一列供用户检查的复选框。 名称为“ checkMr []”,如下所示:
echo "<tr><td>
<input type=\"checkbox\" id=\"{$Row[CONTAINER_NUMBER]}\"
data-info=\"{$Row[BOL_NUMBER]}\" data-to=\"{$Row[TO_NUMBER]}\"
name=\"checkMr[]\" />
</td>";
您将注意到,有id,data-info和data-to属性发送到模式窗口。 这是将属性发送到模式窗口的JavaScript:
<script type="text/javascript">
$(function()
{
$('a').click(function()
{
var selectedID = [];
var selectedBL = [];
var selectedTO = [];
$(':checkbox[name="checkMr[]"]:checked').each(function()
{
selectedID.push($(this).attr('id'))
selectedBL.push($(this).attr('data-info'))
selectedTO.push($(this).attr('data-to'))
});
$(".modal-body .containerNumber").val( selectedID );
$(".modal-body .bolNumber").val( selectedBL );
$(".modal-body .toNumber").val( selectedTO );
});
});
</script>
到现在为止还挺好。 模态通过javascript检索属性。 我可以选择显示或不显示它们。 这是模态检索属性的方式:
<div id="myModal">
<div class="modal-body">
<form action="" method="POST" name="modalForm">
<input type="hidden" name="containerNumber" class="containerNumber" id="containerNumber" />
<input type="hidden" name="bolNumber" class="bolNumber" id="bolNumber" />
<input type="hidden" name="toNumber" class="toNumber" id="toNumber" />
</form>
</div>
</div>
表单中还有其他字段供用户输入数据,我只是选择不显示代码。 但是到目前为止,一切正常。 有一个提交按钮,然后将表单数据发送到PHP变量。 有一个mysql INSERT语句,然后更新必要的表。
这是PHP代码(在模式窗口中):
<?php
$bol = $_POST['bolNumber'];
$container = $_POST['containerNumber'];
$to = $_POST['toNumber'];
if(isset($_POST['submit'])){
$bol = mysql_real_escape_string(stripslashes($bol));
$container = mysql_real_escape_string(stripslashes($container));
$to = mysql_real_escape_string(stripslashes($to));
$sql_query_string =
"INSERT INTO myTable (bol, container_num, to_num)
VALUES ('$bol', '$container', '$to')
}
if(mysql_query($sql_query_string)){
echo ("<script language='javascript'>
window.alert('Saved')
</script>");
}
else{
echo ("<script language='javascript'>
window.alert('Not Saved')
</script>");
}
?>
所有这些工作。 用户选中一个复选框,打开模式窗口,用户填写其他表单字段,点击保存,只要没有问题,就会弹出相应的窗口并说“已保存”。
这是问题所在:当用户选中MULTIPLE复选框时,模态确实会检索多个容器号,我可以显示它。 它们似乎已经被逗号分隔。
当PHP变量包含多个容器编号(或bol编号)时,就会出现问题。 容器号需要分开,我想PHP必须有一种方法可以为每个容器号自动创建多个INSERT语句。
我知道变量需要以某种方式放置在数组中。 然后必须有一个FOR循环,该循环将读取每个容器,如果有逗号,则将它们分开。
我只是不知道该怎么做。
当像[]
一样通过HTTP发送数组值时,它们已经是PHP中的数组,因此您可以对其进行迭代:
foreach ($_POST['bol'] as $bol) {
"INSERT INTO bol VALUES ('$bol')";
}
您的查询容易被注入。 您应该对PDO / mysqli使用正确参数化的查询
假设*_NUMBER
变量作为正下方的键是整数,请使用:
echo '<tr><td><input type="checkbox" value="'.json_encode(array('CONTAINER_NUMBER' => $Row[CONTAINER_NUMBER], 'BOL_NUMBER' => $Row[BOL_NUMBER], 'TO_NUMBER' => $Row[TO_NUMBER])).'" name="checkMr[]" /></td>';
然后...
$('a#specifyAnchor').click(function() {
var selectedCollection = [];
$(':checkbox[name="checkMr[]"]:checked').each(function() {
selectedCollection.push($(this).val());
});
$(".modal-body #checkboxCollections").val( selectedCollection );
});
然后...
<form action="" method="POST" name="modalForm">
<input type="hidden" name="checkboxCollections" id="checkboxCollections" />
然后...
<?php
$cc = $_POST['checkboxCollections'];
if (isset($_POST['submit'])) {
foreach ($cc as $v) {
$arr = json_decode($v);
$query = sprintf("INSERT INTO myTable (bol, container_num, to_num) VALUES ('%s', '%s', '%s')", $arr['BOL_NUMBER'], $arr['CONTAINER_NUMBER'], $arr['TO_NUMBER']);
// If query fails, do this...
// Else...
}
}
?>
一些警告:
$('a').click()
函数的选择器。 这样做是为了使您的表单仅在单击特定链接时才更新。 mysql_real_escape_string
函数。 确保您的数据可以正确插入表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.