php表单

1、php表单实例:

a.html:

<html>
<body>
<form action="welcome.php" method="post">
    Name: <input type="text" name="fname">
    Age: <input type="text" name="age">
    <button type="submit">Click Me!</button>
</form>
</body>
</html>

welcome.php:

<html>
<body>
Welcome <?php echo $_POST["fname"]; ?>!<br>
You are <?php echo $_POST["age"]; ?> years old.<br>
<?php /*var_dump($_POST);*/?>
</body>
</html>
运行a.html报错:







问题分析:

如果注意观察此时的URL,会发现在PhpStorm中打开浏览器使用的服务端口号是63342(URL是localhost:63342/这样的形式)
因此问题的原因在于:PhpStorm默认使用的是自带的内部服务器,这个服务器使用63342端口,而且服务器内部有问题,导致POST方法异常;而如果把项目放在Apache服务器的工作目录下,在地址栏输入localhost,此时使用的是Apache服务器,默认端口号为80,Apache服务器可以正常运行程序。

解决:

1)在welcome.php的头部添加<?php error_reporting(E_ALL^E_NOTICE^E_WARNING);?>--------------------------不好使

2)在welcome.php里添加<?php var_dump($_POST);?>查看是否传过去值了,显示array(0){},值并没有传过来

3)php.ini里边把enable_post_data_reading置为on,---------------------------还是不好使

3)在xampp/htdocs下建文件,然后localhost运行是可以的,---------------------------较好

一个简单的表单页面,提交数据后,var_dump($_POST)为空

2、php表单验证:

<form method="post" action="<?php echo   htmlspecialchars($_SERVER["PHP_SELF"]);?>">

其中,$_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,会发送表单数据到当前页面,而不是跳转到不同的页面。

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &#039;
< (小于) 成为 &lt;
> (大于) 成为 &gt;

当黑客使用跨网站脚本的HTTP链接来攻击时,$_SERVER["PHP_SELF"]服务器变量也会被植入脚本。原因就是跨网站脚本是附在执行 文件的路径后面的,因此$_SERVER["PHP_SELF"]的字符串就会包含HTTP链接后面的JavaScript程序代码。$_SERVER["PHP_SELF"] 可以通过 htmlspecialchars() 函数来避免被利用。会有一堆html实体字符了,无法利用。


实例:

<?php
// 定义变量并默认设置为空值
$name =  $email = $gender = $comment = $website = "";

if  ($_SERVER["REQUEST_METHOD"] == "POST")
{
    $name =  test_input($_POST["name"]);
    $email = test_input($_POST["email"]);
    $website = test_input($_POST["website"]);
    $comment =  test_input($_POST["comment"]);
    $gender = test_input($_POST["gender"]);
}
function test_input($data)
{
    $data = trim($data);
    $data =  stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

3、验证 

Name必需。 + 只能包含字母和空格
E-mail 必需。 + 必需包含一个有效的电子邮件地址(包含"@"和".")

Website 可选。 如果存在,它必须包含一个有效的URL
Comment 可选。多行字段(文本域)。
Gender 必需。 Must select one

1>name
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name))
  {
  $nameErr = "只允许字母及空格"; 
  }
preg_match — 进行正则表达式匹配。
语法:
int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )
在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。如果提供了 matches ,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
2>email
$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
  {
  $emailErr = "非法邮件地址"; 
  }
3>gender
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))  
  {
  $websiteErr = "不合法的 URL"; 
  }
4、完整表单实例:
Name: <input type="text" name="name" value="<?php echo $name;?>">
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
Website: <input type="text" name="website" value="<?php echo $website;?>">
Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
Gender:
<input type="radio" name="gender"
    <?php if (isset($gender) && $gender=="female") echo "checked";?>
       value="female">Female
<input type="radio" name="gender"
    <?php if (isset($gender) && $gender=="male") echo "checked";?>
       value="male">Male
5、 $GET和$POST变量:
1)$_POST 变量用于收集来自 method="post" 的表单中的值。$_GET 变量用于收集来自 method="get" 的表单中的值。

2)在 HTML 表单中使用 method="get" 时,所有的变量名和值都会显示在 URL 中。因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。

注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。

3)从带有 POST 方法的表单发送的信息,对任何人都是不可见的,并且对发送信息的量也没有限制。然而,由于变量不显示在 URL 中,所以无法把页面加入书签。

4)$_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。$_REQUEST 变量可用来收集通过 GET 和 POST 方法发送的表单数据。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值