php表单提交实例疏解

公司运营的论坛被网络攻击,无奈没有很好的解决方法,就只有一个个的封IP地址,最终封了1600多个ip段,2个月后网络攻击逐步减少,担心会屏蔽正常用户,所以开始解封一批国内的字段的ip地址,论坛程序是discuz,由于discuz在禁止ip字段页面没有做分页功能,其导致1600多个字段同时读取在页面上。

公司内一个php的后台管理系统,之前运行在apache上,后来我给转到nginx+php上后,其他功能运行正常,有一个修改功能提交表单后没有提交成功,查了代码没查出来什么问题,后来看了下php
error日志,也没有什么线索,打印post请求后,也发现提交表单个数和正在表单个数对不上(当时怀疑过是不是某个插件是不是没装,字符集对不对等),再看了下php-fpm的日志,有点信息可以参考了。

发布:JB02  
来源:脚本学堂     【大 中 小】

下面我们将创建一个复杂的表单,代码如下所示。

本文为大家分享了一个特别简单的php表单提交实例,具体的实现步骤如下:

问题来了,删除ip字段时程序不响应,在记录数1000条以上,不管是提交一条删除记录,还是全部删除记录,都是没效果的。

 

本文介绍下,在php编程中,指定函数的默认值的方法,分享二个例子,供大家学习参考下。本文转自:

 代码如下

实例代码如下:

图片 1

 

本节内容:

<form action="someform.php" method="post">
<table width="541" border="0">
  <tr>
    <td width="26%">姓名:</td>
    <td width="74%"><input type="text" name="username" value="raymond" id="username"/></td>
  </tr>
  <tr>
    <td>密码:</td>
    <td><input type="password" name="password" maxlength="10" id="password"/></td>
  </tr>
  <tr>
    <td>年龄:</td>
    <td>
      <select name="age">
      <option value=">16">小于16</option>
      <option value="16-30" selected>16-30</option>
      <option value="31-50">31-50</option>
      <option value="51-80">51-80</option>
      </select>
    </td>
  </tr>
  <tr>
    <td valign="top">自我介绍:</td>
    <td><textarea name="intro" rows="3" cols="50" id="intro">请输入您的自我介绍</textarea></td>
  </tr>
  <tr>
    <td><br />
体育爱好: </td>
    <td><input type="radio" name="fave_sport" value="tennis" checked>
网球
    <input type="radio" name="fave_sport" value="football">
足球
<input type="radio" name="fave_sport" value="baseball">
篮球
<input type="radio" name="fave_sport" value="polo">
保龄球 </td>
  </tr>
  <tr>
    <td> 开发语言:</td>
    <td><input name="from" type="hidden" id="from" value="注册表单">
      <input type="checkbox" name="languages[]" value="php" checked id="languages[]">
php
<input type="checkbox" name="languages[]" value="java" id="languages[]">
java
<input type="checkbox" name="languages[]" value="perl" id="languages[]">
perl
<input type="checkbox" name="languages[]" value="cpp" id="languages[]">
c++
<input type="checkbox" name="languages[]" value=".net" id="languages[]">
.NET
<input type="checkbox" name="languages[]" value="delphi" id="languages[]">
delphi </td>
  </tr>
  <tr>
    <td valign="top"><br>
      <label> 开发工具:</label></td>
    <td><select name="develop_ide[]" size="5" multiple id="develop_ide[]">
      <option value="ZDE" selected>Zend Studio</option>
      <option value="Eclipse">Eclipse</option>
      <option value="Editplus">Editplus</option>
      <option value="Ultraedit">Ultraedit</option>
      <option value="Other">Other</option>
      </select></td>
  </tr>
  <tr>
    <td valign="top">&nbsp;</td>
    <td><input type="submit" name="btn_submit" value="提交"/></td>
  </tr>
</table>
</form>
<form action="someform.php" method="post"> 
<table width="541" border="0"> 
 <tr> 
 <td width="26%">姓名:</td> 
 <td width="74%"><input type="text" name="username" value="raymond" id="username"/></td> 
 </tr> 
 <tr> 
 <td>密码:</td> 
 <td><input type="password" name="password" maxlength="10" id="password"/></td> 
 </tr> 
 <tr> 
 <td>年龄:</td> 
 <td> 
  <select name="age"> 
  <option value=">16">小于16</option> 
  <option value="16-30" selected>16-30</option> 
  <option value="31-50">31-50</option> 
  <option value="51-80">51-80</option> 
  </select> 
 </td> 
 </tr> 
 <tr> 
 <td valign="top">自我介绍:</td> 
 <td><textarea name="intro" rows="3" cols="50" id="intro">请输入您的自我介绍</textarea></td> 
 </tr> 
 <tr> 
 <td><br /> 
体育爱好: </td> 
 <td><input type="radio" name="fave_sport" value="tennis" checked> 
