至尊技术网 - Get 2020-11-18T15:00:00+08:00 Typecho https://www.zzwws.cn/feed/atom/tag/Get/ <![CDATA[PHP连接数据库,通过接受post请求实现增删改查]]> https://www.zzwws.cn/archives/4954/ 2020-11-18T15:00:00+08:00 2020-11-18T15:00:00+08:00 悠悠楠杉 http://www.zzwws.cn

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

]]>
<![CDATA[php判断是否有get、post参数的方法]]> https://www.zzwws.cn/archives/4935/ 2020-11-11T15:15:00+08:00 2020-11-11T15:15:00+08:00 悠悠楠杉 http://www.zzwws.cn 第一种方法:
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;//存在
}
]]>
<![CDATA[php判断请求来源地址并且限制非法来源请求]]> https://www.zzwws.cn/archives/4922/ 2020-11-09T19:59:00+08:00 2020-11-09T19:59:00+08:00 悠悠楠杉 http://www.zzwws.cn 第一种:通过获取上一个页面链接来判断

//获取顶级域名
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>
]]>
<![CDATA[php获取网页内容,curl 发起get、post请求]]> https://www.zzwws.cn/archives/4885/ 2020-11-04T16:12:00+08:00 2020-11-04T16:12:00+08:00 悠悠楠杉 http://www.zzwws.cn 获取指定的内容,主要还是用到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/'}");

获取重定向跳转后的url

function 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;
}
]]>