【问题标题】:Empty Form Field Validation Issues - Cannot Write Into Database空表单字段验证问题 - 无法写入数据库
【发布时间】:2014-01-13 16:08:24
【问题描述】:

我正在关注 W3schools 的教程,该教程检查表单中的空条目,然后在每个字段旁边显示错误,例如如果用户在每个字段旁边省略了他们的名字和姓氏,则显示“输入您的名字”并显示“输入您的姓氏”。

他们没有解释的是如何将数据写入表中。我知道怎么做,但我不能让它与他们的脚本一起工作。

这是完整的代码。很抱歉造成混乱。

<?php
session_start();
include "connect.php";
error_reporting(E_ERROR);
$fnameErr = $snameErr = $unameErr = $passwordErr = $emailErr = "";
$forename = $surname = $username = $password = $email = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
   if (empty($_POST["forename"]))
     {$fnameErr = "Enter your forename";}
   else
     {$forename = validate_input($_POST["forename"]);}
   if (empty($_POST["surname"]))
     {$snameErr = "Enter your surname";}
   else
     {$surname = validate_input($_POST["surname"]);}
   if (empty($_POST["username"]))
     {$unameErr = "Enter a username";}
   else
     {$username = validate_input($_POST["username"]);}
   if (empty($_POST["password"]))
     {$passwordErr = "Enter a password";}
   else
     {$password = validate_input($_POST["password"]);}
   if (empty($_POST["email"]))
     {$emailErr = "Enter your email address";}
   else
     {$email = validate_input($_POST["email"]);}
}
function validate_input($data)
{
     $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);
     return $data;
}
else {
$Link = mysql_connect($Host, $User, $Password);
$Query = "INSERT INTO $Table_2 VALUES ('0','".mysql_escape_string('forename')."','".mysql_escape_string("surname")."', '".mysql_escape_string("username")."', '".mysql_escape_string("password")."', '".mysql_escape_string("email")."')";
if(mysql_db_query ($DBName, $Query, $Link)){
$message = "You have successfully registered";
header("Location: register.php?message=$message");
}else{
$message = "You've Broke It!";
die(mysql_error());
header("Location: register.php?message=$message");
}
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">

<link rel="stylesheet" href="styles/all.css" />
<link rel="stylesheet" href="styles/contact.css" />

<script type="text/javascript" src="javascript/jquery-1.7.1.min.js"></script>

<link href='//fonts.googleapis.com/css?family=Ubuntu:400,500' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Voltaire' rel='stylesheet' type='text/css'>

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />

</head>

<div class="container">

<form action="register.php? method="post" enctype="multipart/form-data">

<fieldset>
<legend><span class="formheading">Registration Form</span></legend>
<div class="form">

<div><p class="formtext">Please enter your forename</p><label for="forename">Forename</label><input id="forename" class="inset" name="forename" type="text">
<?php echo $fnameErr;?>
</div>
<div><p class="formtext">Please enter your surname</p><label for="surname">Surname</label><input id="surname" class="inset" name="surname" type="text">
<?php echo $snameErr;?></div>
<div><p class="formtext">Please enter a username</p><label for="username">Username</label><input id="username" class="inset" name="username" type="text"></div>
<?php echo $usernameErr;?>
<div><p class="formtext">Please enter a password</p><label for="password">Password</label><input id="password" class="inset" name="password" type="text"></div>
<?php echo $passwordErr;?>
<div><p class="formtext">Please enter your e-mail address</p><label for="email">email address</label><input id="email" class="inset" name="email" type="text">
<?php echo $emailErr;?></div>

<div class="submit"><input name="Submit" type="Submit" class="submitbtn" value="Submit" /></div>
<div class="submit"><input name="Reset" type="Reset" class="resetbtn" value="Reset"/></div>

</div>
</fieldset>
</form>

</body>
</html>

我无法使用 aconrad 插入语句插入,但可以使用它。

$Link = mysql_connect($Host, $User, $Password);
$Query = "INSERT INTO $Table_2 VALUES ('0','".mysql_escape_string($forename)."','".mysql_escape_string($surname)."', '".mysql_escape_string($username)."', '".mysql_escape_string($password)."', '".mysql_escape_string($email)."')";

如果我输入:

forename
surname
username
password

但不要在电子邮件字段中输入任何内容,然后单击提交,会显示错误但所有字段都被清除,用户必须重新输入所有信息。如何防止这种情况发生,即如何保留已输入的数据?

【问题讨论】:

  • 你能告诉我们你给出了什么错误吗?
  • 您忘记定义要插入的列。
  • 解析错误:语法错误,第 37 行 register2.php 中的意外 T_ELSE 是:else {

标签: php mysql forms validation


【解决方案1】:

您必须命名您拥有的列。

因为我不知道我猜测的名称,但更改它们以匹配您在数据库中的列名。像这样

Query = "INSERT INTO $Table_2 
(Id,ForName,SureName,UserName,PassWord,Email) 
VALUES ('0','".mysql_escape_string($formValue['forename'])."',
'".mysql_escape_string($formValue["surname"])."', 
'".mysql_escape_string($formValue["username"])."', 
'".mysql_escape_string($formValue["password"])."', 
'".mysql_escape_string($formValue["email"])."');";

通知(Id,ForName,SureName,UserName,PassWord,Email)

【讨论】:

    【解决方案2】:

    除非我遗漏了什么,否则你的结构不会因为你的外部 if/else 而工作

    if ($_SERVER["REQUEST_METHOD"] == "POST")
    {
    
    }
    
    else {
    
    }
    

    您的所有数据库内容都在 else 中,只有在请求方法未发布时才会通过。如果您的表单方法是 post,那么这意味着您正在尝试在没有数据的情况下执行 sql 操作。

    我会将你的外部 else 移动到你的第一个 if/else 中,这样它更像

    if($_SERVER["REQUEST_METHOD"] == "POST")
    {
        if(isset($_POST['pick a field']))
        {
            //your validation stuff here
            //your database code here
        }
        else
        {
            //some error about not having valid info
        }
    }
    

    可能不需要外部 else

    【讨论】:

      【解决方案3】:
      <form action="register.php? method="post" enctype="multipart/form-data">
      

      你需要它:

      <form action="register.php" method="post" enctype="multipart/form-data">
      

      还有其他的;导致错误。

      如果你使用其他; 脚本将进入无限循环,因为查询将运行 每次都不在 if ($_SERVER["REQUEST_METHOD"] == "POST") 循环中。

      查询执行,所有值都为空。 您的表应该有 LOOOOTS 的空白记录。

      执行ok,重定向到同一个页面,执行查询,重定向,执行等等。

      使用 if (isset($_POST['Submit'])) 来检查帖子,而不仅仅是 ($_SERVER["REQUEST_METHOD"] == "POST")

      这里是脚本,修改后可以正常工作:

      http://pastie.org/private/c7zqeeemtxdt2q85uo8jw

      【讨论】:

      • 非常感谢。它几乎可以工作了。我收到一个插入错误,因为我的数据库中的第一个字段是一个名为 id 的自动递增主键字段。我累了:FIELD_ID = '".mysql_real_escape_string('0', $Link)."' 这给出了:查询是:INSERT INTO VALUES ('0','','', '', '', '')。错误:
      • 如果您真的不想在查询中指定字段名称,请使用 NULL 而不是 '0'。如果您指定字段,只需跳过 ID。
      【解决方案4】:

      你有一个“else;”...应该是 else { 吗? 完整的代码列表会有所帮助。

      您可能希望使用 INSERT INTO table SET field=value 之类的插入,这样更容易将列与值匹配。

      INSERT INTO $Table_2 
      SET 
      Id = 0
      ForName = '".mysql_escape_string($formValue['forename'])."'
      SureName = '".mysql_escape_string(
      //etc.
      

      mysql insert syntax

      【讨论】:

      • @anonrad 我不知道我是否还需要其他东西!如果我删除它,我会得到:这个网页有一个重定向循环在 chrome 和 firefox 中页面没有正确重定向 Firefox 检测到服务器正在以永远不会完成的方式重定向这个地址的请求。
      • 用所有数据添加了另一个答案
      猜你喜欢
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多