我有一个只有2个字段的数据库。第一个是数字列表,第二个是数字的状态。我正在尝试使用一个表单,允许我批量输入数字列表并将其状态更新为已使用。我无法弄清楚我搞砸了哪里。非常感谢任何和所有帮助。
PHP
$pin=$_POST['pin'];
$xx=explode("\n", $pin);
$sql="UPDATE new_table SET Status = 'used' WHERE number = '". $pin . "'";
foreach($xx as $pin){
if($pin!=""){
$sql.="('".trim($pin)."'),";
}
}
$sql=substr($sql,0,-1);
$mysql=new mysqli('127.0.0.1', '******', '********', '******');
$mysql->query($sql);
$mysql->close();
}
?>
表格
<html>
<body>
<form method="post">
<label> Enter Sims (1 for each line)</label>
<br/>
<textarea rows="10" cols="100" name="pin" ></textarea>
<br/>
<input type="submit" value="save" />
</form>
</body>
</html>
答案 0 :(得分:0)
警告:您的代码以及此答案中的代码示例可能容易受到SQL-injection攻击。
假设您的$_POST['pin']
包含这样的数据(用\n
分隔的单个多行字符串):
1234
5678
9012
将其直接放入查询字符串将导致查询:
UPDATE new_table SET Status = 'used' WHERE number = 1234
5678
9012
这将产生语法错误,因此不会执行查询。
了解您的目标,您需要更新该字段的状态,其中number
字段为IN
其中一个引脚。正确的查询应如下所示:
UPDATE new_table SET Status = 'used' WHERE number IN (1234, 5678, 9012)
要实现此目的,您可以使用implode功能。因此,要创建类似于上面的查询,您可以按如下方式更改代码:
$pin = $_POST['pin'];
$xx = implode(",", explode("\r\n", $pin));
$sql = "UPDATE new_table SET Status = 'used' WHERE number IN (". $xx . ")";
$mysql=new mysqli('127.0.0.1', '******', '********', '******');
$mysql->query($sql);
$mysql->close();