1、遇到的几个问题
-
php是服务端语言,php代码需要经过apache的渲染才能显示在页面上。如果在浏览器上直接访问本地php文件只会暴露PHP文件的源代码
-
在使用超级全局数组即$_POST, $GET 时,如果页面尚未传输数据是会报错的(Undefined index)
<div class="col-md-8">
<form action="index.php" method="post">
<div class="form-group short">
<input type="text" id="short" class="form-control" placeholder="姓名" name="name">
<input type="text" id="short" class="form-control" placeholder="邮箱" name="email">
</div>
<div class="form-group">
<input type="text" placeholder="标题" id="title" name="title">
</div>
<div class="form-group">
<textarea cols="30" rows="10" placeholder="内容" class="form-control" name="message"></textarea>
</div>
<div class="form-group">
<button class="btn btn-primary btn-block" style="width: 90%;">提交</button>
</div>
</form>
</div>
- form 表单action指向的地址为空时,默认会指向本身
一、使用PHP链接数据库
PHP文件中可以嵌入HTML代码,所以需要将PHP代码和HTML分隔开
PHP代码边界标记 <?php ... ?>
,标记并不一定需要成对出现,如果只有<?php
作为开头即表明接下来的代码都是PHP代码。
1、数据交互
-
怎么实现前端页面和PHP代码的数据交互
-
form表单需要两个属性:action 指向处理数据的PHP文件,method 选择数据传输方式
- input 需要被form包含
- input需要提供name属性供后端处理进行识别
-
服务端代码的表现和操作
- 使用超级全局数组
$_POST
$_GET
通过表单的name属性值从数组中取出传输的数据值 $_POST['name']
其中的name即input中的name属性值,由此可见$_POST
$_GET$
都是关联数组
- 使用超级全局数组
-
未提交数据直接访问脚本文件会出错(undefined index)
-
-
页面出现中文乱码怎么处理
- html中加上
<meta charset="UTF-8">
- php在代码头部加上
header("Content-Type: text/html;charset=utf-8");
- php文件设置utf8编码
- 连接数据库执行语句 SET NAMES UTF8;(数据库出现中文乱码)
- html中加上
2、使用php连接数据库(MySQL数据库)
php提供了mysqli对象替代老旧的以面向过程方式连接数据库的方法
通过mysqli对象可以实现php连接数据库和执行sql语句等基本操作,所以可以认为mysqli是php提供的用来操作MySQL数据库的一个API
$db=new mysqli(数据库服务器地址,连接用户,连接密码,数据库名);
$db->query('需要执行的SQL语句');
$db->connect_error //错误信息
$db->connect_errno //如果为0,则数据库连接没有问题
-
执行sql语句
$db->query(sql)
如果sql 是 show , desc , select等语句, 查询成功时返回 mysql_result 对象,失败返回false
其他语句返回布尔值
-
数据库基本操作
查看已有的数据库 show databases; use 数据库名; 查看数据库中的表 show tables; 创建数据库 create table test( title text not null, content text not null, email char(20) not null, name char(8) not null ) 插入表数据 insert into test values('$title','$msg','$email','$name'); 查询数据 select * from test; select title,content,email,name from test;
注意单引号和双引号的问题
```html
// 编写sql语句
$sql1 = 'SET NAMES UTF8'; // 设置数据传输格式
$insert = "insert into test values('{$title}','{$msg}','{$email}','{$name}');";
$select = "select * from test;";
// 执行sql语句
$insert_result = $db->query($insert);
var_dump($insert_result);
- 获取查询结果
$mysqli_result = $db->query($select);
$row = $mysqli_result->fetch_array();
查询相关语句返回结果为 mysqli_result 结果集对象
从对象中获取数据
$mysqli_result->fetch_array()
- 每次读取一条记录保存为数组形式作为返回值(默认读取最新的数据),之后依次向下读取
- 可选参数:MYSQLI_ASSOC(返回关联数组) MYSQLI_NUM(返回索引数组)
- 没有数据时返回null , 可以作为一个判断条件
$row = $mysqli_result->fetch_assoc();
`
- 返回关联数组
- 和
fetch_array(MYSQLI_ASSOC)
相同
var_dump($mysqli_result->fetch_row();
- 返回索引数组
- 和
fetch_array(MYSQLI_NUM()
相同
使用循环获取查询结果
while($row = $mysqli_result->fetch_assoc()){
var_dump($row);
echo $row['title'];
echo $row['content'];
echo $row['email'];
}
二、PHP连接数据库步骤总结
- 建立sql连接(建立Mysqli对象)
- 检查连接的有效性
- 设置数据传输格式
- 编写执行sql语句
- 检查返回结果的有效性
- 输出结果集
$name = $_POST['name'];
$title = $_POST['title'];
$msg = $_POST['message'];
$email = $_POST['email'];
$host = '127.0.0.1';
$user = 'root';
$pwd = 'root';
$db_name = 'test';
// 建立sql连接
$db = new mysqli($host,$user,$pwd,$db_name);
// var_dump($db);
// 检查连接的有效性
if($db->connect_error <> 0){
echo $db->connect_error;
die('数据库连接失败');
}
$sql1 = 'SET NAMES UTF8';
$insert = "insert into test values('{$title}','{$msg}','{$email}','{$name}');";
$select = "select * from test;";
// 设置数据传输格式
$db->query($sql1);
// 执行sql语句
$insert_result = $db->query($insert);
var_dump($insert_result);
$mysqli_result = $db->query($select);
if($mysqli_result === false){
die('数据库操作错误');
}
// 输出结果
while($row = $mysqli_result->fetch_assoc()){
echo $row['title'];
echo $row['content'];
echo $row['email'];
}