久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

PHP數(shù)據(jù)庫的 增 刪 查

 goodwangLib 2019-01-21

一、匹配數(shù)據(jù)庫登錄

步驟:

1.做一個(gè)普通的登錄界面,,注意提交方式為post,。

復(fù)制代碼
復(fù)制代碼
<!--登錄界面-->
<form action="chuli.php" method="post"><!--表單提交action到chuli界面,提交方式設(shè)置為post,。-->

<div>用戶名:<input type="text"  name="uid"/></div> <!--用戶名輸入框-->
<div>密碼:<input type="password" name="pwd" /></div> <!--密碼輸入框-->
<div><input type="submit" value="登錄" /></div>

</form>
復(fù)制代碼
復(fù)制代碼

 

2.用php匹配用戶輸入的用戶名和密碼

(1)**下面方法存在可以被SQL注入攻擊的危險(xiǎn),,安全性太低,要記住這種攻擊的原理,,在以后的工作中切記不能這樣匹配登錄信息,。

復(fù)制代碼
復(fù)制代碼
<!--把html代碼全部刪除,做一個(gè)純php處理界面-->
<?PHP
$uid = $_POST["uid"];//預(yù)定義數(shù)組_POST取跳轉(zhuǎn)頁面?zhèn)鬟f過來的數(shù)據(jù),,也就是取text界面中用戶名和密碼輸入的值,。把取到的值交給變量$uid
$pwd = $_POST["pwd"];//取到的密碼交給變量$pwd

//取到這兩個(gè)值之后,就要去判斷用戶名和密碼是否匹配成功,。

//造連接對象
$db = new MySQLi("localhost","root","666","text1");

//判斷是否連接成功
mysqli_connect_error()?die("連接失敗"):"";


//使用數(shù)據(jù)庫中的login表驗(yàn)證
//寫SQL語句
//SQL注入攻擊
$sql = "select count(*) from login where username='{$uid}' and password='{$pwd}'";//查詢有幾條數(shù)據(jù)可以匹配成功,,等于0則沒有,大于0則匹配成功,。'{$pwd}'中''是說明這是一個(gè)字符串,,外面有"",這里就要用'',,{}是為了特殊說明這里是一個(gè)變量,。

//執(zhí)行sql語句
$result = $db->query($sql);//返回結(jié)果集對象
$n = $result->fetch_row();//這里的$result是一個(gè)對,存到變量$n里面,。
if($n[0]>0)//n>0代表能夠匹配到,,就能夠登陸成功。然后跳轉(zhuǎn)到主頁面,。在外部再建一個(gè)主頁面main.php.$n是一個(gè)數(shù)組,,要取里面的元素來判斷。
{
    header("location:main.php");//header方法表示跳轉(zhuǎn)頁面,,()里面寫location,,冒號,,跳轉(zhuǎn)頁面的名稱。
}
else//如果匹配不成功
{
    echo "用戶名或密碼錯(cuò)誤";//輸出 用戶名或密碼錯(cuò)誤
}

//上面的方法能夠?qū)崿F(xiàn)匹配數(shù)據(jù)庫的功能,,但是做登錄$sql語句一般不能這么寫,,需要?jiǎng)e的方法寫$sql語句,因?yàn)檫@種$sql語句做登錄不安全,。比如說在登錄名和密碼欄里都輸入a' or '1'='1也能跳轉(zhuǎn)到主頁面,,可以破解這種登錄方法,稱為SQL注入攻擊,,其原理是通過輸入特定的字符串來修改sql語句,,原來sql語句的意思完全變了。
復(fù)制代碼
復(fù)制代碼

 

