Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未填充表单值通过php在mysql中创建空行_Php_Mysql_Forms_Field - Fatal编程技术网

未填充表单值通过php在mysql中创建空行

未填充表单值通过php在mysql中创建空行,php,mysql,forms,field,Php,Mysql,Forms,Field,第一次海报,长期潜伏者:) 我有一个表单设置,它将一个包含七列的表中多行的数据发布到一个php函数中,以将其作为新记录插入数据库中。表单工作得很好,但是,如果表单中有一行未填充,那么php函数将在数据库中创建一个空行。我正试图找出如何避免这种情况。我确信它与表单本身无关,而是与php有关。请看一看。我完全愿意接受建议 <?php require("header.php"); require("dbinc.php"); foreach($_POST['card'] as $row=>$

第一次海报,长期潜伏者:) 我有一个表单设置,它将一个包含七列的表中多行的数据发布到一个php函数中,以将其作为新记录插入数据库中。表单工作得很好,但是,如果表单中有一行未填充,那么php函数将在数据库中创建一个空行。我正试图找出如何避免这种情况。我确信它与表单本身无关,而是与php有关。请看一看。我完全愿意接受建议

<?php
require("header.php");
require("dbinc.php");
foreach($_POST['card'] as $row=>$cardcounted) 
{
    $model=$_POST['model'];
    $serial=$_POST['serial'][$row];
    $card=$cardcounted;
    $status=$_POST['status'];
    $date=$_POST['date'];
    $location=$_POST['location'];
    $query = mysql_query("INSERT INTO receivers (`id`, `model`, `serial`, `card`, `status`, `date`, `location`) VALUES ('null','$model','$serial','$card','$status','$date','$location')");

    if(!isset($serial[$row]) || $serial[$row] == '') {
        // error message here, redisplay form if desired
    } else {
        // no errors - process data
    } 

    if (!$query)
    {
        die('Error: ' . mysql_error());
    }
}
echo $row+1 . " record(s) added";

mysql_close()
?>

可能尝试将mysql查询移动到
中,否则无论是否存在表单错误,当前都会将值插入数据库。此外,您还需要保护插入数据库的任何内容。现在是SQL注入实地考察;)

第一个选择是使用JavaScript验证来发现无效的表单提交,一些用户可能会禁用JavaScript,因此始终建议进行服务器端验证

所以写一个方法,比如

isValid($postArray) {
  foreach($postArray as $key => $value) {
    if ($value == "") {
       return false;    
    }
  }
  return true;
}
如果表单字段名和db列名相似,则可以使用

$sql = "INSERT INTO receivers ";
$keys = "(";
$values = "(";
foreach($postArray as $key => $value) {
    if ($value != "") {
       $keys += $key;
       $values += $value;
    }
}

$sql = $sql + $keys +" VALUES "+ $values;

现在是2011年——您的代码非常容易受到SQL注入攻击,甚至一点都不好笑。使用预先准备好的声明和PDO。今天我第四次或第五次提到这个话题:是的,我知道:)它在一个专用的离线网络上供大楼内使用。这是我为个人使用而拼凑起来的东西。是的,在内部工具中,如果你键入
你是
@Alvaro-压力大的一天,那么崩溃是可以的。哈:P放开它,伙计,放开它!