网球 
 <input type="radio" name="fave_sport" value="football"> 
足球 
<input type="radio" name="fave_sport" value="baseball"> 
篮球 
<input type="radio" name="fave_sport" value="polo"> 
保龄球 </td> 
 </tr> 
 <tr> 
 <td> 开发语言:</td> 
 <td><input name="from" type="hidden" id="from" value="注册表单"> 
  <input type="checkbox" name="languages[]" value="php" checked id="languages[]"> 
php 
<input type="checkbox" name="languages[]" value="java" id="languages[]"> 
java 
<input type="checkbox" name="languages[]" value="perl" id="languages[]"> 
perl 
<input type="checkbox" name="languages[]" value="cpp" id="languages[]"> 
c++ 
<input type="checkbox" name="languages[]" value=".net" id="languages[]"> 
.NET 
<input type="checkbox" name="languages[]" value="delphi" id="languages[]"> 
delphi </td> 
 </tr> 
 <tr> 
 <td valign="top"><br> 
  <label> 开发工具:</label></td> 
 <td><select name="develop_ide[]" size="5" multiple id="develop_ide[]"> 
  <option value="ZDE" selected>Zend Studio</option> 
  <option value="Eclipse">Eclipse</option> 
  <option value="Editplus">Editplus</option> 
  <option value="Ultraedit">Ultraedit</option> 
  <option value="Other">Other</option> 
  </select></td> 
 </tr> 
 <tr> 
 <td valign="top"> </td> 
 <td><input type="submit" name="btn_submit" value="提交"/></td> 
 </tr> 
</table> 
</form> 

1000条记录下,删除功能失效

1
[25-Sep-2014 15:19:30] WARNING: [pool www] child 28329 said into stderr: "NOTICE: PHP message: PHP Warning:  Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0"

php函数指定默认值

该表单包括了常用表单元素:单行文本框、多行文本框、单选项(radio)、多选项(checkbox),以及多选菜单。下面进行详细的说明。
 
maxlength是与密码文本框关联的属性,它限制用户输入密码的最大长度为10个字符。
 
age列表框是列表菜单,它的命名属性下都有自己的值供选择。selected是一个特定的属性选择元素,如果某个option附加有该属性,在显示时就把该项列为第一项显示。
 
intro文本框中的内容,按照rows和cols显示文字、行和列宽。
 
fave_sport是一组单选按钮(radio),我们要按组命名元素名称,比如这一组单选按钮都叫做fave_sport,用户只可选择一个,发送脚本端也只存在一个值。
 
和单选项一样,所有多选项成员也须有同名的属性,而属性名称需要添加括号[],这样就把多选项的值以数组形式发送给PHP,languages就是这种形式。
 
checked标签是指单选项和多选项中的某个值,默认已经被选择。

该表单包括了常用表单元素:单行文本框、多行文本框、单选项(radio)、多选项(checkbox)以及多选菜单。

最终在discuz官方论坛管理员帮助下解决!

提示input 变量个数超过1000,建议修改php.ini文件中的
max_input_vars,PHP从5.3.9开始增加一个变量 max_input_vars
用来限制提交的表单数量。

在php编程中,为自定义函数设定默认值,当用户调用该函数时,如果不给参数指定值,参数会用默认值顶替。

上面表单的显示画面如图5-3所示。

下面进行详细的说明:

图片 2 

我这个功能(类似于phpmysqladmin功能,读取数据库表,然后能写入编辑,然后数据库字段有128个,然后每个字段有11个input框)大概有1400多个input,(多么痛的领悟,为毛这么吊,研发一个表搞这么多字段),

例1,
 

图片 3

maxlength是与密码文本框关联的属性,它限制用户输入密码的最大长度为10个字符。

discuz官方

然后我在php.ini里面加入

复制代码代码示例:

图5-3

age列表框是列表菜单,它的命名属性下都有自己的值供选择.selected是一个特定的属性选择元素,如果某个option附加有该属性,在显示时就把该项列为第一项显示。

解决方法:在php.ini里面加入

 

<html>
<head>
<title>php函数指定默认值-www.jbxue.com</title>
</head>
<body>
<?php
function printMe($param = NULL)
{
   print $param;
}
printMe(“This is test”);
printMe();
?>
 
</body>
</html>

因为上面HTML中的form表单使用的是POST方法传递数据,所以用户提交的数据会保存到$_POST或$_REQUEST的超级全局数组中,我们根据$_POST数组中的值就可以处理提交的数据。

intro文本框中的内容,按照rows和cols显示文字、行和列宽。

max_input_vars,指的是表达提交的数量,默认值为
1000。官方添加这个变量的目的是为了更好的保护服务器不受攻击。避免堵塞。

1
2
3
max_execution_time = 30     ; Maximum execution time of each script, in seconds
max_input_time = 60     ; Maximum amount of time each script may spend parsing request data
max_input_vars = 2000

