php搜索数据库数据的时候不显示第一条记录

我的问题是这样的,在做一个信息系统的时候,需要一个查询的东西,就做了一个测试一下,选择其中一个分类查询,就是想多查几条数据出来,后来发现在数据表中本来有5条数据的,可是查询总是4条数据,而且是第一条数据记录没有,我的代码如下:

<?php
$cid = $_POST['cid'];
$sql = "select * from classify where cid='$cid'";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
while($row=mysql_fetch_array($query)){
echo "<table><tr><td>".$row['title']."</td></tr></table>";
}
?> 

这样写的时候,会查询出一些记录,可是第一条是没有的,百思不得其解,后来在百度上找到了答案,方法如下

<?php
$cid = $_POST['cid'];
$sql = "select * from classify where cid='$cid'";
$query = mysql_query($sql);
//$row = mysql_fetch_array($query);
while($row=mysql_fetch_array($query)){
  echo "<table><tr><td>".$row['title']."</td></tr></table>";
}
?>

这样就行了,因为上面注释掉的那行已经把第一行给取出来了,说到底还是php的基本功力不行。

网友经典补充:

mysql_fetch_array()函数,作用是从mysql数据源中取得一行作为关联数组、数字数组或者两者兼有,要注意的是,这个函数每运行一次,数据库指针会往下移动一行
你第一次就已经下移一行了,那你下面的循环,当然的从第二行还是,那当然不会返回第一行
其实,你那条(刚才被注释的那条)写在哪里都是画蛇添足,毫无意义的代码!

linux(ubuntu)上安装nodejs和npm报错的解决方案

虽然在linux上安装这些软件和环境应该是很方便的是,可是不知道什么原因,我这边安装一直报错,试了所有的方法,均以失败而告终,足足花了半天,这可以说是很浪费生命的。这里做个记录,希望大家能够有所受益。

网上的做法通常是这样的

先更新ubuntu软件源:

sudo apt-get update 
sudo apt-get install -y python-software-properties software-properties-common 
sudo add-apt-repository ppa:chris-lea/node.js 
sudo apt-get update
1、先在系统上安装好nodejs和npm
sudo apt-get install nodejs
sudo apt-get install nodejs-legacy
sudo apt-get install npm
2、升级npm为最新版本
sudo npm install npm@latest -g
3、安装用于安装nodejs的模块n
sudo npm install -g n
4、通过n模块安装指定的nodejs
sudo n latest
sudo n stable
sudo n lts
5、查看版本
sudo node -v
sudo npm -v

一般这样的话,都是没有什么问题的。可是我这边安装nodejs是没有问题的,可是一直卡在安装npm这里。提示报错:npm命令就会提示没有该命令。


笔者是先彻底卸载掉nodejs,以及npm的东西,运行如下命令:

sudo apt-get remove npm
sudo apt-get remove nodejs-legacy
sudo apt-get remove nodejs 
sudo rm /usr/bin/node   //如果添加了软链接到这个目录下的话,要把这里快捷方式删除

确保删除干净后,我们采用这种方法安装:

安装

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

使用

安装成功后,需要关闭xshell,重新启动。nvm才会生效。

使用command -v nvm查看nvm是否安装成功

root@linuxidc:~# command -v nvm
nvm

查看已安装

通过nvm ls查看已安装的版本

$ nvm ls
            N/A
node -> stable (-> N/A) (default)
iojs -> N/A (default)

查看有哪些可安装

通过nvm ls-remote查看可使用版本

$ nvm ls-remote
        v0.1.14
        v0.1.15
        v0.1.16
        v0.1.17
        v0.1.18
...
        v10.6.0
        v10.7.0
        v10.8.0

安装nodejs

跟据这个列表,我们找到自己喜欢的版本,笔者这里选择最后一个:v10.8.0

通过nvm install 10.8.0来安装nodejs,后面的版本号我们可以任意选择

root@linuxidc:~# nvm install 10.8.0
Downloading and installing node v6.2.0...
Downloading https://nodejs.org/dist/v10.8.0/node-v10.8.0-linux-x64.tar.xz...

我们上面使用的是国外的服务器下载,很慢,耐心等待,nodejs和nvm成功安装!

我们运行下面的命令来确定是否已经安装好:nodejs和npm

node -v
npm -v

我们已经看到了相应的版本号了,这个时候我们看到有这样一个提示:

npm update check failed │
│ Try running with sudo or get access │
│ to the local update config store via │
│ sudo chown -R $USER:$(id -gn $USER) /home/wkp/.config

这句话的大概意思就是npm更新检查失败,还告诉了我们更新的方法,我们运行如下命令:

sudo chown -R 用户名(wkp) /home/wkp/.config
命令如下:
sudo chown -R wkp /home/wkp/.config

这个时候就不会报错了。

其实呢,笔者本来是要解决安装hexo这个东西,而这个东西又是依赖nodejs的,所以才有了这么多的问题。好的,我们继续安装hexo,运行命令:

sudo npm install hexo-cli -g

可是报错了:sudo: npm :找不到命令。后来去掉sudo,再次运行:

npm install hexo-cli -g

就不会报错了,然后我们接着继续往下走:

hexo init blog
cd blog
npm install
hexo server

基本没有什么问题了。