(2).用php匹配用戶輸入的用戶名和密碼

  防止SQL注入攻擊的方法:針對php來說的話,,要么優(yōu)化自己寫的語句,,要么把用戶輸入的內(nèi)容處理一下,永遠(yuǎn)不要相信用戶的任何輸入數(shù)據(jù),,這是做程序的常識,。

  處理用戶輸入內(nèi)容是先自己寫一個(gè)函數(shù)去判斷用戶輸入的內(nèi)容里面有沒有特殊符號,像or,、and,、‘’等。如果有的話就去掉,。

  后面還會(huì)學(xué)另一種方法pdo提供的一種方式,是最好的解決方案,,其方法是先把這條sql語句分兩次發(fā)動(dòng)給服務(wù)器,,第一次發(fā)送寫好的sql語句框架,變量先不發(fā)送,,mysql數(shù)據(jù)庫接收到以后先等待執(zhí)行,,然后再把用戶輸入的內(nèi)容提交過去,這樣就把字符串拆開了,,后來給的內(nèi)容就是要查的內(nèi)容,,數(shù)據(jù)庫就會(huì)原樣的去匹配。

  我們下面采用優(yōu)化sql語句的方法來防止注入攻擊,。sql語句換一種寫法,。

復(fù)制代碼
復(fù)制代碼
$db = new MySQLi("localhost","root","666","text1");
mysqli_connect_error()?die("連接失敗"):"";
$sql = "select password from login where username='{$uid}'";//先根據(jù)uid找到對應(yīng)的密碼,這樣最多只能找到一條數(shù)據(jù),。這樣fetch_row()最多能取到1列,。
//執(zhí)行sql語句
$result = $db->query($sql);
$n = $result->fetch_row();
if($uid !="" && $pwd !="")//防止出現(xiàn)代碼下面所說的bug。
{
    if($n[0]==$pwd)//判斷從數(shù)據(jù)庫中找到的密碼和用戶輸入的密碼是不是一樣,。
    {
        header("location:main.php");//如果相等局跳轉(zhuǎn)
    }
    else
    {
        echo "用戶名或密碼錯(cuò)誤";//如果不相等就出現(xiàn)提示
    }
}
else//如果用戶名或者密碼不輸入彈出的信息
{
    echo "用戶名或密碼不能為空";
}
//這樣寫的優(yōu)點(diǎn)就是不管用戶名怎么寫,,密碼就是固定的密碼,。驗(yàn)證兩個(gè)密碼是不是一樣。
//這種方法還會(huì)有個(gè)bug就是用戶名和密碼都輸入錯(cuò)誤也能登陸,,因?yàn)閿?shù)據(jù)庫中沒有改用戶名就會(huì)輸出null,,密碼輸錯(cuò)了也會(huì)返回null,正好會(huì)匹配上,。這樣就在外面再加上一個(gè)if判斷輸入的內(nèi)容是不是空的,,如果是空的就彈出提示信息。
復(fù)制代碼
復(fù)制代碼

 

二,、將數(shù)據(jù)庫中info表中的信息以表格的相識顯示在頁面中

(1)在網(wǎng)頁上顯示出數(shù)據(jù)

復(fù)制代碼
復(fù)制代碼
<table width="100%" border="1" cellpadding="0" cellspacing="0">
    <tr><!--做表頭-->
        <td>代號</td>
        <td>姓名</td>
        <td>性別</td>
        <td>民族</td>
        <td>生日</td>
    </tr>
復(fù)制代碼
復(fù)制代碼
<?php //做表的內(nèi)容,,嵌入php代碼
    //造連接對象
    $db = new MySQLi("localhost","root","666","text1");
    //寫sql語句
    $sql = "select *from info";
    //執(zhí)行sql語句
    $result = $db->query($sql);
    //讀數(shù)據(jù),返回一個(gè)二維數(shù)組
    $attr = $result->fetch_all();
    //將二維數(shù)組里面的數(shù)據(jù)顯示出來
    foreach($attr as $v)
    {
        echo"<tr>";
        
        echo"<td>{$v[0]}</td><td>{$v[1]}</td><td>{$v[2]}</td><td>{$v[3]}</td><td>{$v[4]}</td>";//當(dāng)行數(shù)比較多時(shí)者采用下面的寫法,。
        /*foreach($v as $v1)//$v1就是變量了,,二不是數(shù)組了。
        {
            echo "<td>{$v1}</td>";
        }*/
        echo"</tr>";
    }
    
    ?>
