php+mysql实践项目

入门基础:php基本语法+mysql查询基本语句(推荐《php+mysql动态网址开发从基础到实践》姜美林著)

在有了一定的语言基础后就可以开始尝试一些项目

php的编译软件网上有很多,我用的一般是notepad++比较轻便,环境的搭建参考网上的教程,有一定linux基础的同学可以直接从阿里、腾讯的云服务器入手,学生机也比较便宜,可以租一个月来练手。

1.写一个简单的前端后端+mysql程序(这里我们以搜索为例)

 

(1)写一个简单的前端页面

<form action="jiaoben.php" method="post" >

     <!-- label标签定义表单控件的文字标注,input类型为text定义了一个单行文本输入框 -->
     <p>
          <label>车牌号:</label>
         <input type="text" name="carnumber"id="carnumber" />
                 </p>
                 <p>
                 <label>车型号:<label>
                 <input type="text" name="carname" id="carname" />
                 </p>
                 <p>
                 <label>车颜色:<label>
                 <input type="text" name="carcolor" id="carcolor" />
                 <p>
         <div id="tt">
                 <input type="submit" style="color:blue"id="select" value="查询"/>
                </div>
                </p>
     </p>
         </form>

 

 

(2)后端脚本处理程序 

<?php
$carname=$_POST[‘carname‘];
$carcolor=$_POST[‘carcolor‘];
$carnumber=$_POST[‘carnumber‘];

if($carname==NULL&&$carnumber==NULL&&$carcolor==NULL){
echo "<p style=‘color:#00ffff‘>请输入查询内容!</p>";
exit;
}
//if(!get_magic_quotes_gps()){
//$carname=addslashes($carname);
//$carcolor=addslashes($carcolor);
$carcolor=$_POST[‘carcolor‘];
$carnumber=$_POST[‘carnumber‘];

if($carname==NULL&&$carnumber==NULL&&$carcolor==NULL){
echo "<p style=‘color:#00ffff‘>请输入查询内容!</p>";
exit;
}
//if(!get_magic_quotes_gps()){
//$carname=addslashes($carname);
//$carcolor=addslashes($carcolor);
//$carnumber=addslashes($carnumber);
//}
$db=@new mysqli(‘127.0.0.1‘,‘root‘,‘mysql‘,‘car_data‘,3306);
if(){
echo"数据库连接失败!<br>\n";
echo mysqli_connect_errno();
exit;
}
$db->query("set names utf8");
$sql="SELECT *FROM car_data_table WHERE car_name LIKE ‘%$carname%‘ AND car_color LIKE ‘%$carcolor%‘ AND car_number LIKE ‘%$carnumber%‘";
//$sql="SELECT *FROM car_data_table WHERE car_name=1";
$rs=$db->query($sql);
if(!$rs)
{
echo"<p style=‘color:#00ffff‘> 没有该车相关记录</p>";
exit;
}

$rsnum=$rs->num_rows;
echo"<p style=‘color:#00ffff‘>本次搜索共找到<b>$rsnum</b>条记录。</p>";
echo"<br/>";
for($i=0;$i<$rsnum;$i++){
$row=$rs->fetch_assoc();
?>
<table style="color:#00ffff"border="1"cellpadding="0"cellspacing="0"align="center"width="500px">
<tr><td>车牌号</td><td><?php echo$row[‘car_number‘]?></td></tr>
<tr><td>车型号</td><td><?php echo$row[‘car_name‘]?></td></tr>
<tr><td>车颜色</td><td><?php echo$row[‘car_color‘]?></td></tr>
<tr><td>车辆出现时间</td><td><?php echo$row[‘car_showtime‘]?></td></tr>
<tr><td>车辆离开时间</td><td><?php echo$row[‘car_leavetime‘]?></td></tr>
<tr><td>摄像头编号</td><td><?php echo$row[‘shexiangtou_number‘]?></table>
<?php
echo"<br/><br/>";

}
?>

<?php
$rs->free();
$db->close();
?>

