实验六 PHP中的数据库操作和字符串操作
实验目的:
掌握PHP中数据库的基本操作,包括数据库的创建,数据表的创建,信息的增加,删除,修改,查询等操作。
掌握PHP中字符串相关函数的应用
实验内容:
1、 数据库的基本操作(创建一个学生数据库,要求写在.php文件中编写代码,通过执行php文件实现)
1) 创建数据库
<?php
$conn = mysql_connect("localhost", "root", "wwj");
//判断数据库是否存在
if(!$conn)
{
die('Could not connect:'.mysql_error());
}
//创建数据库
if(mysql_query("create database stu_db",$conn))
{
echo "Database created";
}
else
{
echo "Error created Database:".mysql_error();
}
mysql_close($conn);
?>
2) 创建数据库表(三张表:学生表(学号,姓名,性别,年龄,出生日期等,学号为主键),课程(课程号,课程名,学生,课程号为主键)和分数(学号,姓名,分数,学号和姓名为主键)
<?php
$conn = mysql_connect("localhost","root", "wwj");
//判断数据库连接是否存在
if (!$conn)
{
die('Could not connect: ' . mysql_error());
}
//选择数据库
mysql_select_db("stu_db",$conn);
$sql = "create table Student(
StuNumber varchar(10),
StuName varchar(20),
StuSex char(1),
StuAge int,
Stubirth date,
primary key(StuNumber)
)";
mysql_query($sql, $conn);
$sql = "create table Course(
CourseNumber varchar(10),
CourseName varchar(20),
Coursexuefen int,
primary key(CourseNumber)
)";
mysql_query($sql, $conn);
$sql = "create table Grade(
StuNumber varchar(10),
CourseNumber varchar(10),
CourseGrade int,
primary key(StuNumber,CourseNumber)
)";
mysql_query($sql, $conn);
?>
3) 分别在三张表中插入数据(两种插入数据的方式,一种是直接在php文件中执行sql插入语句,第二种方式是通过html页面填写需要插入到数据库中的信息,然后将信息插入到数据库中,运用这两种方式后,都要检查是否将记录成功插入到数据库中)
<?php
$conn = mysql_connect("localhost","root","wwj");
//判断数据库连接是否存在
if (!$conn)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("stu_db", $conn);
$sql = ("INSERT INTO student (StuNumber, StuName,StuSex, StuAge,Stubirth)
VALUES ('2100000003', 'zhang', '1',20, '19000304')");
mysql_query($sql,$conn);
$sql1 = ("INSERT INTO course (CourseNumber, CourseName,Coursexuefen)
VALUES ('00003', 'computer', 3)");
mysql_query($sql1,$conn);
$sql2 = ("INSERT INTO grade (StuNumber ,CourseNumber,CourseGrade)
VALUES ('2100000001', '00003', 90)");
mysql_query($sql2,$conn);
mysql_close($conn);
?>
<html>
<body>
<form action="" method="post">
学号: <input type="text" name="StuNumber" />
姓名: <input type="text" name="StuName" />
性别: <input type="text" name="StuSex" />
年龄: <input type="text" name="StuAge" />
出生日期: <input type="text" name="Stubirth" />
<input type="submit" value="提交" />
</form>
</body>
</html>
<?php
$conn = mysql_connect("localhost","root","wwj");
//判断数据库连接是否存在
if (!$conn)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("stu_db", $conn);
$sql="INSERT INTO student(StuNumber, StuName,StuSex, StuAge,Stubirth)VALUES('$_POST[StuNumber]','$_POST[StuName]','$_POST[StuSex]','$_POST[StuAge]','$_POST[Stubirth]')";
if (!mysql_query($sql,$conn))
{ die('Error: ' . mysql_error()); }
echo "1 record added";
mysql_close($conn);
?>
4) 将数据库的信息在页面中显示出来
<?php
$conn = mysql_connect("localhost","root","wwj");
//判断数据库连接是否存在
if (!$conn)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("stu_db", $conn);
$result = mysql_query("SELECT * FROM student");
echo "<table border='1'>
<tr><th>学号</th><th>姓名</th><th>性别</th><th>年龄</th><th>出生日期</th></tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['StuNumber'] . "</td>";
echo "<td>" . $row['StuName'] . "</td>";
echo "<td>" . $row['StuSex'] . "</td>";
echo "<td>" . $row['StuAge'] . "</td>";
echo "<td>" . $row['Stubirth'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($conn);
?>
5) 显示一个学生的学号,姓名,课程,课程学分和成绩
<?php
$conn = mysql_connect("localhost","root","wwj");
//判断数据库连接是否存在
if (!$conn)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("stu_db", $conn);
$result = mysql_query("SELECT Student.StuNumber,Student.StuName,Course.CourseName,Course.Coursexuefen,Grade.CourseGrade FROM Student,Course,Grade where Student.StuNumber=Grade.StuNumber and Course.CourseNumber=Grade.CourseNumber ");
echo "<table border='1'>
<tr><th>学号</th><th>姓名</th><th>课程名</th><th>学分</th><th>分数</th></tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['StuNumber'] . "</td>";
echo "<td>" . $row['StuName'] . "</td>";
echo "<td>" . $row['CourseName'] . "</td>";
echo "<td>" . $row['Coursexuefen'] . "</td>";
echo "<td>" . $row['CourseGrade'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($conn);
?>
6) 更新和删除数据库中的记录
<?php
$conn = mysql_connect("localhost","root","wwj");
//判断数据库连接是否存在
if (!$conn)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("stu_db", $conn);
$sql = ("UPDATE student SET StuAge=22 WHERE StudentNumber='2100000003'");
//$sql = ("DELETE FROM student WHERE StudentNumber='2100000001'");
$row=mysql_query($sql,$conn);
mysql_close($conn);
?>
2、正则表达式的使用:设计一个PHP网页,其中验证表单数据的正确性,表单数据中包括用户名、密码、出生年月、E-mail。要求用户名为6-12个字符,密码为5-10数字,出生年月为有效的日期,E-mail为有效的Email地址。在服务器端进行验证。
提示:
1)preg_match() — 执行一个正则表达式匹配
int preg_match ( string $pattern , string$subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
pattern 要搜索的模式,字符串类型。
subject 输入字符串。
matches 如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。
例子:
preg_match("/^[A-Z]{10}$/",$e);// 确定e变量的内容是否为10个大写字母。
2)正则表达式:
正则表达式的形式一般如下:
/*******/
其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。
表1.常用的元字符 | |
代码 | 说明 |
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
表2.常用的限定符 | |
代码/语法 | 说明 |
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
较为常用的定位符包括: “^”, “$”, “\b” 以及“\B”。
“^”定位符规定匹配模式必须出现在目标字符串的开头,
“$”定位符规定匹配模式必须出现在目标对象的结尾
“|”,相当于OR操作:
[ ]符号表示可选的内容
例子:
/^\w+/ :匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)
/fo+/
因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。
/jim{2,6}/
上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。
/^hell/:字符串开头要是hell。
/ar$/:与目标对象中以“car”, “bar”或 “ar” 结尾的字符串相匹配。
“/(b|cd)ef/”: 匹配含有“bef”或者 “cdef”的字符串;
/[A-Z]/
从A到Z范围内任何一个大写字母相匹配。
3)弹出错误提示框的代码方法:
例子:
echo "<script>alert('Email格式错');</script>";
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head>
<body>
<form action="" method="post">
<table width="60%" border="1">
<tr>
<td width="10%">用户名</td>
<td width="50%"> <input type="text" name="userid" size="20"></td>
<td width="40%">* 6~12个字符(数字,字母和下划线)</td>
</tr>
<tr>
<td >密码</td>
<td > <input type="text" name="pwd" size="20"></td>
<td >* 5~10数字</td>
</tr>
<tr>
<td >出生年月</td>
<td > <input type="text" name="birthday" size="20"></td>
<td >* 格式:YYYY-MM-DD</td>
</tr>
<tr>
<td >E-mail:</td>
<td > <input type="text" name="email" size="20"></td>
<td >* </td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="confirm" value="确定"></td>
</tr>
</table>
</form>
<?php
if(isset($_POST['confirm']))
{
$userid=$_POST['userid'];
$pwd=$_POST['pwd'];
$birthday=$_POST['birthday'];
$email=$_POST['email'];
/* $userid="gdfghkdfhg";
$pwd="894676";
$birthday="4567-12-05";
$email="fsjdhgj@hgsjdg";
*/
if(!preg_match("/^\w{6,12}$/",$userid))
{
echo "<script>alert('用户名格式错');</script>";
}
if(!preg_match("/^\d{5,10}$/",$pwd))
{
echo "<script>alert('密码格式错');</script>";
}
if(!preg_match("/^\d{4}-(0\d|1[0-3])-([012]\d|[3][01])$/",$birthday))
{
echo "<script>alert('出生日期格式错');</script>";
}
if(!preg_match("/^[\w-]+@[\w-.]+$/",$email))
{
echo "<script>alert('Email格式错');</script>";
}
}
?>
</body>
</html>