输出结果:
This is test

将上面表单中数据提交到someform.php脚本,该脚本的处理逻辑如下:

fave_sport是一组单选按钮(radio),我们要按组命名元素名称,比如这一组单选按钮都叫做fave_sport,用户只可选择一个,发送脚本端也只存在一个值。

max_input_vars = 2000

重启php-fpm后,功能正常了。看日志很重要。

例2,php函数参数默认值的使用范例,php函数参数中设置和使用默认值。
代码:
 

 代码如下

和单选项一样,所有多选项成员也须有同名的属性,而属性名称需要添加括号[],这样就把多选项的值以数组形式发送给PHP,languages就是这种形式。

实例代码:

复制代码代码示例:

//通过判断按钮的变量名是否在$_POST中定义,如果有表示该表单已提交
if(isset($_POST["btn_submit"])){
if (empty($_POST['username'])){
echo "您没有输入用户名";
exit(0);
}
if (empty($_POST['password'])){
echo "您没有输入密码: ";
exit(0);
}
echo "您的用户名: ".$_POST['user_name']."
";
echo "您的密码(明文): ".$_POST['password']."
";
echo "您的年龄: ".$_POST['age']."
";
if (!empty($_POST['languages'])){
echo "您选择的语言为:";
//处理用户选择兴趣的checkbox按钮产生的数组
foreach ($_POST['languages'] as $lang){
echo $lang. "  ";
}
} else {
echo "您没有输入任何兴趣爱好";
}
if (!empty($_POST['develop_ide'])){
echo "您使用的开发工具为:";
//处理用户多选开发工具菜单产生的数组
foreach ($_POST['develop_ide'] as $ide){
echo $ide. "  ";
}
} else {
echo "您没有选择开发工具";
}
echo "您的自我介绍: ".nl2br($_POST['intro'])."<br />";//nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />)
";
echo "网页隐藏值(通过hidden标签值传递): ".$_POST['from']."
";
}
?>

checked标签是指单选项和多选项中的某个值,默认已经被选择.

max_execution_time = 30     ; Maximum execution time of each script,
in seconds
max_input_time = 60     ; Maximum amount of time each script may spend
parsing request data
max_input_vars = 2000

<html>
  <head>
  <title>php函数参数默认值 – www.jbxue.com</title>
  </head>
  <body>
  <?php
  function textonweb ($content, $fontsize=3){
     echo “<font SIZE=$fontsize>$content</font>”;
  }
  textonweb (“A <br />”, 7);
  textonweb (“AA.<br />”);
  textonweb (“AAA. <br />”);
  textonweb (“AAAA! <br />”);
  ?>
  </body>
  </html>

上面表单的显示画面如图所示

重启php-fpm后,功能正常了。

图片 4

因为上面HTML中的form表单使用的是POST方法传递数据,所以用户提交的数据会保存到$_POST或$_REQUEST的超级全局数组中,我们根据$_POST数组中的值就可以处理提交的数据。

将上面表单中数据提交到someform.php脚本,该脚本的处理逻辑如下:

//通过判断按钮的变量名是否在$_POST中定义,如果有表示该表单已提交 
if(isset($_POST["btn_submit"])){ 
if (emptyempty($_POST['username'])){ 
echo "您没有输入用户名"; 
exit(0); 
} 
if (emptyempty($_POST['password'])){ 
echo "您没有输入密码: "; 
exit(0); 
} 
echo "您的用户名: ".$_POST['user_name']." 
"; 
echo "您的密码(明文): ".$_POST['password']." 
"; 
echo "您的年龄: ".$_POST['age']." 
"; 
if (!emptyempty($_POST['languages'])){ 
echo "您选择的语言为:"; 
//处理用户选择兴趣的checkbox按钮产生的数组 
foreach ($_POST['languages'] as $lang){ 
echo $lang. " "; 
} 
} else { 
echo "您没有输入任何兴趣爱好"; 
} 
if (!emptyempty($_POST['develop_ide'])){ 
echo "您使用的开发工具为:"; 
//处理用户多选开发工具菜单产生的数组 
foreach ($_POST['develop_ide'] as $ide){ 
echo $ide. " "; 
} 
} else { 
echo "您没有选择开发工具"; 
} 
echo "您的自我介绍: ".nl2br($_POST['intro'])."<br />";//nl2br(),在字符串中的每个新行 (n) 之前插入 HTML 换行符 (<br />) 
"; 
echo "网页隐藏值(通过hidden标签值传递): ".$_POST['from']." 
"; 
} 
?>

以上就是为大家分享的php表单提交实例,帮助大家更好地学习php表单提交,希望大家都有所收获。

您可能感兴趣的文章:

  • php获取从html表单传递数组的方法
  • php 表单数据的获取代码
  • form表单传递数组数据、php脚本接收的实例

相关文章