<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
文件,再对该文件进行加权:
再次发帖查看,能够成功显示以前的发帖历史: