PHP添加百度收录判断以及未收录自动提交

开篇

本来是想自己写一个插件来做百度收录的,但是发现typecho的教程不是很完善,百度谷歌搜了几个基本上都是一摸一样的,所以对我这样没基础的小白是有点难度的,虽然说多看几个插件的源码,应该能搞懂大致的意思,但是比较费时间。

所以还是准备写一下php的代码,不过其实我之前写过一次了,所以现在重新写一遍而已,并且投入线上使用。

代码

不过其实还是不是非常的完善,具体原因是因为php提交数据,百度的查询有点小问题,经常会出现一个验证的系统,所以可以考虑不管是否收录都提交,反正咱们只是小站而已。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
$url = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
function CheckBaiduUrl($url){
$urls = array($url);
$header = array (
"Host:www.baidu.com",
"Content-Type: text/html;charset=utf-8",
"Connection: keep-alive",
'Referer:https://www.baidu.com',
'Content-Encoding: gzip',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
);
$url = 'http://www.baidu.com/s?wd='.$url;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$rs=curl_exec($curl);
curl_close($curl);
$api = 'http://data.zz.baidu.com/urls?site=https://www.datehoer.com&token=XHWvdkaWTnFP9gyu';
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $urls),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
$ch = curl_init();
if(!strpos($rs,'提交网址')){

}else{
echo "<script>console.log('未收录')</script>";
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
$file = fopen('info.text',"a+");
fwrite($file,$result.date("Y/m/d"));
fwrite($file,"\r\n");
}
}
CheckBaiduUrl($url);
?>

php实现简单的新闻发布系统前台后台数据库操作

最近写了一个小小的项目,结合了最近学习的 PHP 操作数据库函数(mysqli)。实际上,数据库大多数的操作都是增删改查,只要熟练掌握这四个操作,那么大多数的问题都会迎刃而解。

完整代码放在了 GitHub 上,欢迎 star。
GitHub: https://github.com/datehoer/news

下面简单讲解一下主要的功能以及思路。

结构

首先简单想一下,我们既然要做一个前后全套的系统,那么我们都需要什么功能呢?

首先需要一个前台页面,然后需要新闻的详情页,之后再需要后台等等。

  1. 主页
  2. 新闻详情页
  3. 后台操作页
  4. 登录页面

然后后台操作页,大多数都是一个综合的页面,然后点击跳转到具体的功能页面,所以我们的后台操作页也就是后台的主页需要有什么功能呢?

  1. 新闻发布
  2. 新闻删除
  3. 新闻类的增加
  4. 新闻类的删除
  5. 新闻修改
  6. 新闻类的修改
  7. 操作前台页面(友情链接、底部信息等)
  8. 用户操作
  9. 评论管理

我大概也就能想到这些,更多的内容就是边写边想了。

我们将后台的页面都命名为 admin_xxx。

然后其实有的页面只需要在页面点击进行操作,然后跳转到处理页面之后进行数据库操作,再返回之前的页面。亦或者我们使用 isset() 函数。

isset() 函数

isset(mixed $var, mixed $... = ?): bool

检测变量是否设置,并且不是 null

如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 null 的变量,将返回 false。同时要注意的是 null 字符("\0")并不等同于 PHP 的 null 常量。

如果一次传入多个参数,那么 isset() 只有在全部参数都已被设置时返回 true 计算过程从左至右,中途遇到没有设置的变量时就会立即停止。

其实主要是通过这个来判断是否传递了参数,这样我们就可以将具体的操作代码放在功能页面而不是进行跳转了。

所以后台操作页的代码中大多数功能都会以 if(isset()) 开头,这是为了判断你是否点击提交/删除(其实就是 submit 按钮)。

新闻发布

新闻发布页,这个我觉得其实是非常容易实现的功能,我们主要的核心代码就是一句话:

1
$sql = "insert into news(`newclass`,`title`,`content`,`settime`,`adduser`,`hits`) values('$newsClass','$title','$content','$settime',$userName','$hits');";

我们只要写好发布页面然后传值之后通过这句 SQL 进行执行即可。

只需要引入一段 JavaScript 代码然后加几行 JavaScript 即可实现现代化编辑器的样式。

wangeditor

前台布局

这个是我最后写的功能,因为…其实主要还是懒,我这个写了好久,一天写一行-.-。

这里我的思路就是创建一个数据表,然后我前台读取做这个表,如果有那么就写出来,无就不写,然后我通过后台来进行增删改查。

其实这个跟前面的新闻发布是一样的,我们在后台进行设置,比如说 banner 轮播图。

我们首先先在前台写好轮播图,然后再进行修改,之所以这样,是因为我当时是先写的静态的主页,然后再修改成读取数据,不过也可以先写后台,然后设置上去数据再写前台,但是我觉得先把前台写好,然后再进行修改比较容易,随意即可。

登录页面

写了这么多页面,我最满意的其实就是这个登录页面,而登录页面我最满意的就是验证码功能了。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$numlist = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$num ='';
$numlen=5;
function createnum($numlist,$num,$numlen){
for($i=0;$i<$numlen;$i++){
$numrandom = rand(0,count($numlist)-1);
$num=$num.$numlist[$numrandom];
}
return $num;
}
$num =createnum($numlist,$num,$numlen);
?>

