上個星期我們小組完成了一個連接數據庫的小頁面,并且添加了增刪改的功能。
第一個是要連庫。下面是我連庫的代碼,其中我的數據庫名為“test”。使用了PDO 連庫方式。
index.php
<?php
? ? ? ? $host='localhost';
? ? ? ? $userName='root';
? ? ? ? $password='';
? ? ? ? $conn = new PDO("mysql:host=$host;dbname=test", $userName, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));
? ? ? ? echo " ";
? ? ? ? if ($conn->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
? ? ? ? $stmt = $conn->prepare('select * from cjtest',array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
? ? ? ? } else {
? ? ? ? ? die("error");
? ? ? ? }
?>?
連庫方式應該還有一種比較簡單的方式,就是用mysqli自己的連接。
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// 創建連接$conn = new mysqli($servername, $username, $password);
// 檢測連接if ($conn->connect_error) {? ? die("連接失敗: " . $conn->connect_error);} echo "連接成功";
?>
而PDO與之不同的地方是創建連接一步不同。MySQLi是$conn= new mysqli($servername,$username,$password);
而PDO則是?$conn = new PDO("mysql:host=$host;dbname=test", $userName, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));
PDO和MySQLi的另一個區別是PDO可以還連接別的數據庫,不僅可以連接mysql,而mysqli雖然只能連接mysql但是它看起來更方便,而且在連接mysql的時候看起來很簡單。。。
index.php
第二部分是將連接成功的表在頁面上顯示出來
<?php
foreach($conn->query('select * from cjtest') as $row => $key){
? ? ? ? ? ? if($row%2 == 0){
echo .$key['id']."".$key['name']."".$key['math']."".$key['english']"
}else{
echo .$key['id']."".$key['name']."".$key['math']."".$key['english']."
? ? ? ? ? ? }? ?
? ? ? }
?>在中間用html的table把它放進去就可以在頁面上以表格的形式出現了。
第三個部分是我們添加增刪改的功能。
首先我是先嘗試了添加修改,先是在我以上的代碼中添加了一個刪除的按鈕(寫在了循環中),之后在點擊按鈕之后會跳轉到我刪除的php中進行連庫刪除,之后再跳轉回我的原頁面。所以我跳轉的php中寫了連庫—>刪除xx行—>跳轉回主頁面(index.php)并且跳出“刪除成功”提示框。
其中我把主鍵放在學號(id)上,所以如果我要刪除xx行,就需要刪除php(delete.php)從index.php中獲取到id行之后連庫進行刪除。
delete.php
<?php
????????$host='localhost';
? ? ? ? $userName='root';
? ? ? ? $password='';
? ? ? ? $key=$_GET["id"];//獲取點擊的id行
? ? ? ? $conn = new PDO("mysql:host=$host;dbname=test", $userName,? ? ? ? ? ? $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));//PDO連庫
? ? ? ? $sql = "delete from cjtest where id={$key}";//mysql語句
? ? ? ? $result=$conn->exec($sql);//向mysql數據庫輸出執行命令語句
? ??????exec和query都是執行語句。但有所不同:
? ??????PDO::exec() 不會從一條 SELECT 語句中返回結果。對于在程序中只需要發出一次的 SELECT 語句,可以考慮使用 PDO::query()。
if($result){
? ? ? ? ? ? header("location:index.php");? ? ? ? ? ?這句和下句被劃掉的原因是:header的使用會導致它下面的語句不被執行,所以無論刪除成功與否都會跳轉。因此我們放棄了用header而是轉用location.href。
? ? ? ?? ? ?echo " alert('刪除成功!'); ";
????????????$url = "zwj_index.php" ;
? ? ? ? ? ? echo "<script> window.location.href ='$url';alert('刪除成功');</script>";?
? ? ? ? ? ? else{
? ? ? ? ? ? echo"錯誤";
}//其中的script是我在delete.php頁面上寫的一個javascript,alert()是提示框中的內容。
至此,刪除功能也就實現了。
之后是增加了修改的功能:
和刪除差不太多的是在刪除的旁邊添加了修改的按鈕,之后也是跳轉,但這次是跳轉到輸入頁面,之后再跳轉到修改數據庫的頁面(共2個)。最后跳轉回index.php并跳出修改成功。
不過首先還是要連庫。但是這次使用的sql語句并不是增刪查改,而是取值:getAttribute。
? ? ? ?<?php
? ? ? ? $host='localhost';
? ? ? ? $userName='root';
? ? ? ? $password='';
? ? ? ? $key=$_GET["id"];//獲取點擊的id行
????????$conn = new PDO("mysql:host=$host;dbname=test", $userName,? ? ? ? ? ? ????????$password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));
????????echo " ";
? ? ? ? if ($conn->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql')
? ??????//PDO::getAttribute — 取回一個數據庫連接的屬性?
????????{
? ? ? ? $stmt = $conn->prepare('select * from ????????cjtest',array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
? ? ? ? } else {
? ? ? ? ? die("error");
? ? ? ? }
????????foreach($conn->query('select * from cjtest') as $row => $key)
以上是本次的連庫以及取回屬性。之后下面寫了表單(form)并在表單里添加輸入框,分別輸入了要修改的id,name,math,english。進行提交之后會跳轉到修改數據庫的php,其中,form表單只有結合submit才可以提交,所以不能用超鏈接什么的。。。一定要用表單提交。
之后要獲取從上一部傳來的所輸入的id
????????$id_new=$_POST["id"];
? ? ? ? $name = $_POST["name"];
? ? ? ? $math = $_POST["math"];
? ? ? ? $english = $_POST["english"];
之后則是跳轉到修改的php,進行和上面一樣的連庫之后再寫sql語句
$sql = "UPDATE cjtest SET name='$name',english='$english',math='$math' WHERE id='$id_new'";
其中我們可以發現,我之前再delete中獲取id的時候用的是GET,而再update中我卻用了POST。這是為什么呢?因為POST和GET有一些地方不太一樣。
?$_POST 變量用于收集來自 method="post" 的表單中的值。
從帶有 POST 方法的表單發送的信息,對任何人都是不可見的(不會顯示在瀏覽器的地址欄),并且對發送信息的量也沒有限制。
?$_GET 變量用于收集來自 method="get" 的表單中的值。
從帶有 GET 方法的表單發送的信息,對任何人都是可見的(會顯示在瀏覽器的地址欄),并且對發送信息的量也有限制。
GET?- 從指定的資源請求數據。
GET 請求可被緩存
GET 請求保留在瀏覽器歷史記錄中
GET 請求可被收藏為書簽
GET 請求不應在處理敏感數據時使用
GET 請求有長度限制
GET 請求只應當用于取回數據
POST?- 向指定的資源提交要被處理的數據。
POST 請求不會被緩存
POST 請求不會保留在瀏覽器歷史記錄中
POST 不能被收藏為書簽
POST 請求對數據長度沒有要求
因此我使用了POST而不是GET
之后的代碼和刪除的提示框還有跳轉一樣,都是跳轉回index.php只是alert()內的內容不同。
最后是增加了添加功能,再表格中添加了一個+按鈕,點開后會跳轉到一個和update輸入差不多的頁面中,也與update輸入差不多的寫法。只是跳轉的地址不再是update.php而是inner.php
inner.php
前面正常和上述一樣連庫,從上一個跳轉界面獲取輸入的id,name,math,english,但是sql語句不同:
$sql = "INSERT INTO cjtest(id,name,math,english) VALUES ('".$id."','".$name."','".$math."','".$english."')";
$result=$conn->exec($sql);
if($result){ $url = "index.php" ;
? ? ? ? ? ? echo "<script>window.location.href = '$url';alert(添加成功);</script>";?
? ? ? ? ? ? else{
? ? ? ? ? ? echo"錯誤";
至此,這個第一次用php連接引用的數據庫的頁面就做好了。
其中有一些新學到的還有需要注意的東西:
1、連庫方式。
2、foeach數組循環(每進行一次循環,當前數組元素的值就會被賦值給 $value 變量(數組? ??????指針會逐一地移動),在進行下一次循環時,您將看到數組中的下一個值。)
3、exec() ,query()的區別。
4、header的使用。
5、form的提交問題。
6、GET和POST的區別。