接上!!!,有什么问题大家留言,私信即可
本文内容:
~php连接数据库
~Php表单验证
~正则表达式
===========================================================
四,Php连接数据库
1,获取传参
<?p
a = $_GET['id']; @a=GET['id'] 加@就是假如出错不回显(一句马较喜欢用)
echo $a."<br />";
b = $_POST['username'];
echo $b."<br />";
c = $_COOKIE['user'];
echo c."<br />";
?>
2,使用数据库
<?php
//连接数据库
方法一:
$conn = mysqli_connect("127.0.0.1","root","root","db_name");
// 函数 IP 账户 密码 指定数据库(可以不指定)
方法二:
$conn = mysqli_connect("127.0.0.1","root","root");
mysqli_select_db($conn,"db_name");
//执行查询语句,并存储在数据集中
$result = mysqli_query($conn,"select * from bbb");
//读取数据集中的内容(该函数读取结果集中的第一个记录)
$row = mysqli_fetch_row($result);
$row = mysqli_fetch_all($result); //读取结果集的全部数据
//输出结果
var_dump($row);
//关闭数据库连接
mysqli_close($conn);
?>
示例:
<?php
$conn = mysqli_connect("127.0.0.1","root","root","关联规则");
//连接数据库
$result = mysqli_query($conn,"select * from python");
//将执行的结果集返回保存到result中
while($row = mysqli_fetch_array($result)){
//循环遍历结果集,并输出
echo "因:".$row['前项'];
echo "果:".$row['后项'];
echo "<br />";}
//$a = mysqli_fetch_row($result);
//var_dump($a) //输出结果集a的内容
mysqli_close($conn);
//关闭数据库连接
?>
3,预防Sql注入:
~过滤敏感信息/恶意代码。strpos() strtr()
~使用类型转换,避免提交异常数据导致报错。(int)$a
~使用数据库操作中的预处理,将查询与数据分离[高级用法-PDQ]
4,补充: echo与var_dump区别:
理解: echo 可以输出字符串与数字 ;
var_dump()(可以查看数组,对象;将查询结果放到数组中)
die("xx") 输出xx内容,终结程序
存在拼接语句并没有过滤就有Sql注入
五,Php表单验证
1, 什么是表单
标志是--> form标签 注意区分from(Sql语句中的)
主要功能是采集数据
2,表单标签
~action 处理表单数据的地方,不写提交给本页面(可相对路径)
~method 传参方式:GET(穿的少,穿的快)与POST(穿的多,穿的慢)
~target = _blank 在新窗口打开
= _self 默认,在相同的框架打开
= _parent 在父框架打开
= _top 在整个窗口打开
//建议挨边试试!!
3,<input type = password,text> 可以显示密码
所有基于前端的验证都是不安全的,只能靠服务器验证
4,一些简单函数的过滤(真正的一般不用这些函数,用正则表达式去过滤验证)
//这些函数直接百度,即出现详细用法
~strlen() 判断字符串长度是否为0
~count() 判断数据元素个数
~stripos(要查找的内容,需要查找的东西)
例:
//查找 "php" 在字符串中第一次出现的位置
<?php
echo stripos("You love php, I love php too!","PHP");
?> //输出9
~is_numeric() 如果是数字返回true,否则返回false
~is_array() 数组返回true,否则false
~is_null() 为空返回true,否则返回false
5,php与数据库的交互
<?php
@$uname = $_POST['username']; //“@”的作用是,假如出现错误,不回显给前端。防止内部数据泄露
@$passwd = $_POST['password'];
$conn = mysqli_connect('127.0.0.1','root','dbname;')
$sql = "select*from admin where uname='$uname' and passwd='$passwd'";
$abc = mysqli_query($conn,$sql);
$xxx = mysqli_fetch_array($abc);
if($xxx['uname'] === $uname and $xxx['passwd'] === $passwd){
echo '登录成功';
}
else{echo '用户名或密码错误';}
?>
总结:
表单的作用就是将数据提交到后端脚本,后端脚本对其进行处理
正常网站组成:中间件,动态脚本语言,数据库
六,正则表达式
1,常用转义字符:
\d 数字
\D 非数字
\s 空白字符(空格、制表符、换页符等)
\S 非空白字符
\w 单词字符(26字母+数字+下划线_) //重要!!!
\W 非单词字符 //重要!!!
\t 制表符
\r 回车符
\n 换行符
\ 转义
$ 匹配结尾
^ 匹配开始 //注意: /ab/ === /^ab$/
. 匹配换行符之外所有字符一次
* 匹配前一个字符,但是不限次数(0-n次)
+ 匹配前一个字符(1-n次)
限定符:
{n} 例如:0{3}--->仅匹配3个0连起来的情况,如6000
{n,} 例如:0{2,}-->只要有2个0及其以上的就会被匹配
{n,m} 例如:0{2,4}->最少匹配2个,最多4个
但是被匹配时,默认匹配最多的次数
10000 0000 00 -->匹配到3次
修饰符:
/i 匹配忽略大小写
例如 :
/'abc'/i 可以匹配到Abc45
/A 匹配规则必须从头开始
例如 :
/'abc'/A 可以匹配到abc45
/x 匹配表达式中的空
例如 :
/'a bc'/x 可以匹配到abc45
修饰符可以联合使用,如/正则规则/Aix
补充:小写匹配什么,大写就是匹配除此之外的
[0-9a-z] 匹配0~9,a~z之间所有
[135a-h] 匹配1,3,5和a~h之间所有
[^0-9] 匹配除了0~9之外的东西 //符号在不同地方意义不同
补充:区间的话只能写单位,不能写多位[0-3]可以,[400-500]不可以
多位不稳定
2,php中的正则表达式(又名规则表达式)
计算机科学的一个概念。通常用作:
~判断字符串是否符合某一规则(比如:是否符合手机号、邮箱规则等)。
~从一个字符串中找出符合规则的所有字符串(取HTML标签名)。
php中使用正则一定要加“ // ” ,这是格式。
~preg_match(正则表达式,匹配的字符串)
匹配字符串中的正则表达式,找到返回1,未找到返回0
例如:
<?php
$a = 'a1';
$b = '/[0-9]/';
echo preg_match($b,$a);
?>
~preg_replace(正则规则,'替换内容',检验字符串) //重要!!!
例如:
<?php
$a = 'aabbcc136asd';
$b = '/[0-9]/';
$c = preg_replace($b,'love',$a);
echo $c;
?>
输出内容:
aabbccloveloveloveasd
例如二:
<?php
$a = array('abc','aabc','ccabc');
var_dump(preg_replace('/abc/','love',$a));
?>
输出内容:
array(3){[0]=>string(4)"love"[1]=>string(5)"alove"[2]=>string(6)"cclove"}
例如:防范sql注入:
<?php
$a = '1 union select 1,2';
$b = '/\W|and|or|union|order|0x/'; //0x过滤编码注入
$c = preg_replace($b,'',$a);
$d = 'select * from admin where id ='.$c;
echo $d;
?>
输出:select * from admin where id =1select12
注意:
sql注入的核心就是用户输入的不可信数据被当作代码执行
正则表达式主要用在防御即过滤上,可以有效防御sql注入、xss、html注入等