我正在关注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
但是不要在电子邮件字段中输入任何内容然后单击“提交”,将显示错误,但会清除所有字段,并且用户必须重新输入所有信息。如何防止这种情况发生,即如何保留已输入的数据?
答案 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”)
这是脚本,已更改,以便它可以工作:
答案 3 :(得分:-1)
你有一个“别的;”......应该是否是{? 完整的代码列表会有所帮助。
您可能希望使用类似INSERT INTO表SET字段=值的插入,这样可以更容易地将列与值匹配。
INSERT INTO $Table_2
SET
Id = 0
ForName = '".mysql_escape_string($formValue['forename'])."'
SureName = '".mysql_escape_string(
//etc.