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

时间:2011-07-11 12:08:49

标签: php mysql forms field

第一次海报,长时间潜伏着:) 我有一个表单设置,将单个表中的多行数据发布到一个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()
?>

我在行上的序列号中添加了!isset来检查空帖,但我不确定如何正确合并。我认为我在正确的轨道上,只需要一点推力:)

2 个答案:

答案 0 :(得分:0)

也许尝试将您的mysql查询移动到当前您在数据库中插入值的else,无论您是否有表单错误。此外,您还需要保护要插入数据库的任何内容。它现在是一个SQL注入实地考察;)

答案 1 :(得分:0)

首选是使用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;