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)

 

(3)既然有了登陸頁面自然需要加上一個對用戶名用戶密碼進行檢驗的腳本,login.php

首先先解釋一下session,session:當訪問服務器否個網頁的時候,會在服務器端的內存里開辟一塊內存,這塊內存就叫做session,而這個內存是跟瀏覽器關聯在一起的。這個瀏覽器指的是瀏覽器窗口,或者是瀏覽器的子窗口,意思就是,只允許當前這個session對應的瀏覽器訪問,就算是在同一個機器上新啟的瀏覽器也是無法訪問的。而另外一個瀏覽器也需要記錄session的話,就會再啟一個屬於自己的session。 (代碼僅作為參考)

 

 

 

 這里我們加入了一個connection.php文件來簡化每一次對數據庫鏈接的訪問,下面是文件的內容

 

(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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM