<form>
):這裏麪包含了處理表單數據所用CGI程序的URL以及數據提交到服務器的方法;首先,咱們的Web開發是基於Apache服務器進行的,因此對於Apache的基本操做咱們是應該要掌握的,對於Apache的安裝,直接用指令sudo apt-get install apache2
就能夠,因爲實驗機已經安裝好Apache,這裏就不演示了,對於Apache使用的端口咱們也能夠經過sudo vi /etc/apache2/ports.conf
指令來進行修改,上次實驗中咱們就是將端口改到了80。廢話很少說,直接使用指令apachectl start
打開Apache服務,使用netstat -aptn
查看一下端口占用,因爲上次修改了端口文件,因此仍是佔用了80端口:
javascript
若是打不開Apache,提示端口被佔用,能夠先使用netstat -tupln |grep 80
指令查看80端口被哪些進程佔用,再用kill+進程ID
殺死進程,Apache服務開啓後,咱們在瀏覽器中輸入localhost:80
進行查看,如圖所示,打開了上次實驗克隆的網頁,說明咱們Apache正常工做:
php
以後cd var/www/html
進入到Apache的工做目錄下,vi test1.html
新建一個含有表單的html,咱們經常使用的登陸頁面通常就是用表單向後臺提交數據,因此能夠編寫一個簡單的登陸頁面,代碼以下:html
<html> <head> <title>test</title> </head> <body> <table> <form method ="POST" action="#" name="frmLogin" > <tr> <td>用戶名:</td> <td><input type="text" name="username" value="Your name" size="20" maxlength="20" /></td> <td> </td> <td> </td> </tr> <tr> <td>密 碼:</td> <td><input type="password" name="password" value="Your password" size="20" maxlength="20" /></td> <td> </td> <td> </td> </tr> <tr> <td><input type="checkbox" name="zlogin" value="1">自動登陸</td> </tr> <table> <tr> <td><input type="submit" name="login" value="登陸" /></td> <td><input type="reset" name="rs" value="重置" /></td> </tr> </table> </form> </table> </body> </html>
用瀏覽器打開這個網頁看看效果:
前端
#
,即返回當前頁面,另外選用的method是Post,method屬性分Post和Get兩種,其主要區別有如下幾方面:
因此出於安全性考慮,咱們通常都選用Post提交數據。java
login_test.html
,代碼以下所示:<html> <head> <title>test</title> </head> <body> <table> <form method ="POST" action="#" name="frmLogin" > <tr> <td>用戶名:</td> <td><input type="text" name="username" value="Your name" size="20" maxlength="20" onfocus="if (this.value=='Your name') this.value='';" /></td> <td> </td> <td> </td> </tr> <tr> <td>密 碼:</td> <td><input type="password" name="password" value="Your password" size="20" maxlength="20" onfocus="if (this.value=='Your password') this.value='';" /></td> <td> </td> <td> </td> </tr> <tr> <td><input type="checkbox" name="zlogin" value="1">自動登陸</td> </tr> <table> <tr> <td><input type="submit" name="login" value="登陸" onClick="return validateLogin()"/></td> <td><input type="reset" name="rs" value="重置" /></td> </tr> </table> </form> </table> <script language="javascript"> function validateLogin(){ var sUserName = document.frmLogin.username.value ; var sPassword = document.frmLogin.password.value ; if ((sUserName =="") || (sUserName=="Your name")){ alert("請輸入用戶名!"); return false ; } if ((sPassword =="") || (sPassword=="Your password")){ alert("請輸入密碼!"); return false ; } } </script> </body> </html>
先輸入/etc/init.d/mysql start
指令開啓mysql服務,輸入mysql -u root -p
,並根據提示輸入密碼,默認密碼爲p@ssw0rd
,進入MySQL,注意:在MySQL中輸入命令後面都要帶一個分號做爲命令結束符:
mysql
咱們能夠對密碼進行修改:輸入use mysql;
,選擇mysql數據庫;輸入update user set password=PASSWORD("新密碼") where user='root';
,修改密碼;輸入flush privileges;
,更新權限;
linux
接着輸入quit
退出MySQL,從新進入,使用新密碼登陸成功,說明修改爲功:
git
咱們先使用create database 庫名;
創建一個數據庫;使用show databases;
查看存在的數據庫;使用use 庫名;
使用咱們建立的數據庫:
web
接着使用create table 表名 (字段設定列表);
創建數據表,數據表是數據庫中一個很是重要的對象,一個數據庫中可能包含若干個數據表;使用show tables
查看存在的數據表:
sql
使用insert into 表名 values('值1','值2','值3'...);
插入數據;使用select * from 表名
查詢表中的數據:
咱們還能夠在MySQL中增長新用戶,使用grant select(insert,update,delete) on 數據庫.* to 用戶名@登陸主機 identified by "密碼";
指令,如圖所示,增長新用戶以後,退出,從新使用新用戶名和密碼進行登陸,登陸成功說明增長新用戶成功:
/var/www/html
目錄下新建一個PHP測試文件,簡單瞭解一下它的一些語法:<?php echo ($_GET["a"]); include($_GET["a"]); echo "This is lxm php test page!<br>"; ?>
瀏覽器打開localhost:80/lxm_test.php?a=/etc/passwd
可看到/etc/passwd
文件的內容,注意PHP變量大小寫敏感:
簡單測試完成後,咱們能夠利用PHP和MySQL結合以前編的登陸網頁進行簡單的用戶身份認證,這裏能夠參考老師給的代碼編寫login.php
,代碼以下所示:
<?php $uname=($_GET["username"]); $pwd=($_GET["password"]); /* echo $uname; */ $query_str="SELECT * FROM users where username='{$uname}' and password='{$pwd}';"; /* echo "<br> {$query_str} <br>";*/ $mysqli = new mysqli("127.0.0.1", "root", "lxm5215", "lxm_test"); /* check connection */ if ($mysqli->connect_errno) { printf("Connect failed: %s\n", $mysqli->connect_error); exit(); } echo "connection ok!"; /* Select queries return a resultset */ if ($result = $mysqli->query($query_str)) { if ($result->num_rows > 0 ){ echo "<br> Wellcome login Mr/Mrs:{$uname} <br> "; } else { echo "<br> login failed!!!! <br> " ; } /* free result set */ $result->close(); } $mysqli->close(); ?>
這裏作幾點說明,如圖所示圈出的部分,第一個password那個地方老師給的代碼是調用了password函數對密碼進行了加密,可是若是數據庫裏密碼沒有加密的話,最後輸入的值比對確定不會相等,登錄不成功,因此要把password那個函數去掉,第二個127.0.0.1
是本機地址,root
是MySQL的用戶名,lxm5215
是我以前設置的登陸密碼,lxm_test
是數據庫的庫名。
先將以前編的登陸網頁的login_test.html
代碼中form的action屬性由#
改爲login.php
,即登陸後跳轉到login.php
,再在火狐瀏覽器中輸入localhost:80/login_test.html
訪問本身的登陸頁面:
在登陸頁面中輸入數據庫中存有的用戶名和密碼並點擊登陸進行用戶認證,若是登陸成功,顯示以下所示畫面:
若是登陸失敗,以下圖所示:
咱們還能夠再編一個更加友好的頁面welcome.php
,再在login.php
中加一行代碼header("Refresh:3;url=welcome.php");
,實如今3秒以後跳轉到welcome.php頁面:
最終登陸成功後以下圖所示:
在用戶名輸入框中輸入' or 1=1#
,密碼隨便輸入,這時候的合成後的SQL查詢語句爲select * from lxmtable where username='' or 1=1#' and password=''
,#
至關於註釋符,會把後面的內容都註釋掉,而1=1
是永真式,因此這個條件確定恆成立,因此可以成功登錄:
咱們還能夠經過SQL注入將用戶名和密碼保存在數據庫中,可是得修改一下以前的代碼,由於咱們以前編的代碼中if ($result = $mysqli->query($query_str))
這條判斷語句不容許多條sql語句執行,因此將它改爲if ($result = $mysqli->multi_query($query_str))
便能實現執行多個sql語句,接着在用戶名輸入框中輸入';insert into lxmtable values('zn','5214','17888811781');#
,拆開來看就是SELECT * FROM lxmtable WHERE username='';
、insert into lxmtable values('zn','5214','17888811781');
,接着登陸,出現以下所示頁面:
咱們能夠在數據庫中查詢一下是否真的添加成功,如圖所示說明插入成功:
接着使用新插入的用戶名和密碼進行登陸,登陸成功:
咱們能夠進行一個簡單的測試,在用戶名輸入框中輸入<img src="5230henshuai.png" />20145215</a>
讀取/var/www/html
目錄下的圖片:
點擊登陸後咱們能夠看到圖片:
咱們能夠利用PHP實現會話管理,這部分的詳細代碼參考ltc同窗的代碼,將代碼依舊放在/var/www/html
目錄下,在瀏覽器中輸入http://localhost:80/logIn.php
,進行登陸:
登陸成功後如圖所示:
點擊start a new post!
發帖,進入以下界面:
提交以後跳轉到以下界面,能夠選擇查看發過的帖子、繼續發帖、返回或者退出登陸:
這個時候點擊CHECK
查看發過的帖子,可是卻什麼內容都沒有,因爲這個操做是經過從data.txt
文件中讀取以前發帖時保存的記錄來查看發帖內容,可是在/var/www/html
目錄下根本沒有找到這個文件,這就說明以前建立也沒有成功,後面發現/var/www/html
底下文件默認的都是屬於root的,其餘用戶沒有權限進行操做,因此咱們能夠先使用touch data.txt
建一個data.txt
文件,再對該文件進行加權:
再次發帖查看,能夠成功顯示以前的發帖歷史: