1. 程式人生 > 實用技巧 >php+mysql實踐專案

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