###### tags: `PHP` # **1212 蕭幫PHP教學** 基本表單結構 form.php 【POST】 === ```html= #POST是傳出資料的方式,另有較為常用的GET #action則是將資料送到該檔案,由該檔案進行後續處理 <form method="POST" action="main.php"> <div class="form-group"> #name代表的是該資料的欄位的名稱 <input name="text" type="text" class="form-control form-control-lg" placeholder="請輸入文字"> </div> <div> #type必須為submit,才能送出表單內的資料 <button type="submit" class="btn btn-primary btn-lg btn-block">送出</button> </div> #所有需要送出的資料都必須包含在form內 </form> ``` 在前端輸入完資料後,以POST的方式傳至後端的接取方式如下 ```php= <?php $text = $_POST['text']; #POST傳來的資料會暫存在$_POST['name'] echo $text; #echo 是PHP中最直接的輸出方式 ?> ``` 基本表單結購 form.php 【GET】 === ```html= <div class="main position-relative container col-lg-3 border "> <!-- 表單 --> <form method="GET" action="main.php"> <div class="form-group"> <input name="text" type="text" class="form-control form-control-lg" placeholder="請輸入文字"> </div> <div> <button type="submit" class="btn btn-primary btn-lg btn-block">送出</button> </div> </form> </div> ``` GET是帶著資料到後端,明顯的區別便是GET所攜帶的資料會顯示在網址 ```php= <?php $text = $_GET['text']; #GET傳來的資料會暫存在$_GET['name'] echo $text; #攜帶的資料會出現在?之後 //http://127.0.0.1/PHPclass/practice/main.php?text=1123 ?> ``` 資料庫 === - 資料庫名稱 phpclass - 表單 user - ID int(5) AUTO_INCREMENT - account varchar(25) utf8_general_ci - name varchar(5) - nickname varchar(10) - sex char(1) - birthday date - mail varchar(25) - address varchar(50) - 表單 detail - account - password varchar(18) - uni varchar(255) - active varchar(2) - time date - 資料庫名稱 test - 表單 table - S1 varchar(255) - S2 varchar(255) - S3 varchar(255) - S4 varchar(255) - S5 varchar(255) # 連接資料庫 db_connect.php 將連接資料庫的語法寫成一個function,方便調用 ```php= <? session_start(); function filterTable($query) { $dbType = 'MySQL'; $host = 'localhost'; $dbName = 'phpclass'; $userName = 'root'; $pwd = '0000'; $dbh = mysqli_connect($host, $userName, $pwd, $dbName) or die("Error " . mysqli_error($dbh)); //$dbh = mysqli_connect($host, $userName, $pwd, $dbName); mysqli_query($dbh, "SET NAMES 'utf8'"); $filter_Result = mysqli_query($dbh, $query); return $filter_Result; } function _fetch_array($sql) { // mysqli_connect('localhost','root','','darkcalamity'); return mysqli_fetch_array(filterTable($sql)); } function _alert($str,$path){ echo "<script> alert(\"$str\");parent.location.href='$path';</script>"; } ?> } ``` 資料庫語法 === - CRUD 資料庫四大功能 - C → Creat 新增 - INSERT INTO `表單名`(`欄位名`) VALUES('".$data."') WHERE 條件式 - R → Read 讀取 - SELECT `欄位名` FROM `表單名` WHERE 條件式 - U → Update 更新 - UPDATE `表單名` SET `欄位名` = `$data` WHERE 條件式 - D → Delete 刪除 - DELETE FROM `表單名` WHERE 條件式 Query練習 practice.php === - HTML ```html= <form method="POST" action="main.php"> <div class="form-group"> <input name="text1" type="text" class="form-control form-control-lg" placeholder="請輸入text1"> </div> <div class="form-group"> <input name="text2" type="text" class="form-control form-control-lg" placeholder="請輸入text2"> </div> <div class="form-group"> <input name="text3" type="text" class="form-control form-control-lg" placeholder="請輸入text3"> </div> <div class="form-group"> <input name="text4" type="text" class="form-control form-control-lg" placeholder="請輸入text4"> </div> <div class="form-group"> <input name="text5" type="text" class="form-control form-control-lg" placeholder="請輸入text5"> </div> <div> <button type="submit" class="btn btn-primary btn-lg btn-block">送出</button> </div> </form> ``` - INSERT INTO `表單名`(`欄位名`) VALUES('".$data."') WHERE 條件式 ```php= <?php include "db_connect.php"; if(isset($_POST['new'])){ $text1 = $_POST['text1']; $text2 = $_POST['text2']; $text3 = $_POST['text3']; $text4 = $_POST['text4']; $text5 = $_POST['text5']; $sql = "INSERT INTO `wow`(`s1`,`s2`,`s3`,`s4`,`s5`) VALUES('".$text1."','".$text2."','".$text3."','".$text4."','".$text5."')"; filterTable($sql); } ?> ``` - SELECT `欄位名` FROM `表單名` WHERE 條件式 ```php= $sql1 = "SELECT * FROM `wow` WHERE `s1` = '1' "; $result =filterTable($sql1); $row = mysqli_fetch_array($result); //將結果變為陣列 print_r($row); ``` - UPDATE `表單名` SET `欄位名` = `$data` WHERE 條件式 ```php= if(isset($_POST['fix'])){ $text1 = $_POST['text1']; $text2 = $_POST['text2']; $text3 = $_POST['text3']; $text4 = $_POST['text4']; $text5 = $_POST['text5']; $fix = $_POST['fix_value']; $sql2 = "UPDATE `wow` SET `s1`= '$text1', `s2`= '$text2', `s3`= '$text3', `s4`= '$text4', `s5`= '$text5' WHERE `s1` = '$fix'"; filterTable($sql2); } ``` - DELETE FROM `表單名` WHERE 條件式 ```php= if(isset($_POST['del'])){ $text1 = $_POST['text1']; $text2 = $_POST['text2']; $text3 = $_POST['text3']; $text4 = $_POST['text4']; $text5 = $_POST['text5']; $del = $_POST['del_value']; $sql3 = "DELETE FROM `wow` WHERE `s1` = '$del'"; filterTable($sql3); } ``` # 實作 註冊→登入→會員中心 # Register.php - 一、將要傳值的表單完成 - uniqid() 以為秒計的當前時間,生成一個唯一的ID ```php= <?php $uni = sha1(uniqid(rand(),true)); //唯一標識符 ?> <input type="hidden" name="uni" value="<?php echo $uni;?>" /> ``` - 二、到main.php準備接資料 ```php= if(isset($_POST['register'])){ /*註冊*/ /*********接收資料***********/ $name = $_POST['name']; $nickname = $_POST['nickname']; $account = $_POST['account']; $password = $_POST['password']; $checkPassword = $_POST['checkPassword']; $sex = $_POST['sex']; $birthday=$_POST['year'].'/'.$_POST['month'].'/'.$_POST['day']; /*將日期合併*/ $mail = $_POST['mail']; $address = $_POST['address']; $uni = $_POST['uni']; $time = date("Y-m-d",time()); /******************************/ /********* 將資料寫進資料庫 *********/ $sql1="INSERT INTO user(`account`,`name`,`nickname`,`sex`,`birthday`,`mail`,`address`) VALUES('".$account."','".$name."','".$nickname."','".$sex."','".$birthday."','".$mail."','".$address."')"; $sql2="INSERT INTO detail(`account`,`password`,`uni`,`time`) VALUES ('".$account."','".$password."','".$uni."','".$time."')"; filterTable($sql1); filterTable($sql2); _alert('註冊成功!','login.php'); /*************************************/ } ``` # Login.php - 一、將要傳出的表單完成 - checkCode.php - 產生一組驗證碼圖片 - SESSION 全域變數 - 基本用法 ```php= session_start(); $_SESSION['test'] = 'abc'; ``` - 二、到main.php準備接資料 ```php= if(isset($_POST['login'])){ /*登入*/ /*接收資料*/ $account = $_POST['account']; $pwd = $_POST['password']; $check = $_POST['check']; /**********/ /******* 登入判斷 ******/ $SQL1="SELECT `account` FROM `detail` WHERE `account` = '".$account."' AND `password` ='".$pwd."'"; /*與資料庫核對有無此帳號與密碼*/ if($check==$_SESSION['checkNum']){ $result=_fetch_array($SQL1); if($result!=""){ $_SESSION['user'] = $account; _alert('登入成功!','member.php'); }else{ _alert('登入失敗!','login.php'); } }else{ _alert('驗證碼錯誤!','login.php'); } /*************************/ _alert('登入成功!','member.php'); // print_r($result); } ``` # 修改XAMPP的mysql密碼 C:\xampp\phpMyAdmin\config.inc.php ```php= /* Authentication type and info */ $cfg['Servers'][$i]['auth_type'] = 'http'; <-改成http $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = '●●●●●●'; <-填入剛剛輸入的密碼 $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['AllowNoPassword'] = true; $cfg['Lang'] = ''; ``` # Dark Theme CSS {%hackmd theme-dark %}