php血筑,又稱超文本預(yù)處理器绘沉,是在服務(wù)器端執(zhí)行的腳本語言, Hypertext Preprocessor。
訪問過服務(wù)器的標(biāo)志:訪問的時候要有協(xié)議(http)豺总。協(xié)議车伞,網(wǎng)絡(luò)協(xié)議的簡稱,網(wǎng)絡(luò)協(xié)議是通信計算機(jī)雙方必須共同遵從的一組約定喻喳。
網(wǎng)址組成:協(xié)議 - 域名 - 路徑 - 數(shù)據(jù) - 錨點(diǎn) - 端口號(被瀏覽器省略了)
https(協(xié)議)://www.reibang.com(域名)/u/a.html(路徑)?a=1&b=2(數(shù)據(jù))#top(錨點(diǎn)) :80(端口號)另玖,
此路徑不存在,我自己編的,嘻嘻~~~,為了效果(懶得找).
自己電腦上也可以使用軟件來模擬服務(wù)器,網(wǎng)上提供了很多這樣的軟件表伦,我選用phpstudy谦去。這個軟件中集成了Apache服務(wù)器、MySql數(shù)據(jù)庫和PHP編譯器绑榴。每個服務(wù)要運(yùn)行起來哪轿,都需要開啟服務(wù)。Apache和MySql都需要開啟翔怎。php編譯器不需要窃诉,因為他不是一個服務(wù)。
phpstudy安裝的時候赤套,安裝路徑不能有中文漢字和空格字符飘痛。 強(qiáng)烈建議直接放在某個盤下,
自己訪問自己:localhost 或者 127.0.0.1 或者本機(jī)IP地址 -- 代表WWW文件夾
- 使用http訪問文件,都要放在WWW的文件夾中
- 提前開啟phpstudy容握,否則訪問不到
- 文件名和文件夾名不允許出現(xiàn)空格和中文
- 訪問文件宣脉,必須使用域名或者ip地址
文件后綴是php,其中的代碼放在一個結(jié)構(gòu)中:<?php
開頭 剔氏,?>
結(jié)尾塑猖,每行結(jié)束必須有;
注釋和js中使用一致竹祷。
設(shè)置phpstudy擁有目錄列表
打開phpStudy - 其他選項菜單 - phpStudy設(shè)置 - 允許目錄列表
效果:
js 連接php
1.form表單直接連接:<form action="路徑 " method="post/get"></form>
<form action="../login.php" method="post"></form>
2. 創(chuàng)建ajax 連接PHP,客戶端向服務(wù)器發(fā)起請求(Request)
ajax 異步的js和xml,async javascript and xml
作用:在不刷新頁面的情況,發(fā)送http請求
(1)設(shè)置get請求連接
// 1.創(chuàng)建ajax對象 - 創(chuàng)建一部電話
var xhr = new XMLHttpRequest();
// console.log(xhr);
// 2.打開連接 - 拿起電話羊苟,點(diǎn)擊號碼
xhr.open('get','demo.php?id=1',true); // 第三個參數(shù)是布爾值塑陵,表示是否異步,發(fā)送的數(shù)據(jù)在?后
// 3.發(fā)送請求
xhr.send();
// 發(fā)送請求的時候可以攜帶數(shù)據(jù) - 以字符串的形式發(fā)送
// xhr.send();
// 4.監(jiān)聽請求狀態(tài) - 等待接聽
xhr.onreadystatechange = function(){
// 判斷xhr的狀態(tài)(0~4 4的時候就圓滿完成)和請求的狀態(tài) - 200
if(xhr.readyState===4 && xhr.status==200){
// 接收響應(yīng)數(shù)據(jù)
let res = xhr.responseText;
// console.log(res);
console.log(456);
}
}
(2)設(shè)置post請求連接
var xhr = new XMLHttpRequest();
xhr.open("post","../login.php");
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
xhr.send(`username=${username}&password=${password}`);
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200){
var res = xhr.responseText;
res = JSON.parse(res);
// console.log(res);
if(res.meta.status===201){
alert(res.meta.msg);
location.href = "home.html";
}else{
alert(res.meta.msg);
return false;
}
}
}
PHP接收js傳送數(shù)據(jù),,服務(wù)器向客戶端發(fā)起相應(yīng)(Reponse)
user-agent: Mozilla/5.0 # 產(chǎn)生請求的瀏覽器信息
accept: application/json # 表示客戶端希望接受的數(shù)據(jù)類型
Content-Type: application/x-www-form-urlencoded # 客戶端發(fā)送的實體數(shù)據(jù)格式
Host: 127.0.0.1 # 請求的主機(jī)名(IP)
常見的請求方式:
- GET: 查
- POST: 增
- PUT: 改
- DELETE: 刪
GET和POST的區(qū)別
- get請求的數(shù)據(jù)會顯示在地址欄蜡励,post的數(shù)據(jù)不顯示
- get請求的數(shù)據(jù)大小有限制:
- IE: 2083 個字符
- FireFox: 65536 個字符
- Safari: 80000 個字符
- Opera: 190000 個字符
- Chrome: 8182 個字符
post請求的數(shù)據(jù)沒有限制令花,除非服務(wù)器主動設(shè)置。
- get請求的數(shù)據(jù)類型必須是ASCII凉倚,post沒有限制
- get相對不安全兼都,post相對安全
get請求接收數(shù)據(jù),GET 請求是沒有請求體數(shù)據(jù)的
<?php
header("content-type:text/html;charset=utf8");
// 接收傳過來的省份id
$id = $_GET["id"];
$con = mysqli_connect("localhost","root","root","test");
mysqli_query($con,"set names utf8");
$res = mysqli_query($con,"select * from region where pid=$id");
$arr = [];
while($row = mysqli_fetch_assoc($res)){
$arr[] = $row;
}
echo json_encode($arr);
post 請求接收數(shù)據(jù),POST 請求有請求體數(shù)據(jù)
header("content-type:text/html;charset=utf8");
// 接收數(shù)據(jù)
// var_dump($_POST);
$username = $_POST["username"];
$password = $_POST["password"];
// var_dump($username,$password);
$con = mysqli_connect("localhost","root","root","test");
$sql = "select * from user where username='$username'";
$res = mysqli_query($con,$sql);
// 從中提取一條數(shù)據(jù)來驗證
$row = mysqli_fetch_assoc($res);
if($row){
// 用戶名存在
// 驗證密碼是否正確
echo '<script>
alert("登陸成功");
location.href = "home.html";
</script>';
}
php輸出方式
echo 1; // 文本方式輸出,輸出基本類型
echo("6");
var_dump(1); // int(1) 稽寒;基本類型和復(fù)雜類型都能輸出扮碧;類似于console.log 程序員用
header("content-type:text/html;charset=utf8"); // 設(shè)置編碼 中文會亂碼
print("世界你好"); // 輸出簡單類型
print_r("PHP你好"); // 可輸出復(fù)雜類型
變量
使用$來定義變量
$a = 10;
字符串
單引號只能輸出純字符串,雙引號可以輸出變量
$a = 5;
echo("$a"); // 5
echo '$a'; // $a
數(shù)組:
$arr = [
"name"=>"張三",
"age"=>"12"
];
$brr = [3,"57","9"];
var_dump($arr); // array(2) { ["name"]=> string(6) "張三" ["age"]=> string(2) "12" } 每個漢字占三個字符串
var_dump($brr); // array(3) { [0]=> int(3) [1]=> string(2) "57" [2]=> string(1) "9" }
// 遍歷
$arr = [
"name"=>"張三是大眾人物",
"age"=>"12"
];
foreach($arr as $a){ // 遍歷值
echo "$a";
}; // 張三是大眾人物12
foreach($arr as $c => $b){ // 遍歷鍵值
echo "$c - $b";
}; // name - 張三是大眾人物age - 12
$str = json_encode($brr); // 將數(shù)組轉(zhuǎn)為字符串
echo $str; // {"name":"\u5f20\u4e09\u662f\u5927\u4f17\u4eba\u7269","age":"12"}
$crr = json_decode($str,true); // json字符串轉(zhuǎn)化為數(shù)組
var_dump($crr); // array(2) { ["name"]=> string(21) "張三是大眾人物" ["age"]=> string(2) "12" }
字符串拼接
$e = 5 . 90;$a = "6" . 90;echo $a,$e; // 690590
echo("<meta charset='utf-8'>"); // 可定義字符串引用類型瓦胎,但作為數(shù)據(jù)芬萍,不推薦
echo "<b>你好世界"; // 你好世界 加粗這里都是單標(biāo)簽引用
<?php
// echo '<b>hello world</b>';
// echo '<meta charset="utf-8">';
header("content-type:text/html;charset=utf8");
// echo '你好世界';
// 連接數(shù)據(jù)庫
// 1.創(chuàng)建連接
$con = mysqli_connect('localhost','root','root','test');
// // var_dump($con);
// // 2.執(zhí)行增刪改查的命令語句
$res = mysqli_query($con,'select * from personInfo');
echo '<pre>'; // 變得容易看一點(diǎn)
var_dump($res);
// 3.從這個結(jié)果拿出能看懂的數(shù)據(jù) - 從結(jié)果中拿出第一條數(shù)據(jù)
$row = mysqli_fetch_assoc($res);
$row1 = mysqli_fetch_assoc($res);
$row2 = mysqli_fetch_assoc($res);
$row3 = mysqli_fetch_assoc($res);
echo "<pre>";
print_r($row);
$arr = [];
while($row = mysqli_fetch_assoc($res)){
$arr[] = $row;
}
echo '<pre>';
print_r($arr);
/*
查詢:
1.連接數(shù)據(jù)庫
連接 = mysqli_connect(主機(jī)名,用戶名,密碼,要連接數(shù)據(jù)庫名稱)
連接成功返回一個object,連接失敗返回false
2.執(zhí)行命令語句
結(jié)果 = mysqli_query(連接,字符串命令語句)
查詢成功返回object搔啊,查詢失敗了false
3.從結(jié)果中提取數(shù)據(jù)
一行數(shù)據(jù) = mysqli_fetch_assoc(結(jié)果) - 最終的數(shù)據(jù)是一個數(shù)組
*/
// 增
// 1.連接數(shù)據(jù)庫
$con = mysqli_connect("localhost","root","root","test");
// 2.執(zhí)行命令語句
$res = mysqli_query($con,"insert personInfo(name,age,aid) values('吳九',19,3)");
// 執(zhí)行增、刪北戏、改的語句负芋,執(zhí)行結(jié)束的結(jié)果是一個布爾值,成功為true嗜愈,失敗為false
if($res){
echo '成功';
}else{
echo '失敗';
}
// 改
// 1.連接數(shù)據(jù)庫
$con = mysqli_connect("localhost","root","root","test");
// 2.執(zhí)行語句
$res = mysqli_query($con,"update personInfo set name='周扒皮' where id=6");
if($res){
echo '成功';
}else{
echo '失敗';
}
// 刪
$con = mysqli_connect("localhost","root","root","test");
// $res = mysqli_query($con,"delete from personInfo where id=8");
$res = mysqli_query($con,"delete from personInfo");
if($res){
echo '成功';
}else{
echo '失敗';
}
為了(提高逼格)更容易看,通常情況下響應(yīng)的數(shù)據(jù)格式:
{
meta:{
status:狀態(tài)碼,
msg:"提示信息"
},
data:null
}
直接用這個格式替換echo "失敗";
if($res){
// 注冊成功
$arr = [
"meta"=>[
"status"=>201,
"msg"=>"注冊成功"
],
"data"=>null
];
}else{
// 注冊失敗
$arr = [
"meta"=>[
"status"=>301,
"msg"=>"注冊失敗"
],
"data"=>null
];