PHP,试图将 $_POST ['var' ] 作为文本放入表中

标签 php mysql

我在使用下面的代码时遇到问题。它已被简化以显示问题。我使用循环是因为输入名称相同并且需要在 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/

相关文章:

php - 如何将数组转换为html表格

mysql - 用第二个随机行连接 MySQL 中的两个表

php - 我需要在 SQL 中进行左联接、自然联接还是简单联接?

php - 使用 SUM() 问题选择付款的简单单选按钮

javascript - PHP 棘轮和 WebRTC

php - 如何在azure上创建服务器并在其上托管php、mysql站点

php - 从两个表中选择数据时出错

MySQL 索引未在大型数据库中使用

php - PHP网站如何防止多次登录

php - 从表中请求数据并以 html 形式显示