第2关:PHP实现下拉菜单显示数据 上
<?php
/**
* 初始化数据库连接
*/
Class Init
{
private $link;
private static $host="127.0.0.1";
private static $root="root";
private static $password="123123";
function __construct()
{
$this->link=new mysqli(self::$host,self::$root,self::$password);
//判断数据库连接是否成功,如果不成功则显示错误信息并终止脚本继续执行
if($this->link->connect_error){
die('连接数据库失败!');
}
//设置字符集,选择数据库
$this->link->query('set names utf8;');
$this->link->query('use educoder;');
}
/**
* 执行SQL的方法
* @param string $sql 待执行的SQL
* @return mixed 失败返回false,成功,如果是查询语句返回结果集,如果非查询类返回true
*/
public function query($sql) {
/***********Begin******/
if ($result =$this->link->query($sql)) {
return $result;
}else{
echo 'SQL执行失败:<br>';
echo '错误的SQL为:',$sql,'<br>';
echo '错误的代码为:',$this->link->connect_errno,'<br>';
echo '错误的信息为:',$this->link->connect_error,'<br>';
return false;
}
/*********end*******/
}
/**
* 处理结果集中有多条数据的方法
* @param string $sql 待执行的SQL
* @return array 返回遍历结果集后的二维数组
*/
public function fetchAll($sql) {
if ($result =$this->link->query($sql)) {
//执行成功
//遍历结果集
/***********Begin******/
$rows=array();
while($row=$result->fetch_assoc()){
$rows[]=$row;
}
/*********end*******/
//释放结果集资源
$result->free();
return $rows;
} else {
//执行失败
return false;
}
}
/**
* 处理结果集中只有一条数据的方法
* @param string $sql 待执行的SQL语句
* @return array 返回结果集处理后的一维数组
*/
public function fetchRow($sql) {
//执行query()函数
if ($result = $this->link->query($sql)) {
//从结果集取得一次数据即可
/***********Begin******/
$row=$result->fetch_assoc();
return $row;
/*********end*******/
} else {
return false;
}
}
/**
* 对数据进行安全处理
* @param string $data 待转义字符串
* @return string 转义后的字符串
*/
function safeHandle($data){
//转义字符串中的HTML标签
$data = htmlspecialchars($data);
//转义字符串中的特殊字符
$data = mysqli_real_escape_string($this->link,$data);
return $data;
}
}
//初始化数据库
$db=new Init();
//判断是否有表单提交
if(!empty($_POST)){
//声明变量$value,用来保存字段信息
$fields = array('e_name','e_dept','date_of_birth','date_of_entry');
//声明变量$value,用来保存值信息
$value = array();
//遍历$allow_field,获取输入员工数据的键和值
foreach($fields as $k => $v){
$data = isset($_POST[$v]) ? $_POST[$v] : '';
if($data=='') die($v.'字段不能为空');
$data =$db-> safeHandle($data);
//把字段使用反引号包裹,赋值给$fields数组
$fields[$k] = "`$v`";
//把值使用单引号包裹,赋值给$values数组
$values[] = "'$data'";
}
//将$fields数组以逗号连接,赋值给$fields,组成insert语句中的字段部分
$fields = implode(',', $fields);
//将$values数组以逗号连接,赋值给$values,组成insert语句中的值部分
$values = implode(',', $values);
//最后把$fields和$values拼接到insert语句中,注意要指定表名
$sql = "insert into `emp_info` ($fields) values ($values)";
//执行SQL
if($res = $db->query($sql)){
//成功时返回到 showList.php
header('Location: .owList.php');
//停止脚本
die;
}else{
//执行失败
die('员工添加失败!');
}
}
$sql = 'select * from emp_dept';
//调用fetchAll()函数,执行SQL并进行数据处理,把处理后的部门数据赋值给$emp_dept
$emp_dept = $db->fetchAll($sql);
//没有表单提交时,显示员工添加页面
define('APP', 'educoder');
require 'add_html.php';