復(fù)制代碼
復(fù)制代碼
</table> 
<!--以上代碼會(huì)顯示出info表的信息,,但是sex欄顯示的是0或1,,而不是男或女,nation欄顯示的也是民族的代號-->
復(fù)制代碼
復(fù)制代碼

 

(2)網(wǎng)頁表格中的性別顯示為男,、女和民族欄顯示出民族的名稱

  只更改php中的代碼,,其它地方的代碼不變。

復(fù)制代碼
復(fù)制代碼
<?php
    $db = new MySQLi("localhost","root","666","text1");
    
    $sql = "select *from info";
   
    $result = $db->query($sql);
    
    $attr = $result->fetch_all(); 
    foreach($attr as $v)
    {
        echo"<tr>";
        
        $sex = $v[2]?"男":"女";//$v[2]里面顯示的是sex,,內(nèi)容是0和1,,現(xiàn)在要轉(zhuǎn)化為男和女。最簡單的是用三元運(yùn)算符寫,。用變量$sex接收,,然后把$sex放到表格中替換$v[2]。就會(huì)顯示男女了,。
        
        //$v[3]是民族的那一列,nation有另外一張表,,要根據(jù)民族代號查詢民族名稱。上面鏈接對象已經(jīng)造好了,,不需要再鏈接數(shù)據(jù)庫了,,用同一個(gè)連接就可以。直接寫sql語句
        $sname = "select name from nation where code='{$v[3]}'";//根據(jù)民資代號查詢民族名稱
        $rname = $db->query($sname);//返回結(jié)果集
        $aname = $rname->fetch_row();//返回一個(gè)數(shù)組,$aname[0]里面就是存的民族名稱,,直接代替$v[3]. 
        echo"<td>{$v[0]}</td><td>{$v[1]}</td><td>{$sex}</td><td>{$aname[0]}</td><td>{$v[4]}</td>";
        /*foreach($v as $v1)//$v1就是變量了,,二不是數(shù)組了。
        {
            echo "<td>{$v1}</td>";
        }*/
        echo"</tr>";
    }
    ?>
復(fù)制代碼
復(fù)制代碼

  如果覺得顯示民族的代碼寫在foreach里面顯得太亂,,還可以封裝一個(gè)函數(shù),,調(diào)用這個(gè)函數(shù)來顯示民的名稱,具體寫法如下,,也是只寫php里面的代碼,。

復(fù)制代碼
復(fù)制代碼
<?php 
    $db = new MySQLi("localhost","root","666","text1");
   
    $sql = "select *from info";
   
    $result = $db->query($sql);
   
    $attr = $result->fetch_all();
   
    foreach($attr as $v)
    {
        echo"<tr>";
        
        $sex = $v[2]?"男":"女";//$v[2]里面顯示的是sex,,內(nèi)容是0和1,現(xiàn)在要轉(zhuǎn)化為男和女,。最簡單的是用三元運(yùn)算符寫,。用變量$sex接收,然后把$sex放到表格中替換$v[2],。就會(huì)嫻熟男女了,。    
        
        //根據(jù)民族代號查詢民族名稱
        $name = NationName($v[3]);//調(diào)用封裝的函數(shù),根據(jù)民族代號顯示出民族名稱,。
        
        echo"<td>{$v[0]}</td><td>{$v[1]}</td><td>{$sex}</td><td>{$name}</td><td>{$v[4]}</td>";
        /*foreach($v as $v1)//$v1就是變量了,,二不是數(shù)組了。
        {
            echo "<td>{$v1}</td>";
        }*/
        echo"</tr>";
    }
    
    //封裝下面的函數(shù),,這個(gè)函數(shù)的作用是給一個(gè)民族代號,,返回民族名稱。
    function NationName($code)
    {
        $db = new MySQLi("localhost","root","666","text1");
        $sql = "select name from nation where code = '{$code}'";
        $result = $db->query($sql);
        $attr = $result->fetch_row();
        return $attr[0];
    }
    ?>
