我有一个只有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>发布于 2016-06-04 06:30:47
Warning:您的代码以及此答案中的代码示例可能容易受到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();https://stackoverflow.com/questions/37624117
复制相似问题