360 likes | 449 Views
文章管理模块实现. 告知:. 任务:实现文章的添加,查看,删除功能 知识点: PHP中常用的MySQL操作函数 PHP中其它MySQL操作函数. 任务 1 : 文章添加功能. 用户登录后,进入 file.php 页面,将标题与文章内容提交后交 check_file.php 页面处理。. 任务 1 : 文章添加功能. check_file.php 页面将提交的数据插入数据库, 并提示插入失败与成功的信息,成功后继续返回 file.php 页面。 关键代码:( check_file.php ) <?php session_start();
E N D
告知: 任务:实现文章的添加,查看,删除功能 知识点: • PHP中常用的MySQL操作函数 • PHP中其它MySQL操作函数
任务1:文章添加功能 用户登录后,进入file.php页面,将标题与文章内容提交后交check_file.php页面处理。
任务1:文章添加功能 check_file.php页面将提交的数据插入数据库, 并提示插入失败与成功的信息,成功后继续返回file.php页面。 关键代码:(check_file.php ) <?php session_start(); include "check_login.php"; include "Conn/conn.php"; $file_id=$_GET[file_id]; $sql="delete from tb_article where id=".$file_id; $result=mysql_query($sql,$link); if($result){ $sql1 = "delete from tb_filecomment where fileid = ".$file_id; $rst1 = mysql_query($sql1,$link); if($rst1) echo "<script>alert('博客文章已被删除!');location='$_SERVER[HTTP_REFERER]';</script>"; else echo "<script>alert('删除失败!');history.go(-1);</script>"; } else{ echo "<script>alert('博客文章删除操作失败!');history.go(-1);</script>"; } ?>
任务2:文章查询功能 点击查询文章超链接,进入文章查询页面query.php
任务2:文章查询功能 在query.php页面对提交的数据进行处理,并在同一页面显示查询后的数据
任务2:文章查询功能 <?php if (isset($_POST[sel_key])){ $tj=$_POST[sel_tj]; $key=$_POST[sel_key]; $sql="select * from tb_article where $tj like '%$key%'"; $rst = mysql_query($sql,$link); $result=mysql_fetch_array($rst); if(mysql_num_rows($rst) == 0) { echo "[<font color=red>对不起,您检索的博客信息不存在!</font>]"; } else{ ?> 在query.php页面对提交的数据进行处理,并在同一页面显示查询后的数据 关键代码:
任务3:显示文章标题并查询信息 <?php $p_sql = "select * from tb_public order by id desc"; $p_rst = mysql_query($p_sql,$link); ?> 在文章首页index.php按时间排序显示文章标题
任务3:显示文章标题并查询信息 <?php $sql=mysql_query("select * from tb_article where id = ".$file_id1); $result=mysql_fetch_array($sql); ?> 点击标题查询文章具体信息
任务4:文章删除 关键代码: <?php $file_id=$_GET[file_id]; $sql="delete from tb_article where id=".$file_id; $result=mysql_query($sql,$link); ?> 点击标题查询文章具体信息后点击删除,将删除这条文章
相关知识点 参考书本第九章
9-1 PHP中常用的MySQL操作函数 1.连接MySQL服务器 PHP中连接MySQL数据库服务器最简单的函数是mysql_connect(),语法格式如下: resource mysql_connect (string hostname,string username,string password); 函数功能:通过PHP程序连接MySql数据库服务器。如果成功连接MySQL服务器,则返回一个MySQL服务器连接标识(link_identifier),否则返回FALSE。
9-1 PHP中常用的MySQL操作函数 2. 设置数据库字符集 调用PHP函数mysql_query("set names 'gbk'")可以将character_set_client、character_set_connection和character_set_results的字符集设置为gbk字符集。
9-1 PHP中常用的MySQL操作函数 3. 关闭MySQL服务器连接 mysql_close()函数的语法格式如下: bool mysql_close( [resource link_identifier] ) 函数功能:mysql_close()函数关闭指定的连接标识所关联到的MySQL 服务器的连接。如果没有指定link_identifier,则关闭上一个打开的连接。如果关闭成功则返回TRUE,失败则返回FALSE。
9-1 PHP中常用的MySQL操作函数 4. 选择当前操作的数据库 使用函数mysql_select_db()可以设置当前操作的数据库,该函数的语法格式如下: bool mysql_select_db ( string database_name [, resource link_identifier] ) 函数功能:如果没有指定MySQL服务器连接标识符,则使用上一个打开的MySQL服务器连接。如果没有打开的连接,本函数将无参数调用 mysql_connect()函数尝试打开一个新的MySQL服务器连接然后使用它。如果选择当前操作的数据库成功则返回TRUE,否则返回FALSE。
9-1 PHP中常用的MySQL操作函数 5. 发送SQL语句或MySQL命令 mysql_query()函数的语法格式如下: {bool|resouce} mysql_query ( string sql [, resource link_identifier] ) 函数功能:如果没有指定MySQL服务器连接标识link_identifier,则使用已打开的连接。然后向数据库引擎发送sql字符串(SQL语句或MySQL命令)。当发送的sql字符串执行失败时,mysql_query()函数返回FALSE;发送的sql字符串是insert语句、update语句或delete语句,并且sql字符串成功执行时,mysql_query()函数返回TRUE;发送的sql字符串是select语句,并且select语句成功执行时,mysql_query()函数返回结果集(result)类型的数据(实际是resource类型的数据)。
9-1 PHP中常用的MySQL操作函数 5. 发送SQL语句或MySQL命令 使用PHP的mysql_query()函数向MySQL服务器引擎发送insert语句、update语句或delete语句后,可以使用mysql_affected_rows()函数查看该SQL语句影响到的表记录行数。mysql_affected_rows()函数的语法格式如下: int mysql_affected_rows ( [resource link_identifier] ) mysql_affected_rows()函数功能:取得最近一次与 link_identifier 关联的 insert、update或delete语句所影响的记录行数。
9-1 PHP中常用的MySQL操作函数 5. 发送SQL语句或MySQL命令 使用PHP的mysql_query()函数发送insert语句向某个数据库表中添加记录时,若该数据库表中的某个字段为auto_increment自增字段,可以使用mysql_insert_id()函数得到当前insert语句执行后的该字段值。mysql_insert_id()函数的语法格式如下: int mysql_insert_id ( [resource link_identifier] ) mysql_insert_id()函数功能:mysql_insert_id()函数返回给定的link_identifier中上一条insert语句产生的 auto_increment的ID号;如果没有指定 link_identifier,则使用上一个打开的连接。
9-1 PHP中常用的MySQL操作函数 5. 发送SQL语句或MySQL命令 mysql_query()函数还可以向MySQL服务器引擎发送select语句,此时mysql_query()函数将返回一个结果集(result)数据,可以使用mysql_num_rows()函数查看该select语句查询到的表记录行数。mysql_num_rows()函数的语法格式如下: int mysql_num_rows ( resource result ) mysql_num_rows()函数功能:返回结果集result中记录的行数,该函数仅对 select 语句有效。
9-1 PHP中常用的MySQL操作函数 5. 发送SQL语句或MySQL命令 结果集(result)使用过后,应该尽快地将其占用的服务器内存资源释放,可以使用函数mysql_free_result()实现,mysql_free_result()函数的语法格式如下: bool mysql_free_result ( resource result ) mysql_free_result()函数函数功能:释放结果集result占用的服务器内存资源。若执行成功,返回TRUE,否则返回FALSE。
9-1 PHP中常用的MySQL操作函数 5. 发送SQL语句或MySQL命令 使用mysql_query()函数还可以向MySQL服务器引擎发送MySQL命令。例如PHP语句“mysql_query("set names 'gbk'");”将character_set_client、character_set_connection和character_set_results的字符集设置为gbk。
9-1 PHP中常用的MySQL操作函数 6. 遍历结果集中的数据 mysql_fetch_row()函数的语法格式: array mysql_fetch_row ( resource result ) mysql_fetch_row()函数功能:从结果集result中取得下一行记录,并将该记录生成一个数组,数组的元素的键为从零开始的整数,数组元素的值依次为select语句中“字段列表”的值。若结果集result中没有下一行记录,则函数返回FALSE。 mysql_fetch_array()函数的语法格式: array mysql_fetch_array ( resource result ) mysql_fetch_array()函数功能:该函数是mysql_fetch_row()函数的扩展版本,该函数的返回值中除了包含mysql_fetch_row()函数的返回值,还包含select语句中“字段列表=>字段列表值”的数组元素。
9-1 PHP中常用的MySQL操作函数 7. MySQL服务器连接与关闭最佳时机 <?php function student_query(){ $serverLink = @mysql_connect("localhost","root","") or die("连接服务器失败!程序中断执行!"); mysql_query("set names 'gbk'"); $dbLink = @mysql_select_db("student") or die("选择当前数据库失败!程序中断执行!"); $selectSQL = "select * from student"; $resultSet = mysql_query($selectSQL) or die(mysql_error()); while($student = mysql_fetch_array($resultSet)){ echo $student['student_id']." "; echo $student['student_no']." "; echo $student['student_name']."<br/>"; } mysql_free_result($resultSet); mysql_close($serverLink); } student_query(); student_query(); ?> <?php function student_query(){ $selectSQL = "select * from student"; $resultSet = mysql_query($selectSQL) or die(mysql_error()); while($student = mysql_fetch_array($resultSet)){ echo $student['student_id']." "; echo $student['student_no']." "; echo $student['student_name']."<br/>"; } mysql_free_result($resultSet); } $serverLink = @mysql_connect("localhost","root","") or die("连接服务器失败!程序中断执行!"); mysql_query("set names 'gbk'"); $dbLink = @mysql_select_db("student") or die("选择当前数据库失败!程序中断执行!"); student_query(); student_query(); mysql_close($serverLink); ?>
9-1 PHP中常用的MySQL操作函数 8. MySQL服务器连接与关闭函数的制作 <?php $databaseConnection = null; function getConnection(){ $hostname = "localhost"; //数据库服务器主机名,可以用IP代替 $database = "users"; //数据库名 $userName = "root"; //数据库服务器用户名 $password = ""; //数据库服务器密码 global $databaseConnection; $databaseConnection = @mysql_connect($hostname, $userName, $password) or die(mysql_error()); //连接数据库服务器 mysql_query("set names 'gbk'");//设置字符集 @mysql_select_db($database, $databaseConnection) or die(mysql_error()); } function closeConnection(){ global $databaseConnection; if($databaseConnection){ mysql_close($databaseConnection) or die(mysql_error()); } } ?>
9-2 PHP中其它MySQL操作函数 1. 数据库操作函数 mysql_create_db()函数 mysql_list_dbs()函数
9-2 PHP中其它MySQL操作函数 2. 数据库表操作函数 mysql_list_tables()函数 mysql_tablename()函数 <?php $server_link = @mysql_connect("localhost","root","") or die("连接服务器失败!程序中断执行!"); mysql_query("set names 'gbk'"); $resultSet = @mysql_list_tables("student"); for($i = 0; $i < mysql_num_rows($resultSet); $i++){ printf ("表: %s<br/>", mysql_tablename($resultSet, $i)); } mysql_free_result($resultSet); mysql_close($server_link); ?>
9-2 PHP中其它MySQL操作函数 3. 选择当前操作的数据库并发送SQL语句 mysql_db_query()函数
9-2 PHP中其它MySQL操作函数 4. 表字段操作函数 mysql_num_fields()函数 语法格式:int mysql_num_fields ( resource result ) 函数功能:取得结果集result中字段的数目。 mysql_field_name()函数 语法格式:string mysql_field_name ( resource result, int field_index ) 函数功能:取得结果集result中指定字段的字段名。 说明:mysql_field_name()函数返回指定字段索引的字段名。field_index是该字段的数字偏移量,该偏移量从0开始。
9-2 PHP中其它MySQL操作函数 4. 表字段操作函数 mysql_field_type()函数 语法格式:string mysql_field_type ( resource result, int field_offset ) 函数功能:取得结果集result中指定字段的MySQL数据类型 说明:mysql_field_type() 返回指定字段的MySQL数据类型。field_offset是该字段的数字偏移量,该偏移量从0开始。 mysql_field_len()函数 语法格式:int mysql_field_len ( resource result, int field_offset ) 函数功能:返回结果集result中指定字段的长度。
9-2 PHP中其它MySQL操作函数 4. 表字段操作函数 mysql_field_flags()函数 语法格式:string mysql_field_flags ( resource result, int field_offset ) 函数功能:从结果集result中取得和指定字段关联的标志。每个标记对应一个单词,之间用一个空格分开。这些标记有:"not_null", "primary_key", "unique_key", "multiple_key", "blob", "unsigned", "zerofill", "binary", "enum", "auto_increment", "timestamp"等。
9-2 PHP中其它MySQL操作函数 5. 其他常用函数 mysql_fetch_lengths()函数 语法格式:array mysql_fetch_lengths ( resource result) 函数功能:返回结果集result中每个字段内容的长度。 mysql_result()函数 语法格式:mixed mysql_result ( resource result, int row [, mixed field] ) 函数功能:返回结果集result中一个字段的字段值。 mysql_errno()函数 语法格式:int mysql_errno ( [resource link_identifier] ) 函数功能:返回MySQL 数据库服务器的错误代码,如果没有出错则返回0(零)。 说明:mysql_errno()函数仅返回最近一次MySQL函数的错误代码,因此应该尽早地调用该函数。
9-2 PHP中其它MySQL操作函数 5. 其他常用函数 mysql_error()函数 语法格式:string mysql_error ( [resource link_identifier] ) 函数功能:返回MySQL 数据库服务器产生的错误文本信息,如果没有出错则返回””空字符串)。 说明:mysql_error()函数仅返回最近一次 MySQL 函数的错误文本信息,因此应该尽早地调用该函数。
9-3 用户注册系统的实现 1. 用户注册系统文件组织结构 2. 用户注册界面的实现 3. 数据库的实现 4. 制作用户注册系统所需的函数 5. 用户注册功能的实现 6. 用户登录页面的实现 7. 用户登录功能的简单实现
9-4 SQL注入 当配置文件php.ini中的magic_quotes_gpc选项设置为关闭时(magic_quotes_gpc = Off),使用用户名“‘or’‘=’”和密码“‘or’‘=’”登录系统时,系统永远可以登录成功 。 这样一些非法用户就可以乘虚而入,成功登陆系统,这就是SQL注入(SQL Injection)。SQL注入产生的原因是由于某些特殊字符打乱了SQL语句本身的逻辑,使数据库服务器引擎错误的执行了某些SQL语句。
9-4 SQL注入 MySQL数据库引擎不会自动过滤特殊字符,因此防止SQL注入发生的方法是:在PHP程序中过滤特殊字符。以用户注册系统为例,有两种解决方案: 方案一:当配置文件php.ini中的magic_quotes_gpc选项设置为关闭时(magic_quotes_gpc = Off),使用addslashes()函数将GET或POST提交方式提交的特殊字符转义。 方案二:将配置文件php.ini中的magic_quotes_gpc选项设置为开启(magic_quotes_gpc = On),PHP预处理器会自动将将GET或POST提交方式提交的特殊字符转义。