【问题标题】:PHP - Database generates blank row when loading pagePHP - 加载页面时数据库生成空白行
【发布时间】:2011-05-19 19:59:43
【问题描述】:

我有一个表单,它将提交将一行插入数据库的信息(公司详细信息)。提交工作正常,但我还发现转到包含表单的页面会在数据库中插入一个空白行。知道为什么会这样吗?代码如下:

<?php
echo "<form action='addnew.php' method='post'>";
echo "<input type='text' name='categoryAdd' value='Travel'/><br/>";
echo "<input type='text' name='EstablishmentNameAdd' value='EstablishmentName'/><br/>";
echo "<input type='text' name='Address1Add' value='Address1'/><br/>";
echo "<input type='text' name='Address2Add' value='Address2'/><br/>";
echo "<input type='text' name='Address3Add' value='Address3'/><br/>";
echo "<input type='text' name='Address4Add' value='Address4'/><br/>";
echo "<input type='text' name='PostcodeAdd' value='Postcode'/><br/>";
echo "<input type='text' name='NearestStationAdd' value='NearestStation'/><br/>";
echo "<input type='text' name='TelAdd' value='Tel'/><br/>";
echo "<input type='text' name='FaxAdd' value='Fax'/><br/>";
echo "<input type='text' name='EmailAdd' value='Email'/><br/>";
echo "<input type='text' name='WebsiteAdd' value='Website'/><br/>";
echo "<input type='text' name='DescriptionAdd' value='Description'/><br/>";
echo "<input type='submit' value='test'/>";
echo "</form>"; 

$EstablishmentNameAdd = mysql_real_escape_string($_POST['EstablishmentNameAdd']);
$CategoryAdd = $_POST['categoryAdd'];
$Address1Add = mysql_real_escape_string($_POST['Address1Add']);
$Address2Add = mysql_real_escape_string($_POST['Address2Add']);
$Address3Add = mysql_real_escape_string($_POST['Address3Add']);
$Address4Add = mysql_real_escape_string($_POST['Address4Add']);
$PostcodeAdd = $_POST['PostcodeAdd'];
$NearestStationAdd = mysql_real_escape_string($_POST['NearestStationAdd']);
$TelAdd = $_POST['TelAdd'];
$FaxAdd = $_POST['FaxAdd'];
$EmailAdd = mysql_real_escape_string($_POST['EmailAdd']);
$WebsiteAdd = mysql_real_escape_string($_POST['WebsiteAdd']);
$DescriptionAdd = mysql_real_escape_string($_POST['DescriptionAdd']);

$result1 = mysql_query("INSERT into establishment_id (EstablishmentName) values ('$EstablishmentNameAdd')");
$result2 = mysql_query("SELECT * from establishment_id where EstablishmentName = '$EstablishmentNameAdd'");
while($row = mysql_fetch_array($result2))
  {
$ID = $row['EstablishmentID'];
$NAME = $row['EstablishmentName'];

};
$result3 = mysql_query("INSERT into establishmentdetails (EstablishmentID, EstablishmentName, category, Address1, Address2, Address3, Address4, Postcode, NearestStation, Tel, Fax,
Email, Website, Description) values('$ID', '$EstablishmentNameAdd', '$CategoryAdd', '$Address1Add', '$Address2Add', '$Address3Add', '$Address4Add', '$PostcodeAdd', '$NearestStationAdd', '$TelAdd', '$FaxAdd', '$EmailAdd',
 '$WebsiteAdd', '$DescriptionAdd')");

?>

【问题讨论】:

    标签: php sql forms


    【解决方案1】:

    在所有回声之后添加:

    if(!empty($_POST)){
    ...
    }
    

    把所有底部的代码都包进去,这样只有在有帖子的时候才会插入。

    【讨论】:

    • 这是一种糟糕的做法。 if ($_SERVER['REQUEST_METHOD'] == 'POST') 保证工作。如果提交是合法的空,你的将失败。
    • @MarcB,是的,但是 OP 不想在空帖子上插入,这就是问题所在!
    • 实际上,他正在 GET 上进行插入,这就是整个问题。简单地说“非空 POST”不会阻止空白字段通过。他仍然需要添加更多的服务器端验证。
    • @MarcB 不,他的表单是post,但是是的,必须进行更多验证,这只是一个开始
    • ...but I also find that going to the page containing the form will...。最初的点击是 GET,然后是帖子。
    【解决方案2】:

    发生这种情况是因为您正在回显表单……然后立即将尚不存在的内容插入到数据库中。

    你可以试试这个:

    if(count($_POST) > 0 && in_array('EstablishmentNameAdd',$_POST)) {
    $EstablishmentNameAdd = mysql_real_escape_string($_POST['EstablishmentNameAdd']);
    $CategoryAdd = $_POST['categoryAdd'];
    $Address1Add = mysql_real_escape_string($_POST['Address1Add']);
    $Address2Add = mysql_real_escape_string($_POST['Address2Add']);
    $Address3Add = mysql_real_escape_string($_POST['Address3Add']);
    $Address4Add = mysql_real_escape_string($_POST['Address4Add']);
    $PostcodeAdd = $_POST['PostcodeAdd'];
    $NearestStationAdd = mysql_real_escape_string($_POST['NearestStationAdd']);
    $TelAdd = $_POST['TelAdd'];
    $FaxAdd = $_POST['FaxAdd'];
    $EmailAdd = mysql_real_escape_string($_POST['EmailAdd']);
    $WebsiteAdd = mysql_real_escape_string($_POST['WebsiteAdd']);
    $DescriptionAdd = mysql_real_escape_string($_POST['DescriptionAdd']);
    
    $result1 = mysql_query("INSERT into establishment_id (EstablishmentName) values ('$EstablishmentNameAdd')");
    $result2 = mysql_query("SELECT * from establishment_id where EstablishmentName = '$EstablishmentNameAdd'");
    while($row = mysql_fetch_array($result2))
      {
    $ID = $row['EstablishmentID'];
    $NAME = $row['EstablishmentName'];
    
    };
    $result3 = mysql_query("INSERT into establishmentdetails (EstablishmentID, EstablishmentName, category, Address1, Address2, Address3, Address4, Postcode, NearestStation, Tel, Fax,
    Email, Website, Description) values('$ID', '$EstablishmentNameAdd', '$CategoryAdd', '$Address1Add', '$Address2Add', '$Address3Add', '$Address4Add', '$PostcodeAdd', '$NearestStationAdd', '$TelAdd', '$FaxAdd', '$EmailAdd',
     '$WebsiteAdd', '$DescriptionAdd')");
    }
    

    【讨论】:

    • :P 抱歉打错字了。我拉了!谢谢
    • 你为什么选择EstablishmentNameAdd作为帖子的警告?
    • 只是一个例子。我选择它而不是其他的,因为它似乎最有可能是必要的。例如,您可以拥有业务但没有网站。或者,也许您正在建立您的机构……所以您还没有电话号码。但是,所有机构都会有一个名称。在任何时候与该机构相关的每个人都会知道这个名字。
    • 我只是解释了我为什么选择它。如果 OP 对该字段有问题,他可以更改它。
    • 真的很感谢大家的帮助,但由于某种原因它仍然无法正常工作。我没有提到的一件事是,建立 ID 表有一个用于唯一 ID 的自动增量字段。这有关系吗?有趣的是,当我刷新页面时,它不会生成空白行。
    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2012-12-20
    相关资源
    最近更新 更多