首先我们需要先创建一个数组,用

来储存我们的验证码的值,0-9A-Za-Z然后再创建随机数来读取数组的值,之后再进行组合就形成了我们的验证码,最后再在点击提交后先对验证码进行判断,然后再判断用户名密码来进行登录。

这个功能我是非常喜欢的!!

总结

主要就是捡了几个比较重要的地方来进行讲解,完整的可以去 GitHub 查看,大多数的功能我都已经实现了,所以日后是随缘进行完善了,其实之所以不将所有的功能完善好,是因为我的 CSS 写的太丑了,不想看了,哈哈。

大家要学会看别人的代码,不论好坏都可以学到许多东西,比如说验证码这个功能我就是参考的 JavaScript 验证码来写的,多学多看。

用php和jquery分别实现验证码功能

一开始是想通过 jQuery 来实现验证码功能的。也实现了。

验证码效果

但是发现不能很好的和 PHP 联动,我是想直接用 JavaScript 来判断是否正确而非进行提交,不能很好的达到我想要的效果,当然也可能是我没想到。

1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
var num_list=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
var num='';
var num_len=5;
function createnum(){
for(let i =0;i<num_len;i++){
let num_random = Math.floor(Math.random()*num_list.length)
num = num+num_list[num_random];
}
}
createnum();
$('.right-num').val(num);
</script>

简单上一下 jQuery 的代码,很简单,但是没有实现我想要的效果,所以放弃来使用 PHP 写。

其实 PHP 的思路和 JavaScript 是一样的,我们通过数组来创建包含数据的数组,然后设置随机数来随机选择数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$numlist = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$num ='';
$numlen=5;
function createnum($numlist,$num,$numlen){
for($i=0;$i<$numlen;$i++){
$numrandom = rand(0,count($numlist)-1);
$num=$num.$numlist[$numrandom];
}
return $num;
}
$num =createnum($numlist,$num,$numlen);
?>

我是直接将我的代码复制上来了,其实也就是前面创建出来这个验证码,然后在验证码的地方输出,之后通过 form 表单提交数据,这里面有个很关键的地方就是传 right-num 数据。如果我们不传这个数据而是使用前面的 $num 的话,那么会造成 $num 为当前页面的验证码,而我们提交的则是上一个页面的验证码,也就是说我们点击提交按钮后,数据发生了变化,我们提交的是之前的验证码,而 $num 是提交后新生成的。所以我们就需要将之前生成的验证码也传入 PHP 中来进行判断。

然后就实现了验证码的功能,虽然比较简陋,但是验证码通常用来防止自动提交等,防君子不防小人。

php 表单提交

首先,本地演示需要开启本地服务器,你可以使用 phpstudyapache 或其他类似工具。然后,需要修改主机文件(host)以便无需输入 “localhost” 即可访问本地网站。

下面解释一下本地演示的流程:

php提交过程

PHP 提交过程

  1. 在 HTML 页面中创建一个 <form> 元素,并设置 action 属性为你的 PHP 文件名。同时,选择使用 POSTGET 方法都可以,根据你的需求而定。

  2. <form> 元素内部,创建需要提交的表单字段,使用 <input> 标签。每个 <input> 标签需要设置 name 属性,这个属性用于标识表单字段。

下面是一个示例的 HTML 代码:

1
2
3
4
<form action="444.php" method="post">
<input type="text" name="nl">
<input type="submit" value="提交">
</form>
  1. 在你的 PHP 文件中,使用 $_POST(或 $_GET,根据表单方法选择)来接收表单提交的数据。使用 $_POST 时,通过指定 name 属性来获取相应的数据。

下面是一个简单的 PHP 代码示例,它判断用户输入的年龄是否大于 18 岁:

1
2
3
4
5
6
<?php
$age = $_POST["nl"];
if ($age > 18) {
echo "你要对自己的行为负责";
}
?>

这个例子中,"nl"<input> 标签的 name 属性,用于确认接收的数据是用户输入的年龄。

区分 $_GET$_POST

  • $_GET 变量包含了通过 HTTP GET 方法发送的参数,这些参数以名称(name)和值(value)的形式组成数组。GET 方法的信息在浏览器的地址栏中可见,但有长度限制(通常不超过 100 个字符)。

  • $_POST 变量包含了通过 HTTP POST 方法发送的参数,同样以名称和值的形式组成数组。POST 方法的信息不可见,而且没有信息长度限制。

需要注意的是,GET 相对不太安全,因为信息在 URL 中可见,而 POST 更安全,因为信息不可见。根据需求,选择适合的方法。

此外,GET 只生成一个 TCP 数据包,而 POST 会生成两个 TCP 数据包。在稳定的传输情况下,GET 通常更快,因为它一次性发送数据。POST 则需要先发送一个请求,类似于提前告知对方要传输的数据,然后再实际传输数据。

具体的使用应根据你的需求和客户需求来选择。虽然 GET 和 POST 的作用类似,但在内部实现上有很大的不同,不能随意混用。

希望这些解释能帮助你理解本地演示和表单提交的流程!如果有任何问题或需要进一步的帮助,请随时提问。