php编程 之php基础 表单
1 ,php表单
当处理php表单的时候,php能把来自html页面的表单元素自动变成可供php脚本使用的数据。
比如:
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="t3.php" method="post"> <!--action定义的是激发事件以后的下一步动作,其实也就是跳转的目标页面-->
名字: <input type="text" name="fname"> <!--用于获取用户填写的信息的文本框,表单中的name属性是php中定位数据的键-->
年龄: <input type="text" name="age">
<input type="submit" value="提交"> <!--这个是按钮-->
</form>
</body>
</html>
你输入了<?php echo $_POST["fname"] ." and ".$_POST["age"] ?>
要注意,这不是异步操作,而是跳转到了另一个页面,所以数据不是通过request得到的,而是通过$_POST传递的,具体的道理还不得而知。
php获取单选下拉菜单中的数据:(单选框)
前端html代码
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="t3.php" method="get">
<select name="q"> <!--这是一个有下拉列表的select,option的value属性对于html和php传递值至关重要-->
<option value="">选择一个</option>
<option value="1">daqingdd</option>
<option value="2">dahugg</option>
<option value="3">lilymm</option>
</select>
<input type="submit" value="提交">
</form>
</body>
</html>
后端的t3.php:
<?php
$q=$_GET["q"] ? htmlspecialchars($_GET["q"]) : "";
//在此补充一下htmlspecialchars(),它不会改变内部参数的值,但是它会把这个值封装在html页面显示的格式中,我用var_dump()检测了一下,可以基本认为有没有这个函数都一样,大约是为了方便显示吧。
//var_dump($q);
if ($q)
{
if($q=='1'){echo "haha daqing how are u?";}
if($q=='2'){echo "hehe dahu nihao!";}
if($q=='3'){echo "lily ,come on!";} }
else
{
echo "请选择一个选项";
}
?>
多选下拉菜单中的信息如何获取?(下拉菜单好像并不能多选)
php如何获取复选框的信息?
t3.html
<html>
<head>
<meta charset="utf-8">
<title>daqing test</title>
</head>
<body>
<form action="t3.php" method="post"> <!--查询方法也已经变了,用的是post-->
<input type="checkbox" name="q[]" value="daqing">i am daqing<br> <!--注意复选框的定义格式,type=“checkbox”,name属性是php得到值的基础,value属性的php定义值的键,这些属性一个也不能少-->
<input type="checkbox" name="q[]" value="dahu">i am dahu<br>
<input type="checkbox" name="q[]" value="lily">i am lily<br>
<input type="submit" value="提交">
</form>
</body>
</html>
t3.php:
<?php
$q=isset($_POST["q"]) ? $_POST["q"] : "";
var_dump($q); //这个数组不是关联数组,数组直接是用下标排列好的。
if (is_array($q))
{
$site=array( //这个数组是提前定义好的,键是前端input元素中的value,值是自己定义的
"daqing"=>"haha daqing how are u? <br>",
"dahu"=>"hehe dahu nihao! <br>",
"lily"=>"lily,come on!<br>",
);
foreach($q as $val){//格式:“数组 as 键”,遍历数组$q的键,然后从$val中找到对应的取值。 echo $site[$val].PHP_EOL;
}
}
else
{
echo "请选择一个选项";
}
?>
2,表单验证
要求:我们必须设计一个表单,包含以下字段:名字,email,url,备注和性别,除此以外,我们还要验证用户输入的信息是否有效且符合格式要求。
//纯html表示方法,t3.html
<html>
<head>
</head>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_self']);?>"> <!--备注下,$_SERVER是超全局变量,$_SERVER["PHP_SELF"]返回的是当前正在执行的脚本名字,所以这个页面不跳转,信息直接发到自己页面上-->
<!--PHP_SELF变量据说容易被黑客攻击,所以echo $_SERVER["PHP_SELF"];这段代码要么用htmlspecialchars封装一下,要么改成:<form method="post" action="test_form.php">-->
名字:<input type="text" name="name">
<br>
email:<input type="type" name="email">
<br>
网址:<input type="text" name="website">
<br>
备注:<textarea name="comment" rows="5" cols="40"></textarea> <!--这是文本域,是可以放置一整段代码的文本框-->
<br>
性别:<input type="radio" name="gender" value="female">女
<input type="radio" name="gender" value="male">男
<br>
<input type="button" name="submit" value="提交">
</form>
</body>
</html>
样子做出来了,但是缺少数据的判断和流动,这个页面就会没有灵魂,所以,这就要用到我们的php了,php当之无愧能做到和html页面完美结合,而且两者结合得具体形象,比js和ajax更加简单易行。
使用表单简单验证数据:先实现必填字段提醒的功能!
贴士:php中的trim()函数可以去除用户输入数据中不必要的字符,比如空格和tab换行等
php的stripslashes()函数可以去除用户输入的反斜杠
注意,以下代码要放在t3.php文件中,或者任意后缀是。php的文件中,html文件是不支持解析php代码的。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>daqing test</title>
<style>
.error {color: #FF0000;} //这个是css中的格式的写法,即所有class=“error”的元素都具有颜色是红色的属性。
</style>
</head>
<body> <?php
// 定义变量并默认设为空值,
$nameErr = $emailErr = $genderErr = $websiteErr = ""; //事先定义一下各种error变量,留着后头显示出来
$name = $email = $gender = $comment = $website = ""; //事先给需要使用的信息找个变量名,留着后头好称呼 if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "名字是必须的。"; //如果用户没有输入名字,那就显示红色提示信息
} else {
$name = test_input($_POST["name"]); //如果用户输入了名字,那就用函数处理一下,test_input是一个函数,作用在于去除用户输入的空白符号和反斜杠
} if (empty($_POST["email"])) {
$emailErr = "邮箱是必须的。";
} else {
$email = test_input($_POST["email"]);
} if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
} if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
} if (empty($_POST["gender"])) {
$genderErr = "性别是必须的。";
} else {
$gender = test_input($_POST["gender"]);
}
} function test_input($data) { //带形参的函数
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?> <h2>PHP 表单验证实例</h2>
<p><span class="error">* 必填字段。</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> //$_SERVER['PHP_SELF'返回脚本的名字,action=这个脚本自己,意思就是表单直接把信息发给自己就行,脚本自带了处理表单信息的程序
名字: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span> //此处嵌的是错误信息,如果程序没有引发错误,$nameErr就是“”空的,虽然也显示,但是值为空,如果引发了错误,使得这个变量有了值,那就会直接打印出来。下面的段落也是同样的道理
<br><br>
E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
网址: <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
备注: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
性别:
<input type="radio" name="gender" value="female">女
<input type="radio" name="gender" value="male">男
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form> <?php
echo "<h2>您的输入:</h2>";
echo $name; //注意此处,如果用户按照要求输入了信息,那变量就会如实打印出来, 虽然$name的定义和打印不在同一个<?php xxx;?>中,但是他们内部的变量应当是共享的,不然也不能分开写。
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?> </body>
</html>
除了以上功能以外,还可以添加定制化的内容,比如,我们想把验证过的用户信息放到数据库中,那么我们就可以在<body>标签的末尾添加连接数据库的代码:
<?php
echo "<h2>我来试试php可否直接联系mysql</h2>";
if($name!="")
{
$conn = mysqli_connect("localhost", "xxx", "xxx","daqingdb");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
//echo "连接成功 <br>"; //测试代码的时候用的
$sql="insert into `ajax_sql`(`name`) values ('$name')"; //仅先插入一个意思意思
if (mysqli_query($conn,$sql))
{
//echo "插入成功!";
}
else
{
echo "error".mysqli_error("$conn");
}
}
?>
所以php真的很好用,php不但可以跑在服务端,也可以在用户浏览器上运行。当然了,有人可能会担心我们编辑的php代码会泄露一些信息,实际上不会,比如在chrome中,我们尝试ctrl查看网页源码,发现所有php的代码根本没有显示在页面上。也是很智能了!
3,php表单:验证邮件和url(接上文实例)
php正则相关知识补充:
preg_match($pattern,$str)意思是从$str中匹配$pattern,匹配到一个符合的项目就会停止,返回1,没有匹配到任何项目就会返回0.
preg_match_all($pattern,$str,$matcharray)意思是从$str中匹配$pattern,有匹配的就放到$matcharray中,一直匹配到$str结束。
那么我们设计验证就可以采用正则:
名字name:要求用户输入只有字母和空格,$pattern匹配模式可以写作:^[a-zA-Z ]*$
邮箱email:要求用户的输入符合xxx @ xxx . xxx的格式,$pattern匹配模式可以写作:[\w\-]+\@[\w\-]+\.[\w\-]+ \w表示的是:[a-zA-Z0-9],+表示的是匹配前面的字符或者字符组一次或者多次。
网址url: $pattern匹配模式可以写作:"/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i" ,额,看不大很懂,不过没什么关系,这个回头自己写也行。 注意: /b是单词分节符,模式修饰符表示忽略大小写。说句题外话,这个正则表达式可以匹配这样的url:((https://www.daqing.com,这样的也可以:::https://www.daqing.com,哇哇,更看不懂了。
比较严格地验证用户输入:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>daqing test</title>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> <?php
// 定义变量并默认设为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { //此处的设计很精妙
if (empty($_POST["name"])) { //如果输入是空,那$nameErr等于“名字是必须的”
$nameErr = "名字是必须的。";
} else { //如果不是空,那我们的$nameErr还是初始状态
$name = test_input($_POST["name"]); //我们判定以后选择赋值$nameErr为输入不合法或者不动它。
if (!preg_match("/^[a-zA-Z ]*$/",$name)){
$nameErr = "请输入字母和空格";
}
} if (empty($_POST["email"])) {
$emailErr = "邮箱是必须的。";
} else {
$email = test_input($_POST["email"]);
if(preg_match("/[\w\-]+\@[\w\-]+\.[\w\-]+/",$email)){
$emailErr="请输入正确邮箱格式";
}
} if (empty($_POST["website"])) { //网址不是必须的
$website = "";
} else {
$website = test_input($_POST["website"]);
if(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)){
$websiteErr="非法的url地址";
}
} if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
} if (empty($_POST["gender"])) {
$genderErr = "性别是必须的。";
} else {
$gender = test_input($_POST["gender"]);
}
} function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?> <h2>PHP 表单验证实例</h2>
<p><span class="error">* 必填字段。</span></p>
<form method="post" action="t3.php">
名字: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
网址: <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
备注: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
性别:
<input type="radio" name="gender" value="female">女
<input type="radio" name="gender" value="male">男
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form> <?php
echo "<h2>您的输入:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>
看完表单以后我有些迷茫,因为我发现,好像js和ajax能做的东西,php也可以做,php也可以在本网页上处理并且显示信息,也可以连接查询数据库,可以验证用户输入等等,好像和js冲突,但是细想,还是不冲突的。
为什么这样说呢?php所做的交互实际上都是基于静态网页,传递数据主要靠post 和get(当然了,别的超全局变量也可以),基于用户输入和表单,如果想请求一个网页,然后返回网页的响应到本页面,php还是不可以的,只能用js。但是,不得不说,php还是比js更加直观和简洁,想在哪个html元素中输出信息就去哪个html元素中echo,比js直观。js一般是这样:document.getElementsById(“demo”).innerHTML="xxx“
4,$_GET变量详解
预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。
//这是表单的html页面
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="welcome.php" method="get">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
//当我们填写姓名为:daqing,年龄为18,点击提交的时候,url实际上是这样的:
http://www.runoob.com/welcome.php?fname=daqing&age=18 //?表示分隔url和后面的信息内容,&表示分隔不同的表单元素的信息,而php在通过网络传送信息的时候,会自动把&变成&;
表单域的名称会自动成为 $_GET 数组中的键哦,所以直接这样取值就可以了:<?php echo $_GET["fname"]; ?>
5 $_POST变量详解
在 PHP 中,预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值。
这个就不加代码了,因为通过post提交的信息并不会显示在url上,
表单域的名称会自动成为 $_POST 数组中的键,这样访问:<?php echo $_POST["fname"]; ?>
从带有 POST 方法的表单发送的信息,对任何人都是不可见的,并且对发送信息的量也没有限制。
预定义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。所以用$_REQUEST也是可以的。
php编程 之php基础 表单的更多相关文章
- Bootstrap系列 -- 11. 基础表单
表单主要功能是用来与用户做交流的一个网页控件,良好的表单设计能够让网页与用户更好的沟通.表单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文本域和按钮等.其中每个控件所起的作用都各 ...
- bootstrap 基础表单 内联表单 横向表单
bootstrap 基础表单 内联表单 横向表单 <!DOCTYPE html> <html> <head> <title></title> ...
- JavaScript | 基础表单验证(纯Js)
———————————————————————————————————————————— 基础表单验证(纯js) - - - - - - - - - - - - - - - - - - - - - - ...
- bootstrap 基础表单
表单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文本域和按钮等.其中每个控件所起的作用都各不相同,而且不同的浏览器对表单控件渲染的风格都各有不同. ☑ LESS版本:对应源文 ...
- js基础-表单验证和提交
基础知识: 原始提交如下: <form action="/login" method="post" id="form1"> &l ...
- JavaScript:基础表单验证
在用户填写表单的过程之中,往往需要编写一堆的验证操作,这样就可以保证提交的数据时正确的.那么下面就模拟表单验证的处理操作完成. 如果要想进行验证,首先针对于输入的数据来进行一个验证处理. 1.定义一个 ...
- ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法
参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...
- h5标签基础 表单form
表单:收集用户信息 一. 组成: 文本框<input type="text"/> 密码框<input type="password"/> ...
- JS基础-表单元素-新表单元素-js概述
1.表单元素 1.input元素 1.隐藏域和文件选项框 1.隐藏域 <input type="hidden"> 要提交给服务器的数据,但是不想展示给用户看可以放在隐藏 ...
随机推荐
- iis8使用url2.0模块实现http跳转到https
第一步安装,url 2.0重写模块 点击右键选择>获取新的web平台组件 找到url 重写工具2.0并安装 找到相应网站,选择 >url重写 设定名称后 匹配URL用于路径匹配 通用 (. ...
- 关键字(3):order by/group by/having/where/sum/count(*)...查询结果筛选关键字
ORDER BY <属性表> 只要在WHERE子句的选择条件后面加上如下子句:ORDER BY <属性表> 就可以实现输出的排序,默认的顺序为升序(ASC).可以在属性的后面加 ...
- 安装 java环境 和 tomcat
安装 java环境 和 tomcat -- JAVA部分 tar xf jdk-8u60-linux-x64.tar.gz cd /root/soft/jdk1.8.0_60 mkdir /usr/l ...
- pcntl_exec()
<?php /******************************* *查看phpinfo编译参数--enable-pcntl *作者 Spider *nc -vvlp 443 **** ...
- python自动化开发-[第二十二天]-bbs多级评论、点赞、上传文件
今日概要: 1.related_name和related_query_name的区别 2.through_fields的用途 3.django的事务提交 4.点赞的动画效果 5.多级评论的原理 6.上 ...
- flask 安装及基础学习(url_for反转,静态文件引入)
pip3 install flask pycharm 创建项目 默认的代码解释说明(及开启debug模式) #encoding:utf-8 from flask import Flask #从flas ...
- nGrinder TestRunner DNS / sun.net.spi.nameservice.NameServiceDescriptor
s ngrinder3.3控制台验证脚本报错 http://ngrinder.642.n7.nabble.com/ngrinder3-3-td1301.html 目前发现3.3版本在控制台校验脚本报错 ...
- OS + linux proxy
s Linux主机通过代理服务器进行网络连接 http://www.linuxidc.com/Linux/2015-01/111703.htm 新手用Linux做代理服务器 三招搞定 http://b ...
- 使用 python -m SimpleHTTPServer 快速搭建http服务
摘要: 在 Linux 服务器上或安装了 Python 的机器上,可以使用 nohup python -m SimpleHTTPServer [port] & 快速搭建一个http服务. 在 ...
- UEditor js动态创建和textarea中渲染【原】
UEditor动态创建和textarea中渲染 http://ueditor.baidu.com/website/examples/textareaDemo.html <!DOCTYPE> ...