我的代码仅作为参考,自己可以根据我写的模版来进行改写套用。

下面是几个要注意的问题:

1.表单action写你自己的脚本文件名

2.如果前端html页面和处理脚本php不在一个文件夹要记得加上路径

(3)mysql的链接

连接语句:$dbc=@mysqli_connect(db_host,db_user,db_password,db_name) or die(‘could not connect to mysql:‘.mysqli_connect_error());

 

  • 如果你使用的php版本不支持mysqli_set_charset()函数就需要执行SET NAMES *ENCODING*来代替:mysqli_query($dbc,‘SET NAMES utf8‘);

 

  • 如果接收一个错误,声称mysqli_connect是一个未定义的函数,说明没有包含对Improved MySql Extension 的支持来编译PHP

 

  • 在运行脚本时,如果看到Can‘t connect....:NO conncetion could be made because the target machine activity refused it.可能是当前mysql没有运行

 转载于:https://www.cnblogs.com/yao142857/p/3555376.html

 

更多报错可以根据错误代码去百度查询,mysqli_connect_errno()函数是十分重要的。

 

2.cookie

关于cookie的含义可以百度,百度讲解比较清楚,这里不再过多陈述。这里首先要理解setcookie函数

 bool setcookie( string name[,string value][,int expire][,string path][,string domain][,bool secure][,bool httponly])

name  :  必选,表示cookie的名字。

value  :  可选,表示cookie值,存储在客户端,当为空时,表示撤销客户端中该cookie的资料(这样可以删除cookie)。

expire  :  可选,表示cookie的有效截止时间,也就是过期时间,如果没有指定或者指定为0,那么通常是在关闭浏览器时失效。

path  :  可选,cookie有效路径。

domain  :  可选,cookie有效域名。

secure  :  表示在HTTPS的安全传输时才有效。

创建一个名字为try值为hello的cookie

