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&amp;age=18 //?表示分隔url和后面的信息内容,&表示分隔不同的表单元素的信息,而php在通过网络传送信息的时候,会自动把&变成&amp;

表单域的名称会自动成为 $_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基础 表单的更多相关文章

  1. Bootstrap系列 -- 11. 基础表单

    表单主要功能是用来与用户做交流的一个网页控件,良好的表单设计能够让网页与用户更好的沟通.表单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文本域和按钮等.其中每个控件所起的作用都各 ...

  2. bootstrap 基础表单 内联表单 横向表单

    bootstrap 基础表单 内联表单 横向表单 <!DOCTYPE html> <html> <head> <title></title> ...

  3. JavaScript | 基础表单验证(纯Js)

    ———————————————————————————————————————————— 基础表单验证(纯js) - - - - - - - - - - - - - - - - - - - - - - ...

  4. bootstrap 基础表单

    表单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文本域和按钮等.其中每个控件所起的作用都各不相同,而且不同的浏览器对表单控件渲染的风格都各有不同. ☑   LESS版本:对应源文 ...

  5. js基础-表单验证和提交

    基础知识: 原始提交如下: <form action="/login" method="post" id="form1"> &l ...

  6. JavaScript:基础表单验证

    在用户填写表单的过程之中,往往需要编写一堆的验证操作,这样就可以保证提交的数据时正确的.那么下面就模拟表单验证的处理操作完成. 如果要想进行验证,首先针对于输入的数据来进行一个验证处理. 1.定义一个 ...

  7. ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法

    参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...

  8. h5标签基础 表单form

    表单:收集用户信息 一. 组成: 文本框<input type="text"/> 密码框<input type="password"/> ...

  9. JS基础-表单元素-新表单元素-js概述

    1.表单元素 1.input元素 1.隐藏域和文件选项框 1.隐藏域 <input type="hidden"> 要提交给服务器的数据,但是不想展示给用户看可以放在隐藏 ...

随机推荐

  1. 给你的手机加上安全保障,请设置SIM卡PIN码

    [手机上了锁,为啥还丢钱?专家支招:设置SIM卡PIN码]智能手机一旦丢失,不仅会带来诸多不便,甚至还会造成个人隐私泄露及财产损失. 然而很多人认为,自己已经设置了手机屏锁.支付密码.指纹锁等防御措施 ...

  2. JAVA后端生成Token(令牌),用于校验客户端,防止重复提交

    转:https://blog.csdn.net/u011821334/article/details/79390980 转:https://blog.csdn.net/joshua1830/artic ...

  3. (链表) 206. Reverse Linked List

    Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...

  4. Oracle提权

    1.创建JAVA包 select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immed ...

  5. opencv: 角点检测源码分析;

    以下6个函数是opencv有关角点检测的函数 ConerHarris, cornoerMinEigenVal,CornorEigenValsAndVecs, preConerDetect, coner ...

  6. bzoj2938 AC自动机 + 拓扑排序找环

    https://www.lydsy.com/JudgeOnline/problem.php?id=2938 题意:给出N个01病毒序列,询问是否存在一个无限长的串不存在病毒序列 正常来说,想要寻找一个 ...

  7. pandas知识点

    1.选择对象 1.选择特定列和行的数据 a['x'] 那么将会返回columns为x的列,注意这种方式一次只能返回一个列.a.x与a['x']意思一样. 取行数据,通过切片[]来选择 如:a[0:3] ...

  8. django中文学习资料

    Django 2.0 中文官方文档地址: https://docs.djangoproject.com/zh-hans/2.0/ <Django Girls>中文版地址: https:// ...

  9. NPOI使用教程附Helper

    1 NPOI简介 1.1 NPOI是什么 NPOI是POI的.NET版本,POI是一套用Java写成的库,我们在开发中经常用到导入导出表格.文档的情况,NPOI能够帮助我们在没有安装微软Office的 ...

  10. ibatis项目启动报错The string "--" is not permitted within comments【原】

    该错误主要就是因为xml中<!-- [注释]--> 注释与-->之间没有空格造成xml解析错误 sqlMapConfig.xml内容如下 <?xml version=" ...