我正在开发一个具有FORM的项目,该FORM应该自己验证,然后将数据提交到MySQL数据库。但我面临一个错误。
这是表格
`
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<table style="line-height: 50px;">
<tr>
<th>Name </th>
<td><input type="text" name="name" placeholder="Your Name" style="height:30px; border:1px; width:300px; border-radius:5px; text-indent:15px"><span class="error">* <?php echo $nameErr;?></span></td>
</tr>
<br>
<tr>
<th>Phone </th>
<td><input type="text" name="contact" placeholder="Your Contact Number" style="height:30px; border:1px; width:300px; border-radius:5px; text-indent:15px"><span class="error">* <?php echo $contactErr;?></span></td>
</tr>
<tr>
<th>City </th>
<td><input type="text" name="city" placeholder="Your City Name" style="height:30px; border:1px; width:300px; border-radius:5px; text-indent:15px"><span class="error">* <?php echo $cityErr;?></span></td>
</tr>
<tr>
<th>Service </th>
<td><select name="service" autocomplete="off" style="height:30px; border:1px; width:300px; border-radius:5px; text-indent:15px">
<option value="">Select your service</option>
<option value=service1>Service 1</option>
<option value=service2>Service 2</option>
<option value=service3>Service 3</option>
<option value=service4>Service 4</option>
</select><span class="error">* <?php echo $serviceErr;?></span></td>
</tr>
</table>
<input type="submit" name="submit" value="Submit" style="height: 40px; width: 140px; border-radius: 5px; margin-left: 140px;margin-top: 20px;">
</form>
`
这是验证脚本
`
<?php
// define variables and set to empty values
$nameErr = $contactErr = $cityErr = $serviceErr = "";
$name = $contact = $city = $service = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["contact"])) {
$contactErr = "Contact is required";
} else {
$contact = test_input($_POST["contact"]);
// check if contact number is well-formed
if (!preg_match("/^[0-9+]*$/",$contact)) {
$contactErr = "Phone number should contain only numbers";
}
}
if (empty($_POST["city"])) {
$cityErr = "City is required";
} else {
$city = test_input($_POST["city"]);
// check if city is valid
if (!preg_match("/^[a-zA-Z ]*$/",$city)) {
$cityErr = "Only letters and white space allowed";
}
}
if (empty($_POST["service"])) {
$serviceErr = "Service is required";
} else {
$service = test_input($_POST["service"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
`
这样可以很好地验证表单,但我面临的问题是在验证后将表单提交到数据库。
这是我的upload_file.php代码。
<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="morningstar"; // Mysql password
$db_name="infoline"; // Database name
$tbl_name="user_profile"; // Table name
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Get values from form
$name=$_POST['name'];
$city=$_POST['city'];
$contact=$_POST['contact'];
$service=$_POST['service'];
// Insert data into mysql
$sql="INSERT INTO user_profile(name, city, contact, service)VALUES('$name', '$city', '$contact', '$service')";
$result=mysql_query($sql);
// if successfully insert data into database, displays message "Successful".
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='index.php'>Back to main page</a>";
}
else {
echo "ERROR";
}
?>
<?php
// close connection
mysql_close();
?>
任何人都可以帮我解决问题吗?我想在正确验证后将表单提交到数据库。请帮帮我。
答案 0 :(得分:0)
如果我理解正确,你就是不知道如何调用另一个文件。我建议把它变成一个函数,包括然后调用它。像这样:
include 'upload_file.php'
if($nameErr == $contactErr == $cityErr == $serviceErr == ""){
upload_file($_POST['name'], $_POST['city'], $_POST['contact'], $_POST['service'])
}
首先请注意,我为任何语法错误道歉。这是徒手的。
其次,我会为您的代码建议一些事项:
不要使用mysql_*
函数,因为它们已被折旧。我喜欢PDO,所以这就是我要建议的内容。 (只是谷歌,很多就在那里)这也允许你使用准备好的陈述,这是mysql_*
功能缺失的最重要的事情之一。
由于您多次使用POST数据,因此请将它们放入局部变量中以启动。它将使您的代码更简洁,更清晰,更易于阅读,如果您更改字段名称,将来必须更容易更新。
将所有错误放入一个字符串中。这样,如果它成功,你只需要检查一件事,如果它失败了,你只需要向用户发回一件事。
希望这就是你所需要的。