復(fù)制代碼
復(fù)制代碼

 

(3)對表格增加刪除的功能,,每行后面都加一個(gè)刪除按鈕,,點(diǎn)擊后從數(shù)據(jù)庫中刪除該條數(shù)據(jù)。

  main.php頁面中的代碼如下:(后面帶注釋的就是需要修改的)

復(fù)制代碼
復(fù)制代碼
<table width="100%" border="1" cellpadding="0" cellspacing="0">
    <tr><!--做表頭-->
        <td>代號</td>
        <td>姓名</td>
        <td>性別</td>
        <td>民族</td>
        <td>生日</td>
        <td>操作</td><!--添加一列,,做刪除列-->
    </tr>
復(fù)制代碼
復(fù)制代碼
<?php 
    
    $db = new MySQLi("localhost","root","666","text1");
    
    $sql = "select *from info";
    
    $result = $db->query($sql);
    
    $attr = $result->fetch_all();
    
    foreach($attr as $v)
    {
        echo"<tr>";
        
        $sex = $v[2]?"男":"女";
        
        $name = NationName($v[3]);
        
        echo"<td>{$v[0]}</td><td>{$v[1]}</td><td>{$sex}</td><td>{$name}</td><td>{$v[4]}</td><td><a href='shanchu.php?c={$v[0]}' onclick=\"return confirm('確定刪除嗎,?')\">刪除</a></td";
//這里也要加一列,里面加刪除,。在刪除外層添加一個(gè)<a>標(biāo)簽,,‘刪除’變成了超鏈接。點(diǎn)擊刪除后頁面跳轉(zhuǎn)到另一個(gè)頁面chuli.php處理 // onclick=\"return confirm('確定刪除嗎,?')代表的是刪除之前會(huì)彈出提示信息,,確認(rèn)或者取消,留給用戶后悔的余地,。onclick事件先于跳轉(zhuǎn)頁面執(zhí)行,,confirm是彈出一個(gè)帶有確認(rèn)或者刪除的和用戶交互的對話框,,點(diǎn)擊確定就會(huì)返回true繼續(xù)執(zhí)行,,點(diǎn)擊取消就會(huì)返回flase停止執(zhí)行。confirm()里面填寫的信息就會(huì)出現(xiàn)在彈出的對話框里面,,用于提醒用戶,。無論是使用的<a>標(biāo)簽或者是按鈕,都可以使用這句話,。 /*foreach($v as $v1) { echo "<td>{$v1}</td>"; }*/ echo"</tr>"; } function NationName($code) { $db = new MySQLi("localhost","root","666","text1"); $sql = "select name from nation where code = '{$code}'"; $result = $db->query($sql); $attr = $result->fetch_row(); return $attr[0]; } ?>
復(fù)制代碼
復(fù)制代碼
</table>
復(fù)制代碼
復(fù)制代碼

 

shanchu.php頁面中的代碼:

復(fù)制代碼
復(fù)制代碼
<?php //做刪除頁面,,這種頁面是不讓用戶看到的頁面,把html代碼全部刪掉,。
$code = $_GET["c"];//取出來傳過來的值,,傳的c,,就取c的值。把c的值放在主鍵code里面,。
//造連接對象
$db = new MySQLi("localhost","root","666","text1");
$sql = "delete from info where code='{$code}'";//根據(jù)傳過來的值刪除數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)
$r = $db->query($sql);
if($r)
{
    header("location:main.php");//如果執(zhí)行成功,,就跳轉(zhuǎn)到主頁面main.php
}
else
{
    echo "刪除失敗";
}
復(fù)制代碼
復(fù)制代碼

 

(4)對表格增加添加功能

a.先在main.php頁面里面添加一個(gè)添加數(shù)據(jù)的按鈕,寫在table后面就可以,。點(diǎn)擊添加數(shù)據(jù)按鈕后跳轉(zhuǎn)到頁面add.php,。

<a href="add.php"><input type="button" value="添加數(shù)據(jù)" /></a><!--做一個(gè)添加按鈕,點(diǎn)擊添加數(shù)據(jù),,跳轉(zhuǎn)到add.php頁面執(zhí)行,。-->

 

b.做一個(gè)add.php頁面,該頁面是讓用戶填寫要添加的數(shù)據(jù),,下方有“添加”的提交按鈕,,點(diǎn)擊“提交”按鈕跳轉(zhuǎn)到addchuli.php頁面。但是在填寫數(shù)據(jù)時(shí),,性別要填寫0或者1,,民族要填寫民族代號,后面會(huì)有解決方法,。

復(fù)制代碼
復(fù)制代碼
<!--做添加的界面-->
<form action="addchuli.php" method="post">
    <div>代號:<input type="text" name="code" /></div>
    <div>姓名:<input type="text" name="name" /></div>
    <div>性別:<input type="text" name="sex" /></div>
    <div>民族:<input type="text" name="nation" /></div>
    <div>生日:<input type="text" name="birthday" /></div>
    
    <div><input type="submit" value="添加" /></div><!--做個(gè)添加按鈕-->
</form>
復(fù)制代碼
復(fù)制代碼

 

addchuli.php頁面代碼,,填寫完數(shù)據(jù)以后點(diǎn)擊“添加”,跳轉(zhuǎn)到此頁面處理,,處理完以后再跳轉(zhuǎn)回主頁面,。

復(fù)制代碼
復(fù)制代碼
<?php //處理界面,把html代碼全部刪除
$code = $_POST["code"];//取到傳過來的所有的值
$name = $_POST["name"];
$sex = $_POST["sex"];
$nation = $_POST["nation"];
$birthday = $_POST["birthday"];

//造連接對象
$db = new MySQLi("localhost","root","666","text1");

$sql = "insert into info values('{$code}','{$name}',{$sex},'{$nation}','{$birthday}')";//波爾型數(shù)據(jù)往里添加時(shí)不能有‘’,,添加字符串的話永遠(yuǎn)返回的是true,。
$db->query($sql);
header("location:main.php");//往數(shù)據(jù)庫里添加完數(shù)據(jù)以后再返回主頁面。
復(fù)制代碼
復(fù)制代碼

 

c.解決b中提到的缺陷,。并且將性別選項(xiàng)做成單選按鈕,,將民族做成下拉菜單。

復(fù)制代碼
復(fù)制代碼
<!--做添加的界面-->
<form action="addchuli.php" method="post">
    <div>代號:<input type="text" name="code" /></div>
    <div>姓名:<input type="text" name="name" /></div>
    <div>性別:
        <input type="radio" name="sex" value="1" checked="checked" />男<!--將性別作成單選按鈕-->
         <input type="radio" name="sex" value="0" /></div>
    <div>民族:
        <select name="nation">
復(fù)制代碼
復(fù)制代碼
<?php
            //造連接對象
            $db = new MySQLi("localhost","root","666","text1");
            $sql = "select * from nation";
            $result = $db->query($sql);
            $attr = $result->fetch_all();
            
            foreach($attr as $v)
            {
                echo "<option value='$v[0]'>{$v[1]}</option>";//表單提交的時(shí)候是提交的value值,,$v[1]僅僅是顯示用的,,value值$v[0]才是要提交的數(shù)據(jù),下拉菜單選中哪一項(xiàng)就提交哪一項(xiàng)的value值,。
            }
            ?>
復(fù)制代碼
復(fù)制代碼

 

        </select>
    </div>
    <div>生日:<input type="text" name="birthday" /></div>
    
    <div><input type="submit" value="添加" /></div><!--做個(gè)添加按鈕-->

</form>
復(fù)制代碼

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多