PHP获取文件扩展名的方法

本文实例讲述了PHP获取文件扩展名的方法。分享给大家供大家参考,具体如下:

<?php
$filename="123.jpg";

//方法一:
function get_ext($file_name){
  return array_pop(explode('.', $file_name));
  //用.号对字符串进行分组
}
echo get_ext($filename);

//方法二:
$fileEx=strtolower(substr(strrchr($filename,"."),1));
echo $fileEx;

//方法三:
$extend=pathinfo($filename);
echo $extend['extension'];

//方法四:
$filetype=array("image/gif","image/jpeg");
//判断文件扩展名类型是否在该 数组中
if(in_array($_FILES['file']['type'],$filetype)){
//针对上传文件判断
  echo $_FILES['file']['type'];
}
?>

WordPress 禁用未登录的用户访问 REST API

方法一:完全禁用未登录用户获取api

/*禁用未登录的用户*/
add_filter( 'rest_api_init', 'rest_only_for_authorized_users', 99 );
function rest_only_for_authorized_users($wp_rest_server){
    if ( !is_user_logged_in() ) {
        wp_die('非法操作!');
    }
}

方式二:过滤部分端点不能访问
通过访问http://www.test.com/wp-json/,查看需要过滤的端点

add_filter( 'rest_endpoints', function( $endpoints ){
    if ( isset( $endpoints['/wp/v2/users'] ) ) {
        unset( $endpoints['/wp/v2/users'] );
    }
    if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
        unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
    }
    return $endpoints;
});

foreach ($endpoints as $key=>$value){
        if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key)){
            unset( $endpoints[$key] );
        }
    }
//
if ( isset( $endpoints['/'] ) ) {
    unset( $endpoints['/'] );
}

方式三:从API中删除所有端点

add_action(' plugins_loaded ',function(){ 
    remove_filter(' rest_api_init ',' create_initial_rest_routes '); 
});

组合使用:部分api,登录可以访问

add_filter( 'rest_endpoints', function( $endpoints ){

    foreach ($endpoints as $key=>$value){
        if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key) && defined(AUTH_KEY)){
            unset( $endpoints[$key] );
        }
    }
    if ( isset( $endpoints['/'] ) ) {
        unset( $endpoints['/'] );
    }
    return $endpoints;
});

javascript通过正则表达式限制输入框只能输入数字

今天就来说记录下关于javascript通过正则表达式限制输入框只能输入数字的问题

1.使用正则表达式限制输入框只能输入数字:

<input type="text" onkeyup="this.value=this.value.replace(/[^\d]/g,'') " onafterpaste="this.value=this.value.replace(/[^\d]/g,'') " value="1"/>

其中,onafterpaste防止用户从其它地方copy内容粘贴到输入框。

如何用onkeyup验证input框只能输入开头不为零的正整数呢?

网友经典回答:

首先纠正点东西

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

也就是说题主在使用空字符串去替换符合[0-9]的数字,

其次,一般^都是这样写的/^[0-9]/。

如果是按照题意去匹配开头不为零的正整数建议使用match方法

/^[1-9]{1}[0-9]*$/  //这样的正则就可以满足。

但如果是用replace方法的话去写的话,就要逆向去写了。

<!DOCTYPE html>
<html>
<body>
<input type="number" id="myInput">
<script>
    const myInput = document.getElementById('myInput')
    myInput.onkeyup=function () {
        this.value=this.value.match(/^[1-9]{1}[0-9]*$/)
    }
</script>
</body>

2.输入框只能输入字母和下横线的正则表达式

<input onkeyup="this.value=this.value.replace(/[^_a-zA-Z]/g,'')" onpaste="this.value=this.value.replace(/[^_a-zA-Z]/g,'')">

3.输入框只能输入字母数字和下横线的正则表达式

<input onkeyup="this.value=this.value.replace(/[^\w]/g,'')" onpaste="this.value=this.value.replace(/[^\w]/g,'')">

或者

<input onkeyup="this.value=this.value.replace(/[\W]/g,'')" onpaste="this.value=this.value.replace(/[\W]/g,'')">

鼠标悬浮鼠标离开的时候变化太快的解决方案

其实对于鼠标悬浮这个效果是我们很常用的一个特效,可是我们每次在添加一个鼠标悬浮,比如背景颜色变化的时候,我们在让鼠标进入的时候,缓慢变化,出来的时候也是缓慢变化,而不是骤变这种,体验太差,最开始是这样的:

<style type="text/css">
 a{
 padding:30px 50px;
 background: red;
 text-decoration: none;
 }
 a:hover{
 padding:30px 50px;
 background: blue;
 transition: 1s ease;
 }
</style>

<div>
 <a href="#" title="">egei9bner</a>
</div>

这样的话,悬浮上去的时候变化确实是缓慢变化,持续时间1s,可是离开的时候就不是了,解决很简单,把那个transition用在a标签上面,而不是伪类上面。正确的应该是:

<style type="text/css">
 a{
 padding:30px 50px;
 background: red;
 text-decoration: none;
 transition: 1s ease;
 }
 a:hover{
 padding:30px 50px;
 background: blue;
 }
</style>

<div>
 <a href="#" title="">egei9bner</a>
</div>

这样无论是进入阶段还是离开阶段,都是缓慢变化的。