表单上传数据至数据库
首先我们需要创建一个可以录入数据的表单,我们将其命名为“表单验证.php”,这个php将要实现的功能位将用户输入的数据保存下来,并传给另一个负责上传数据的php文件——“表单上传.php”。
接下来是“表单验证.php”的完整代码:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>表单验证</title>
<style>
.error {color:#FF0000;}
</style>
</head>
<body>
<?php
//定义变量并默认设置为空值
$nameErr=$emailErr=$genderErr=$websiteErr="";
$name=$email=$gender=$comment=$website="";
if($_SERVER["REQUEST_METHOD"]=="POST")
{
if(empty($_POST["name"]))//如果姓名为空
{
$nameErr="姓名是必须的";
}
else
{
$nameErr=test_input($_POST["name"]);
//检测名字是否只包含字母和空格
if(!preg_match("/^[a-zA-Z]*$/",$name))
{
$nameErr="名字不能只包含字母和空格";
}
}
if(empty($_POST["email"]))
{
$emailErr="邮箱是必须的";
}
else
{
$email=test_input($_POST["email"]);
//检测邮箱是否合法
if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr="邮箱非法";
}
}
if(empty($_POST["website"]))
{
$website="";
}
else
{
$website=test_input($_POST["website"]);
//检测URL地址是否合法
if(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
{
$websiteErr="URL非法";
}
}
if(empty($_POST["comment"]))//个人说明
{
$comment="";
}
else
{
$comment=test_input($_POST["comment"]);
}
if(empty($_POST["gender"]))
{
$genderErr="性别是必要的";
}
else
{
$gender=test_input($_POST["gender"]);
}
}
function test_input($data)
{
$data=trim($data);
$data=stripslashes($data);
$data=htmlspecialchars($data);
return $data;
}
?>
<h1>表单验证:</h1>
<p><span class="error">*星号红色表示必需字段。</span></p>
<form method ="POST" action="表单上传.php">
姓名:
<input type = "text" name = "name" value = "<?php echo $name;?>">
<span class = "error">*<?php echo $emailErr;?></span>
<br><br>
邮箱:
<input type = "text" name = "email" value = "<?php echo $email;?>">
<span class = "error">*<?php echo $emailErr;?></span>
<br><br>
网址:
<input type = "text" name = "website" value="<?php echo $website;?>">
<span class = "error">*<?php echo $websiteErr;?></span>
<br><br>
说明:
<textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
<br><br>
性别:
<input type = "radio" name = "gender" <?php if(isset($gender) && $gender == "male") echo "checked";?> value = "male">
男
<input type = "radio" name = "gender" <?php if(isset($gender) && $gender == "female") echo "checked";?> value = "female">
女
<span class = "error">*<?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="提交验证">
</form>
</body>
</html>
接下来我将对代码中的部分内容进行说明:
- 函数test_input()的作用
- 表单验证action详细说明
1、function test_input()
该函数的目的是为了对用户输入的信息进行修正和对系统进行保护。
- trim()函数是用于去掉字符串两边的空格。
- stripslashes()函数是用于去掉字符串中的反斜杠。
- htmlspecialchars()函数是使用来把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。
目的:
当我们使用 htmlspecialchars() 函数时,在用户尝试提交以下文本域:
<script>location.href('http://www.baidu.com')</script>
该代码将不会被执行,因为它会被保存为HTML转义代码,如下所示:
<script>location.href(‘http://www.w3cschool.cn’)</script>
以上代码是安全的,可以正常在页面显示或者插入邮件中。
2、对表单中action的说明
我之前的博客里曾经上传过另一个版本的表单,这个表单就是根据之前上传的旧表单进行修改而来的,其主要的差别就在于action上。
旧表单的action是这么写的:
<form method ="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
而新表单是这么写的:
<form method ="POST" action="表单上传.php">
我在这里将表单重新定向,旧表单将上传上去的数据重新返回到自己,而新表单则将上传的数据传到“表单上传.php”这个文件当中,那么“表单上传.php”实现了什么功能呢?
下面是“表单上传.php”的全部代码:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<?php
$conn = mysqli_connect("localhost","root","123456");
//三个参数分别是数据库的地址,管理员名称和管理员密码
if(!$conn)
{
echo "数据库连接失败! : ".mysqli_error($conn)."<br>";
//mysqli_error()函数用于返回错误详细内容
}
$sql_create_database = "CREATE DATABASE list";
//创建一个数据库,将其命名为list
if(mysqli_query($conn,$sql_create_database))
{
echo "数据库创建成功!"."<br>"."<br>";
}
else
{
echo "数据库创建失败! : ".mysqli_error($conn)."<br>";
}
$sql_select_database = "USE list";
if(mysqli_query($conn,$sql_select_database))
//数据库创建完成后我们还需要切换使用这个数据库list
{}
else
{
echo "数据库切换失败! : ".mysqli_error($conn)."<br>";
}
$sql_create_table = "CREATE TABLE list(
name varchar(30) not null,
email varchar(50) not null,
website varchar(100),
comment varchar(100),
gender varchar(20)
)";
//接下来创建数据表,有五个内容,分别对应了表单上传的五项数据
if(mysqli_query($conn,$sql_create_table))
{}
else
{
echo "数据表创建失败! : ".mysqli_error($conn)."<br>";
}
?>
<?php
session_start();//这个函数有什么用我也不知道,我在别的博客看到有这个函数,所以也加上了嘻嘻
$name=$_POST["name"];//这五行代码就是将上传的数据放到五个新的变量里面
$email=$_POST["email"];
$website=$_POST["website"];
$comment=$_POST["comment"];
$gender=$_POST["gender"];
$sql_insert_data = "INSERT INTO list(name,email,website,comment,gender) VALUES('{$name}','{$email}','{$website}','{$comment}','{$gender}')";
//实现数据的插入
if(mysqli_query($conn,$sql_insert_data))
{
echo "数据插入成功!";
}
else
{
echo "数据插入失败! : ".mysqli_error($conn);
}
?>
//并且在下面输出插入的详细内容
<?php
echo "<h2>输入内容如下:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
mysqli_close($conn);
//最后断开连接
?>
<body>
</body>
</html>
注释已经写得非常详细了,相信大家都能看懂。
最后附上成功输出的效果:
数据库和数据表之所以创建失败是因为我之前调试代码的时候已经创建好了。
所以出现了database exists的错误,不用理他,系统还是可以正常运行的。
忙活了一天,也算是有所收获,不过这个界面太难看了,所以我打算再去看看html css和js的书,看看能不能把这个界面美化美化。
所以我现在算是入门了吗?(笑)