至尊技术网 - Get
https://www.zzwws.cn/tag/Get/
-
PHP连接数据库,通过接受post请求实现增删改查
https://www.zzwws.cn/archives/4954/
2020-11-18T15:00:00+08:00
1.html文件:<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Cache-Control" content="no-cache">
<title>PHP连接数据库实现增删改查</title>
</head>
<body>
<div>
<input type="text" name="daiHao" placeholder="代号">
<input type="text" name="keMu" placeholder="科目">
<input type="text" name="jieShu" placeholder="节数">
<button class="tianJia">添加</button>
<button class="shanChu">删除</button>
<button class="xiuGai">修改</button>
<button class="chaZhao">查找</button>
</div>
<p>提示:添加可以填3个,删除只填代号,修改可以填科目和节数然后需要改哪个填代号,查询填科目和节数。</p>
<table>
<tbody>
<!-- <tr>
<th>代号</th>
<th>科目</th>
<th>节数</th>
</tr> -->
</tbody>
</table>
<script src="https://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
<script>
function teVal(){
daiHao = $('[name="daiHao"]').val();
keMu = $('[name="keMu"]').val();
jieShu = $('[name="jieShu"]').val();
arr = '<tr><th>代号</th><th>科目</th><th>节数</th></tr>';
}
$.post('1.php',{a: 'synr'},function(ret){
teVal();
// console.log(ret);
if(ret[0].code == '200'){
// alert(ret[0].msg);
for(var i = 1;i < ret.length;i++){
arr += '<tr><td>'+ret[i].c_id+'</td><td>'+ret[i].c_name+'</td><td>'+ret[i].t_id+'</td></tr>';
}
$('tbody').html(arr);
}else{
alert(ret[0].msg);
}
})
//添加
$('.tianJia').on('click',function(){
teVal();
if(keMu == '' && jieShu == ''){
alert('请输入你要添加的内容!');
}else if(daiHao == ''){
alert('请输入你要添加的内容!');
}else{
$.post('1.php',{a: 'tianJia',c_id: daiHao,c_name: keMu,t_id: jieShu},function(ret){
// console.log(ret);
if(ret.code == '200'){
alert(ret.msg);
location.reload();
}else{
alert(ret.msg);
}
})
}
})
//删除
$('.shanChu').on('click',function(){
teVal();
if(daiHao != ''){
var res = confirm('是否删除?');
if(res){
$.post('1.php',{a: 'shanChu',c_id: daiHao},function(ret){
if(ret.code == '200'){
alert(ret.msg);
location.reload();
}else{
alert(ret.msg);
}
})
}
}else{
alert('请输入你要删除的代号!');
}
})
//修改
$('.xiuGai').on('click',function(){
teVal();
if(keMu != '' || jieShu != ''){
var res = confirm('是否修改?');
if(res){
$.post('1.php',{a: 'xiuGai',c_id: daiHao,c_name: keMu,t_id: jieShu},function(ret){
// console.log(ret);
if(ret.code == '200'){
alert(ret.msg);
location.reload();
}else{
alert(ret.msg);
}
})
}
}else{
alert('请输入你要修改的内容!');
}
})
//查找
$('.chaZhao').on('click',function(){
teVal();
if(keMu != '' || jieShu != ''){
$.post('1.php',{a: 'chaZhao',c_id: daiHao,c_name: keMu,t_id: jieShu},function(ret){
// console.log(ret)
if(ret[0].code == '200'){
// alert(ret[0].msg);
for(var i = 1;i < ret.length;i++){
arr += '<tr><td>'+ret[i].c_id+'</td><td>'+ret[i].c_name+'</td><td>'+ret[i].t_id+'</td></tr>';
}
$('tbody').html(arr);
}else{
alert(ret[0].msg);
}
})
}
})
</script>
</body>
</html>
1.php文件:<?php
$conn = mysqli_connect('localhost','cs','123456','cs','3306');//主机名或 IP 地址,MySQL用户名,MySQL密码,规定默认使用的数据库,MySQL服务器的端口号,规定 socket 或要使用的已命名 pipe
if (!$conn) {
die("连接错误: " . mysqli_connect_error());
}
// var_dump($conn);
mysqli_query($conn,"set names utf8");//设置数据库编码为utf8
header('content-type: application/json;charset=utf-8');//输出为json格式,并设置编码为utf-8
//全局
$c_id = isset($_POST['c_id']) ? trim($_POST['c_id']) : '';
$c_name = isset($_POST['c_name']) ? trim($_POST['c_name']) : '';
$t_id = isset($_POST['t_id']) ? trim($_POST['t_id']) : '';
//添加
function tianJia(){
$conn = $GLOBALS['conn'];//引用全局作用域中可用的全部变量
$c_id = $GLOBALS['c_id'];
$c_name = $GLOBALS['c_name'];
$t_id = $GLOBALS['t_id'];
$sql = "insert into course (c_id,c_name,t_id) values ('$c_id','$c_name','$t_id')";//添加
$result = mysqli_query($conn,$sql);
if($result){
return json_encode(array('code' => '200','msg' => '添加成功'));
}else{
return json_encode(array('code' => '400','msg' => '添加失败'));
}
}
//删除
function shanChu(){
$conn = $GLOBALS['conn'];
$c_id = $GLOBALS['c_id'];
$sql = "delete from course where c_id='$c_id'";//删除
$result = mysqli_query($conn,$sql);
if($result){
return json_encode(array('code' => '200','msg' => '删除成功'));
}else{
return json_encode(array('code' => '400','msg' => '删除失败'));
}
}
//修改
function xiuGai(){
$conn = $GLOBALS['conn'];
$c_id = $GLOBALS['c_id'];
$c_name = $GLOBALS['c_name'];
$t_id = $GLOBALS['t_id'];
if($c_name != ''){
$s = "c_name='$c_name'";
}else if($t_id != ''){
$s = "t_id='$t_id'";
}else if($c_name != '' && $t_id != ''){
$s = "c_name='$c_name',t_id='$t_id'";
}
$sql = "update course set $s where c_id='$c_id'";//修改
$result = mysqli_query($conn,$sql);
if($result){
return json_encode(array('code' => '200','msg' => '修改成功'));
}else{
return json_encode(array('code' => '400','msg' => '修改失败'));
}
}
//查找
function chaZhao(){
$conn = $GLOBALS['conn'];
$c_id = $GLOBALS['c_id'];
$c_name = $GLOBALS['c_name'];
$t_id = $GLOBALS['t_id'];
if($c_name != ''){
$s = "c_name='$c_name'";
}else if($t_id != ''){
$s = "t_id='$t_id'";
}else if($c_name != '' && $t_id != ''){
$s = "c_name='$c_name' and t_id='$t_id'";
}
$sql = "select * from course where $s";//查找
$result = mysqli_query($conn,$sql);
$arr = array();//建一个空数组
$arr[] = array('code' => '200','msg' => '查找成功');//赋值到空数组里
while ($row = mysqli_fetch_assoc($result)) {//通过while循环获取
$arr[] = $row;
}
if($result){
return json_encode($arr);
}else{
return json_encode(array('code' => '400','msg' => '查找失败'));
}
}
//所有内容
function synr(){
$conn = $GLOBALS['conn'];
$sql = 'select * from course';
$result = mysqli_query($conn,$sql);
$arr = array();
$arr[] = array('code' => '200','msg' => '获取成功');
while ($row = mysqli_fetch_assoc($result)) {//通过while循环获取
$arr[] = $row;
}
// print_r($arr);
if($result){
return json_encode($arr);
}else{
return json_encode(array('code' => '400','msg' => '获取失败'));
}
}
//转换成数组
// $result = mysqli_query($conn,$sql);//对数据库执行一次查询
// $row = mysqli_fetch_array($result,MYSQLI_ASSOC);//函数从结果集中取得一行作为关联数组,或数字数组。 MYSQLI_ASSOC,MYSQLI_NUM,MYSQLI_BOTH(默认)
// print_r($row);
//mysqli_fetch_assoc($result);//关联数组
//mysqli_fetch_row($result);//数字数组
//错误提示
function bc(){
return json_encode(array('code' => '400', 'msg' => '操作失败'));
}
$a = isset($_POST['a']) ? trim($_POST['a']) : '';
switch ($a){
case "tianJia": // 添加
echo tianJia();
break;
case "shanChu": // 删除
echo shanChu();
break;
case "xiuGai": // 修改
echo xiuGai();
break;
case "chaZhao": // 查找
echo chaZhao();
break;
case "synr":
echo synr();
break;
default:
echo bc();
mysqli_close($conn);//关闭先前打开的数据库连接
}
?>
数据库表下载地址:https://zhizun.lanzoux.com/iuicqiiigxi
-
php判断是否有get、post参数的方法
https://www.zzwws.cn/archives/4935/
2020-11-11T15:15:00+08:00
第一种方法:if(is_array($_GET)&&count($_GET)>0){//判断是否有get参数。
if(isset($_GET["page"])){//判断所需要的参数是否存在,isset用来检测变量是否设置,返回true or false
echo $_GET["page"];//存在
}
}
if(is_array($_POST)&&count($_POST)>0){//判断是否有post参数。
if(isset($_POST["page"])){//判断所需要的参数是否存在,isset用来检测变量是否设置,返回true or false
echo $_POST["page"];//存在
}
}
第二种方法:三元运算符$page = isset($_GET['page']) ? trim($_GET['page']) : '';//判断是否有get参数,没用就为空。
echo $page;
$page = isset($_POST['page']) ? trim($_POST['page']) : '';//判断是否有post参数,没用就为空。
echo $page;
第三种方法:if(!empty($_GET)){//判断是否有get参数。
echo $GET;//存在
}
if(!empty($_POST)){//判断是否有post参数。
echo $POST;//存在
}
-
php判断请求来源地址并且限制非法来源请求
https://www.zzwws.cn/archives/4922/
2020-11-09T19:59:00+08:00
第一种:通过获取上一个页面链接来判断//获取顶级域名
function getTopHost($url){
$url = strtolower($url); //首先转成小写
$hosts = parse_url($url);
$host = $hosts['host'];
//查看是几级域名
$data = explode('.', $host);
$n = count($data);
//判断是否是双后缀
$preg = '/[\w].+\.(com|net|org|gov|edu)\.cn$/';
if(($n > 2) && preg_match($preg,$host)){
//双后缀取后3位
$host = $data[$n-3].'.'.$data[$n-2].'.'.$data[$n-1];
}else if($n > 1){
//非双后缀取后两位
$host = $data[$n-2].'.'.$data[$n-1];
}
return $host;
}
$strUrl = isset($_SERVER['HTTP_REFERER']) ? trim($_SERVER['HTTP_REFERER']) : '';
if($strUrl != ''){
$strUrl = getTopHost($strUrl);
// echo $strUrl;
$all_Array = ['zzwws.cn'];//允许请求的主域名,多个域名用,分开
$isContains = in_array($strUrl,$all_Array);
if(!$isContains){
exit(json_encode(['code' => 0, 'msg' => '禁止请求']));
}
}
第二种:设置只允许Ajax跨域访问(PHP获取无效)if(isset($_SERVER['HTTP_ORIGIN'])){
$origin = $_SERVER['HTTP_ORIGIN'];
$strUrl = parse_url($origin);
$allow_origin = ['localhost', 'www.zzwws.cn'];//只允许请求的域名
if (in_array($strUrl['host'], $allow_origin)) {
header('Access-Control-Allow-Origin:' . $origin);
}
}
第三种:设置个密钥请求(适合PHP获取)if(!empty($_GET) || !empty($_POST)){
$key = '0f1VFZE47z';//密钥
if($_GET['key'] == $key || $_POST['key'] == $key){
echo json_encode(['code' => 1,'msg' => '请求成功']);
}else{
exit(json_encode(['code' => 0, 'msg' => '禁止请求']));
}
}
第四种:使用hieroglyphy验证请求hieroglyphy下载地址:https://zhizun.lanzoui.com/iwGb7wt7mwh<?php
session_start();
if(empty($_POST)){
include 'hieroglyphy.php';
$addsalt = md5(mt_rand(0, 999) . time());
$_SESSION['addsalt'] = $addsalt;
$hieroglyphy = new hieroglyphy();
$addsaltJs = $hieroglyphy->hieroglyphyString($addsalt);
}else{
if(empty($_SESSION['addsalt']) || $_POST['hashsalt'] != $_SESSION['addsalt']){
exit(json_encode(['code' => 0,'msg' => '验证失败,请刷新页面重试']));
}
exit(json_encode($_POST));//验证通过
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>
hashsalt = <?php echo $addsaltJs;?>;
$.post('index.php',{time: <?php echo time();?>,hashsalt: hashsalt},function(res){
console.log(res);
},'json')
</script>
</body>
</html>
第五种:js生成签名,PHP验证签名(推荐)<?php
if(!empty($_POST)){
$key = '密钥';//密钥
$second = 5;//每次请求有效期,单位秒
$domain = ['cs.zzwws.xyz'];
if(!in_array(parse_url($_SERVER['HTTP_REFERER'])['host'],$domain)){
exit(json_encode(['code' => 0,'msg' => '禁止请求']));
}
if($_POST['time'] <= time()-$second || !check_sign($_POST['param'].$_POST['time'],$_POST['sign'])){
exit(json_encode(['code' => 0,'msg' => '验证失败,请刷新页面重试']));
}else{
exit(json_encode(['code' => 1,'msg' => '验证成功']));
}
}
function check_sign($text,$sign)
{
global $key;
if(empty($_SERVER['HTTP_REFERER'])){
return false;
}
$host = parse_url($_SERVER['HTTP_REFERER'])['host'];
if($sign != md5($text.$host.$key)){
return false;
}else{
return true;
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.18.0/js/md5.min.js"></script>
<script>
// js生成签名,这些需要加密,加密平台:https://www.jsjiami.com/,使用最牛加密,密钥需要包含特殊字符
function sign(text){
return md5(text+location.host+'密钥');
}
// js生成签名,这些需要加密,加密平台:https://www.jsjiami.com/,使用最牛加密,密钥需要包含特殊字符
timestamp = Date.parse(new Date())/1000;
$.post('2.php',{param: 'cs',time: timestamp,sign: sign('cs'+timestamp)},function(res){
console.log(res);
},'json')
</script>
</body>
</html>
-
php获取网页内容,curl 发起get、post请求
https://www.zzwws.cn/archives/4885/
2020-11-04T16:12:00+08:00
获取指定的内容,主要还是用到preg_match_all()函数,只执行一次正则表达式也可以用preg_match()函数!1.html代码如下<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Cache-Control" content="no-cache">
<title>测试</title>
</head>
<body>
<div class="box">测试</div>
<div class="box">测试2</div>
<div class="box">测试3</div>
<div class="box">测试4</div>
<div class="box">测试5</div>
</body>
</html>
php代码如下$str = file_get_contents('1.html');
preg_match_all ('/<div class="box">(.*)<\/div>/U', $str, $pat_array);
// print_r($pat_array[1][0]);
for($i=0;$i<count($pat_array[0]);$i++){
print_r($pat_array[1][$i].'<br>');
}
// 输出结果:
// 测试
// 测试2
// 测试3
// 测试4
// 测试5
preg_match_all方法正则多个条件前后的//也可以用##的,如$regex1 = '#<strong>(.*?)</strong>#';,用了#后,这里面的</strong>就可以不用转义了!$s='<a class="js-tongjic" href="afhdfhdfh.html" monitor-shortpv-c="215874">
<img src="/image/1.png"/>
<strong>123456</strong>
<img src="/image/2.png"/>
<strong>654321</strong></a>';
$regex = '/class="js-tongjic" href="(.*?)"[\s\S]*?src="(.*?)"[\s\S]*?<strong>(.*?)<\/strong>[\s\S]*?src="(.*?)"[\s\S]*?<strong>(.*?)<\/strong>/';
preg_match_all($regex, $s, $matche);
echo '<pre>';
print_r($matche);
使用curl发送get、post请求curl把HTTP协议都封装成了很多函数,直接传相应参数即可,降低了编写HTTP协议字符串的难度。前提:在php.ini中要开启curl扩展。/**
* curl获取数据
*
* @param string $url 链接
* @param string|array $post post提交的数据
* @param string $cookie 模拟cookie
* @param string $referer 来源地址
* @param string $proxy 模拟ip或者代理ip
* @param integer $header 1显示请求头,0不显示
* @param string $userAgent 模拟用户浏览器信息
* @param array $httpheader 模拟请求头
* @param int $timeout 超时时间
* @return string|array 返回页面数据
*/
function get_curl($url, $post = '', $cookie = '', $referer = '', $proxy = '', $header = 0, $userAgent = '', $httpheader = [], $timeout = 10)
{
$curl = curl_init();
// 配置curl中的http协议->可配置的荐可以查PHP手册中的curl_
curl_setopt($curl, CURLOPT_URL, $url);
if ($post) {
// POST数据
curl_setopt($curl, CURLOPT_POST, 1);
// 把post的变量加上
if (is_array($post)) {
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
} else {
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
}
if (is_string($post) && $arr = json_decode($post, true)) {
if (is_array($arr)) {
$httpheader[] = 'Content-Type: application/json; charset=utf-8';
$httpheader[] = 'Content-Length: ' . strlen($post);
}
}
}
if ($referer) {
$httpheader[] = 'Referer: ' . $referer; //模拟来路
$httpheader[] = 'Origin: ' . $referer;
} else {
$httpheader[] = 'Referer: ' . $url; //模拟来路
$httpheader[] = 'Origin: ' . $url;
}
if ($cookie) {
$httpheader[] = 'Cookie: ' . $cookie; //模拟cookie
}
if ($proxy) {
$proxy = explode(':', $proxy);
if (!empty($proxy[1])) {
curl_setopt($curl, CURLOPT_PROXY, $proxy[0]); //代理服务器地址
curl_setopt($curl, CURLOPT_PROXYPORT, $proxy[1]); //代理服务器端口
}
$httpheader[] = 'X-FORWARDED-FOR: ' . $proxy[0]; //模拟ip
$httpheader[] = 'CLIENT-IP: ' . $proxy[0]; //模拟ip
} else {
$httpheader[] = 'X-FORWARDED-FOR: ' . $_SERVER['REMOTE_ADDR']; //模拟ip
$httpheader[] = 'CLIENT-IP: ' . $_SERVER['REMOTE_ADDR']; //模拟ip
}
if ($header) {
curl_setopt($curl, CURLOPT_HEADER, TRUE); //获取响应头信息
}
if ($userAgent) {
$httpheader[] = 'User-Agent: ' . $userAgent; //模拟用户浏览器信息
} else {
$httpheader[] = 'User-Agent: ' . (!empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36');
}
$parseUrl = parse_url($url);
if (!empty($parseUrl['host'])) {
$host = 'Host: ' . $parseUrl['host'];
if(!empty($parseUrl['port'])){
$host .= ':'.$parseUrl['port'];
}
$httpheader[] = $host;
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader); //模拟请求头
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //只需要设置一个秒的数量就可以
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //返回字符串,而非直接输出到屏幕上
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //跟踪爬取重定向页面
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, ''); //解决网页乱码问题
// 执行这个请求
$ret = curl_exec($curl);
if ($header) {
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = substr($ret, 0, $headerSize);
$body = substr($ret, $headerSize);
$ret = array();
$ret['header'] = $header;
$ret['body'] = $body;
}
curl_close($curl);
return $ret;
}
//get获取
$data = get_curl('https://www.baidu.com/');
//post获取
$data = get_curl('https://www.baidu.com/',[id => 1,'url' => 'www.zzwws.cn']);// 或者get_curl('https://www.baidu.com/','id=1&url=www.zzwws.cn');
//发起json数据post请求
$data = get_curl('https://www.zzwws.cn/',"{'id': 1,'url': 'https://www.zzwws.cn/'}");
获取重定向跳转后的urlfunction redirect_url($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// 不需要页面内容
curl_setopt($ch, CURLOPT_NOBODY, 1);
// 不直接输出
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 返回最后的Location
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
$info = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
curl_close($ch);
return $info;
}