如何阻止PHP将空行/字段添加到MYSQL数据库

时间:2011-09-20 08:58:44

标签: php mysql

所以我的表格看起来如此。

<form action="thanks.php" method="post" class="niceform" name="myform">
<table>
<tr>
<td><label for="company_name">Company Name</label></td>
<td><input type="text" name="company" value="" size="38" /></td>
</tr>
// and so on

我有javascript验证。但问题是,当我从localhost / mysite / form / thanks.php直接转到thanks.php时,我看到phpmyadmin时会插入一个空行。 Thanks.php看起来就是这样。

<?php
// open the connection
$conn = mysql_connect("localhost", "root", "password");
// pick the database to use
mysql_select_db("company_register",$conn);

$sql = "INSERT INTO `tblsignups` VALUES ('NULL', '$_POST[company]', '$_POST[email]', '$_POST[phone]', '$_POST[address]', '$_POST[comments]', '$_POST[contact_person]')";

$result = mysql_query($sql, $conn) or die(mysql_error());

mysql_close($conn);
?>
// And I have a thank you msg I display

我如何检查是否有人应该直接转到thanks.php我告诉他们先填写表格,不要在数据库上放任何东西

9 个答案:

答案 0 :(得分:2)

您需要检查表单是否已提交。你可能想要这样的东西:

<?php

if ($_POST)
{
    // open the connection
    $conn = mysql_connect("localhost", "root", "password");
    // pick the database to use
    mysql_select_db("company_register",$conn);

    $sql = "INSERT INTO `tblsignups` VALUES ('NULL', '$_POST[company]', '$_POST[email]', '$_POST[phone]', '$_POST[address]', '$_POST[comments]', '$_POST[contact_person]')";

    $result = mysql_query($sql, $conn) or die(mysql_error());

    mysql_close($conn);
}

?>

答案 1 :(得分:1)

你可以全部检查

if(empty($_POST['company']))
{
//redirect or show error msg that its required
}
else
{
//do what you want
}

因此对所有人而言。

如果您已发布表单$ _POST将始终为true,所以当您必须检查空值时,您必须为所有人检查这样。

 if(empty($_POST['company']) || empty($_POST['email']) || empty($_POST['user']))

等等。

答案 2 :(得分:1)

检查请求中是否提供了公司名称,且该名称是否为空。如果没有公司名称,可能会将用户重定向到表单,可能会显示错误消息。

表格:

<form action="thanks.php" method="post" class="niceform" name="myform">
<?php if($_GET['error']): ?>
<span class="error">Please fill the required fields!</span>
<?php endif; ?>
<table>
<tr>
<td><label for="company_name">Company Name</label></td>
<td><input type="text" name="company" value="" size="38" /></td>
</tr>

Thanks.php:

<?php
// Is company specified?
if(!isset($_POST['company']) || $_POST['company'] == '') {
    header('Location: form.php?error=1');
    exit();
}

// open the connection
$conn = mysql_connect("localhost", "root", "password");
// pick the database to use
mysql_select_db("company_register",$conn);

$sql = "INSERT INTO `tblsignups` VALUES ('NULL', '$_POST[company]', '$_POST[email]', '$_POST[phone]', '$_POST[address]', '$_POST[comments]', '$_POST[contact_person]')";

$result = mysql_query($sql, $conn) or die(mysql_error());

mysql_close($conn);
?>

答案 3 :(得分:1)

检查是否有$ _POST是不够的。在帖子后重定向 - 否则如果你添加一行,并刷新页面,你最终将在数据库中有2条记录。所以发布到process.php,从process.php重定向到thanks.php。另外,在PHP中验证,而不是在JavaScript中验证

答案 4 :(得分:1)

这是一个草图示例

收到POST数据后,您必须检查并提出错误标志
如果有一些错误显示表格而不是保存它

<?  
if ($_SERVER['REQUEST_METHOD']=='POST') {  

  $err = array();
  //performing all validations and raising corresponding errors
  if (empty($_POST['name']) $err[] = "Username field is required";  
  if (empty($_POST['text']) $err[] = "Comments field is required";  

  if (!$err) {  
    // if no errors - saving data 
    // and then redirect:
    header("Location: ".$_SERVER['PHP_SELF']);
    exit;
  }  else {
    // all field values should be escaped according to HTML standard
    foreach ($_POST as $key => $val) {
      $form[$key] = htmlspecialchars($val);
    }
} else {
  $form['name'] = $form['comments'] = '';  
}
include 'form.tpl.php';
?>  

并修改您的表单以便显示错误

<? if ($err): ?>
  <? foreach($err as $e): ?>
<div class="err"><?=$e?></div>
  <? endforeach ?>
<? endif ?>
<form>
  <input type="text" name="name" value="<?=$form['name']?>">
  <textarea name="comments"><?=$form['comments']?></textarea>
  <input type="submit">
</form>

答案 5 :(得分:1)

请检查以下代码

<?php
// open the connection
$conn = mysql_connect("localhost", "root", "password");
// pick the database to use
mysql_select_db("company_register",$conn);

if($_POST[company]!="" or $_POST[email]!=""  or $_POST[phone]!="" or $_POST[address]!="" ) {
    $sql = "INSERT INTO `tblsignups` VALUES ('NULL', '$_POST[company]', '$_POST[email]', '$_POST[phone]', '$_POST[address]', '$_POST[comments]', '$_POST[contact_person]')";
    $result = mysql_query($sql, $conn) or die(mysql_error());   
} else {
   echo "Please fill all fields ";
}

mysql_close($conn);

答案 6 :(得分:0)

if(count($_POST)>0){
    // your code...
}
else{
   // else code...
}

答案 7 :(得分:0)

首先:不要在表单中使用表格。 (我很抱歉无法抗拒,但这会伤到我的眼睛)

关于主题:始终记得在前端和后端都进行验证。

所以在这种情况下,为你的php文件添加一些验证,如:

<?php

if(empty($_POST['company']))
{
// show validation message
} else {

// open the connection
$conn = mysql_connect("localhost", "root", "password");
// pick the database to use
mysql_select_db("company_register",$conn);

$sql = "INSERT INTO `tblsignups` VALUES ('NULL', '$_POST[company]', '$_POST[email]', '$_POST[phone]', '$_POST[address]', '$_POST[comments]', '$_POST[contact_person]')";

$result = mysql_query($sql, $conn) or die(mysql_error());

mysql_close($conn);
}
?>

答案 8 :(得分:-1)

只需检查是否存在所有必需的表单字段。如果它们不存在,请重定向到您的表单页面。

if(!array_key_exists("company", $_POST){
   header('Location: http://your.form.page.html');
}