<?php
 setcookie("try",hello");
 ?>

获取cookie

<?php
setcookie("try","hello");
echo "cookie is ".$_COOKIE["try"];
?>

使用cookie功能来实现已登陆状态

<?php
//使用会话内存储的变量值之前必须先开启会话
session_start();
//如果会话没有被设置,查看是否设置了cookie
if(!isset($_SESSION[‘user_id‘])){
    if(isset($_COOKIE[‘user_id‘])&&isset($_COOKIE[‘username‘])){
        //用cookie给session赋值
        $_SESSION[‘user_id‘]=$_COOKIE[‘user_id‘];
        $_SESSION[‘username‘]=$_COOKIE[‘username‘];
    }
}
//使用一个会话变量检查登录状态
if(isset($_SESSION[‘username‘])){
    echo ‘You are Logged as ‘.$_SESSION[‘username‘].‘<br/>‘;
    echo ‘<a href="logOut.php"> Log Out(‘.$_SESSION[‘username‘].‘)</a>‘;
}
/**在已登录页面中,可以利用用户的session如$_SESSION[‘username‘]、
?>

这里主要理解SESSION和COOKIE的用处

3.用户登陆与注册项目实践(按照参考代码自己来进行改写)

(1)首先,我们需要在数据库里面建立一个test_usr表(名字随意只要自己理解即可,可以采用可视化工具或者使用命令语句进行插入)用于存放用户的信息(用户名密码等),这里我先初始设计一个,对自己要求高的可以试试将用户名密码以hash值来存放,这里只是入门的简单讲解就不再考虑这一方面。

 

(2)设计一个简单的login.html页面(具体格式可以根据自己喜好自行设计,需要掌握css)

php+mysql实践项目

 

(3)既然有了登陆页面自然需要加上一个对用户名用户密码进行检验的脚本,login.php

首先先解释一下session,session:当访问服务器否个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session。 (代码仅作为参考)

php+mysql实践项目

 

 php+mysql实践项目

 

 这里我们加入了一个connection.php文件来简化每一次对数据库链接的访问,下面是文件的内容

php+mysql实践项目

 

(4)注册页面要考虑到用户是否存在,不存在再将其插入数据库(代码作为参考重要的是理解后,自己再改写一部分)

<meta charset="utf-8">
<?php

    //先启动session
    session_start();

/*1.表单验证部分*/

    //获取表单提交数据
    $username=$_POST[‘username‘];
    $userpass=$_POST[‘userpass‘];
    $confirmpassword=$_POST[‘confirmpassword‘];
    $qqemail=$_POST[‘qqemail‘];
    $mobilephone=$_POST[‘mobilephone‘];
    //格式错误信息提示
    $usernameErr=$userpassErr=$confirmpasswordErr=$qqemailErr=$mobilephoneErr="";
    
    //验证姓名
    if (empty($_POST["username"])){
        $usernameErr = "名字是必需的";
        include_once(‘regist.html‘);
        die();      
    }else{
        if (!preg_match("/^[a-zA-Z ]+$/",$username)){
            $usernameErr = "只允许字母"; 
            include_once(‘regist.html‘);
            die();      
        }
    }  

    //验证密码
    if (empty($_POST["userpass"])){
        $userpassErr = "密码是必需的";
        include_once(‘regist.html‘);
        die();
    }else{
        if (!preg_match("/^[\w]{6}$/",$userpass)){
            $userpassErr = "只允许字母或数字且长度为6"; 
            include_once(‘regist.html‘);
            die();
        }
    }  

    //再次确认密码
    if (empty($_POST["confirmpassword"])){
        $confirmpasswordErr = "请确认密码";
        include_once(‘regist.html‘);
        die();
    }else{
        if ($userpass!=$confirmpassword){
            $confirmpasswordErr = "密码不一致";
            include_once(‘regist.html‘);
            die();
           }
       }

    //验证邮箱
    if (!empty($_POST["qqemail"])){
        if (!preg_match("/^[\w]+@{1}[q]{2}(\.[c]{1}[o]{1}[m]{1})$/",$qqemail)){
               $qqemailErr = "只支持QQ邮箱"; 
            include_once(‘regist.html‘);
            die();
        }
    }

    //验证手机号码
    if (!empty($_POST["mobilephone"])){
        if (!preg_match("/^[1][358]\d{9}$/",$mobilephone)){
            $mobilephoneErr = "手机号格式错误"; 
            include_once(‘regist.html‘);
            die();
        } 
    }

                                               
/*2.操作数据库部分*/

    //引用connection.php文件连接数据库
    include_once(‘connection.php‘);

    //使用预处理语句执行查询操作,判断用户是否已存在
    $stmt=$conn->prepare("select*from user where name=:name");
    //使用bind_param()函数绑定参数
    $stmt->bindParam(‘:name‘,$username);
    //为绑定的参数赋值
    $stmt->execute();
    
    if($count=$stmt->rowcount()>0){
        echo "用户已存在,请重新注册!"."<a href=‘regist.html‘>去注册</a>"."<br>";
        echo $count;
        die();
    }

    if($qqemail!=""&&$mobilephone!=""){
        //判断该用户未注册后,使用预处理语句将其插入到user表中
        $stmt=$conn->prepare("insert into user(name,pass,email,phone) values(:name,:pass,:email,:phone)");
        //使用bind_param()函数绑定参数
        $stmt->bindParam(‘:name‘,$name); 
        $stmt->bindParam(‘:pass‘,$pass); 
        $stmt->bindParam(‘:email‘,$email); 
        $stmt->bindParam(‘:phone‘,$phone);
        //为绑定的参数赋值
        $name=$username;
        $pass=$userpass;
        $email=$qqemail;
        $phone=$mobilephone;
        //执行
        $result=$stmt->execute();
        if($result){
            //插入成功后,弹出消息提示框
            echo "<script>alert(‘注册成功‘)</script>"."<br>";
        }else{
            die();
        }
    }

    if($qqemail!=""){
        //判断该用户未注册后,使用预处理语句将其插入到user表中
        $stmt=$conn->prepare("insert into user(name,pass,email) values(:name,:pass,:email)");
        //使用bind_param()函数绑定参数
        $stmt->bindParam(‘:name‘,$name); 
        $stmt->bindParam(‘:pass‘,$pass); 
        $stmt->bindParam(‘:email‘,$email);  
        //为绑定的参数赋值
        $name=$username;
        $pass=$userpass;
        $email=$qqemail;
        //执行
        $result=$stmt->execute();
        if($result){
            //插入成功后,弹出消息提示框
            echo "<script>alert(‘注册成功‘)</script>"."<br>";
        }else{
            die();
        }
    }
    
    if($mobilephone!=""){
        //判断该用户未注册后,使用预处理语句将其插入到user表中
        $stmt=$conn->prepare("insert into user(name,pass,phone) values(:name,:pass,:phone)");
        //使用bind_param()函数绑定参数
        $stmt->bindParam(‘:name‘,$name); 
        $stmt->bindParam(‘:pass‘,$pass); 
        $stmt->bindParam(‘:phone‘,$phone);  
        //为绑定的参数赋值
        $name=$username;
        $pass=$userpass;
        $phone=$mobilephone;
        //执行
        $result=$stmt->execute();
        if($result){
            //插入成功后,弹出消息提示框
            echo "<script>alert(‘注册成功‘)</script>"."<br>";
        }else{
            die();
        }
    }

    if($qqemail==""&&$mobilephone==""){
        //判断该用户未注册后,使用预处理语句将其插入到user表中
        $stmt=$conn->prepare("insert into user(name,pass) values(:name,:pass)");
        //使用bind_param()函数绑定参数
        $stmt->bindParam(‘:name‘,$name); 
        $stmt->bindParam(‘:pass‘,$pass); 
        //为绑定的参数赋值
        $name=$username;
        $pass=$userpass;
        $result=$stmt->execute();
        if($result){
            //插入成功后,弹出消息提示框
            echo "<script>alert(‘注册成功‘)</script>"."<br>";
        }else{
            die();
        }
    }
    
    $stmt=$conn->prepare("select*from user");
    //执行execute()函数返回的是一个PDOStatement对象,表示执行成功或失败
    $result=$stmt->execute();
    if($result){
        //fetch()方法用于获取结果集的下一行(fetch()方法是一行一行进行检索的),并放入到关联数组,然后通过while()循环输出结果集
        //众所周知,我们平时获取数组的值时,一般都是通过数字索引或者是其字符串键来获取的
        //结果集的返回方式通过fetch()方法的参数来控制,参数为PDO::FETCH_ASSOC,即通过列名作为数组索引来获取
        //参数为PDO::FETCH_NUM时,通过列号作为索引来获取,参数为PDO::FETCH_BOTH时,即可通过列名来获取也可通过列号来获取,不写默认为PDO::FETCH_BOTH
        //具体可以看:https://www.jb51.net/article/105797.htm或http://www.php.cn/php-weizijiaocheng-361205.html
        echo "注册用户<br>";
        while($row=$stmt->fetch()){
            echo $row[‘name‘]." " .$row[‘pass‘]." ".$row[‘email‘]." ".$row[‘phone‘]."<br>";
            // echo $row[‘0‘]." " .$row[‘1‘]." ".$row[‘2‘]." ".$row[‘3‘]."<br><br>";
        }
        //输出结果集中的行数
        echo "注册人数为:".$count=$stmt->rowcount()."<br>";
    }
    

    //关闭数据库连接,释放资源
    $conn=null;
    session_destroy();

?>

详细讲解参考:https://blog.csdn.net/weixin_42950079/article/details/86563363ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%94%A8%E6%88%B7%E7%99%BB%E9%99%86%E6%B3%A8%E5%86%8C%E7%BD%91%E7%AB%99php&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-86563363

 

 

 

php+mysql实践项目

上一篇:MSSQL系列 (二):表相关操作、列操作、(唯一、主键、默认、检查、外键、非空)约束、临时表


下一篇:python+flask数据库增删改查