空表单字段验证问题 - 无法写入数据库

时间:2014-01-13 16:08:25

标签: php mysql forms validation

我正在关注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 insert语句插入,但得到了它。

$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

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

4 个答案:

答案 0 :(得分:0)

您必须为您拥有的列命名。

因为我不知道我猜的名字,但改变它们以匹配数据库中的列名。喜欢这个

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)

答案 1 :(得分:0)

除非我遗漏某些东西,否则你的结构不起作用,因为你的外部if / else

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

}

else {

}

所有数据库内容都在else中,只有在请求方法不发布时才会通过。如果你的表单方法是post,那么这意味着你正在尝试使用没有数据的sql东西。

我会将你的外部其他内容移动到你的第一个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
    }
}

可能不需要外部其他

答案 2 :(得分:0)

<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的空白记录。

执行正常,重定向到同一页面,执行查询,重定向,执行等等。

检查帖子使用if(isset($ _ POST ['Submit']))不仅仅是($ _SERVER [“REQUEST_METHOD”] ==“POST”)

这是脚本,已更改,以便它可以工作:

http://pastie.org/private/c7zqeeemtxdt2q85uo8jw

答案 3 :(得分:-1)

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

您可能希望使用类似INSERT INTO表SET字段=值的插入,这样可以更容易地将列与值匹配。

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

请参阅mysql insert syntax