我在使用下面的代码时遇到问题。它已被简化以显示问题。我使用循环是因为输入名称相同并且需要在 mysql 表中创建多个新行。问题是我正在使用 $_POST['name'][$i] 并且该表不会接受,因为它不将其视为“文本?”,...我认为。 就像我说的,代码已经大大简化。
for($i=0;$i<count($_POST['url']); $i++) {
$sql = 'INSERT INTO urls (url) VALUES ('. $_POST['url'][$i].')';
if(!mysql_query($sql)) {
echo "error " . mysql_error();
}
}
我试图用这个来补救 -
$sql = 'INSERT INTO urls (url) VALUES('.'"'.$_POST['url'][$i].'"'.')';
如果我这样做,它就可以工作,没有错误
$sql = 'INSERT INTO urls (url) VALUES (' " hello " ')';
这可能是新手犯的错误,对吧?感谢您对此的任何帮助。
最佳答案
更简洁的方法(并且错误已修复):
$urls = (isset($_POST['url']) && is_array($_POST['url'])) ? $_POST['url'] : array();
foreach($urls as $url) {
if(!is_string($url)) {
continue;
}
$sql = "INSERT INTO urls (url) VALUES ('" . mysql_real_escape_string($url) . "')";
if(!mysql_query($sql)) {
echo "error " . mysql_error();
}
}
确保 $_POST['url'] 是一个数组将避免尝试将非数组(或不存在的键)视为数组。 is_string 是为了防止用户尝试放入子数组以使 PHP 抛出“使用数组作为字符串”通知。转义是为了避免SQL注入(inject),添加单引号是为了让MySQL知道它是一个字符串。
关于PHP,试图将 $_POST ['var' ] 作为文本放入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8542612/