Tutorial PHP: procesamiento y validación de formularios

Formularios y entrada del usuario

procesamiento de formularios

Al procesar formularios HTML, PHP puede hacer que los elementos del formulario de la página HTML estén disponibles automáticamente para los scripts PHP.

# form.html 文件代码

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
 
<form action="welcome.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
 
</body>
</html>

# welcome.php 文件代码

欢迎<?php echo $_POST["fname"]; ?>!<br>
你的年龄是 <?php echo $_POST["age"]; ?>  岁。

Obtener datos del menú desplegable

Selección de radio del menú desplegable

Utilice la etiqueta de selección para configurar las tres opciones del menú desplegable. El formulario utiliza el método GET para obtener datos. Si el valor del atributo de acción está vacío, significa que se envía al script actual. Podemos obtener el valor de el menú desplegable a través del atributo de nombre de seleccionar:

<?php
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q) {
    
    
        if($q =='RUNOOB') {
    
    
                echo '菜鸟教程<br>http://www.runoob.com';
        } else if($q =='GOOGLE') {
    
    
                echo 'Google 搜索<br>http://www.google.com';
        } else if($q =='TAOBAO') {
    
    
                echo '淘宝<br>http://www.taobao.com';
        }
} else {
    
    
?>
<form action="" method="get"> 
    <select name="q">
        <option value="">选择一个站点:</option>
        <option value="RUNOOB">Runoob</option>
        <option value="GOOGLE">Google</option>
        <option value="TAOBAO">Taobao</option>
    </select>
    <input type="submit" value="提交">
    </form>
<?php
}
?>

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Menú desplegable selección múltiple

Si el menú desplegable es de selección múltiple (multiple="multiple"), podemos obtenerlo como una matriz configurando select name="q[]"

<?php
$q = isset($_POST['q'])? $_POST['q'] : '';
if(is_array($q)) {
    
    
    $sites = array(
            'RUNOOB' => '菜鸟教程: http://www.runoob.com',
            'GOOGLE' => 'Google 搜索: http://www.google.com',
            'TAOBAO' => '淘宝: http://www.taobao.com',
    );
    foreach($q as $val) {
    
    
        // PHP_EOL 为常量,用于换行
        echo $sites[$val] . PHP_EOL;
    }
      
} else {
    
    
?>
<form action="" method="post"> 
    <select multiple="multiple" name="q[]">
    <option value="">选择一个站点:</option>
    <option value="RUNOOB">Runoob</option>
    <option value="GOOGLE">Google</option>
    <option value="TAOBAO">Taobao</option>
    </select>
    <input type="submit" value="提交">
    </form>
<?php
}
?>

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

formulario de botón de opción

Los valores del atributo de nombre en el formulario del botón de opción son consistentes, pero los valores de los valores son diferentes.

<?php
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q) {
    
    
        if($q =='RUNOOB') {
    
    
                echo '菜鸟教程<br>http://www.runoob.com';
        } else if($q =='GOOGLE') {
    
    
                echo 'Google 搜索<br>http://www.google.com';
        } else if($q =='TAOBAO') {
    
    
                echo '淘宝<br>http://www.taobao.com';
        }
} else {
    
    
?><form action="" method="get"> 
    <input type="radio" name="q" value="RUNOOB" />Runoob
    <input type="radio" name="q" value="GOOGLE" />Google
    <input type="radio" name="q" value="TAOBAO" />Taobao
    <input type="submit" value="提交">
</form>
<?php
}
?>

Insertar descripción de la imagen aquí

casilla de verificación

casilla de verificación Una casilla de verificación puede seleccionar múltiples valores, algo similar a un menú desplegable con múltiples selecciones.

<?php
$q = isset($_POST['q'])? $_POST['q'] : '';
if(is_array($q)) {
    
    
    $sites = array(
            'RUNOOB' => '菜鸟教程: http://www.runoob.com',
            'GOOGLE' => 'Google 搜索: http://www.google.com',
            'TAOBAO' => '淘宝: http://www.taobao.com',
    );
    foreach($q as $val) {
    
    
        // PHP_EOL 为常量,用于换行
        echo $sites[$val] . PHP_EOL;
    }
      
} else {
    
    
?><form action="" method="post"> 
    <input type="checkbox" name="q[]" value="RUNOOB"> Runoob<br> 
    <input type="checkbox" name="q[]" value="GOOGLE"> Google<br> 
    <input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br>
    <input type="submit" value="提交">
</form>
<?php
}
?>

Insertar descripción de la imagen aquí

validación de formulario

Debemos tener en cuenta la seguridad al procesar formularios PHP. Para evitar piratas informáticos y spam, debemos realizar una verificación de seguridad de los datos en el formulario.

Ejemplo de validación de formulario

Insertar descripción de la imagen aquí

Campo Reglas de validación
nombre debe. +solo puede contener letras y espacios
Correo electrónico debe. + debe ser una dirección de correo electrónico válida (contiene '@' y '.')
URL Opcional. Si está presente, debe contener una URL válida.
Observación Opcional. Campos de entrada de varias líneas (campos de texto)
género debe. debe elegir uno
  • campo de texto
名字: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
网址: <input type="text" name="website" value="<?php echo $website;?>">
<span class="error"><?php echo $websiteErr;?></span>
  • un solo botón
性别:
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?>  value="female"><input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?>  value="male"><span class="error">* <?php echo $genderErr;?></span>

Prevención de ataques XSS: Evite que $_SERVER["PHP_SELF"] sea explotado]

¡Los piratas informáticos pueden utilizar la variable $_SERVER["PHP_SELF"]!

Si la parte del formulario del código está escrita así:

# test_form.php为当前php脚本名,也可以写成 action="<?php echo $_SERVER["PHP_SELF"]

<form method="post" action="test_form.php">

El usuario ingresará la siguiente dirección en la barra de direcciones del navegador:

http://www.runoob.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

La URL anterior se analizará en el siguiente código y se ejecutará:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Se agregó una etiqueta de secuencia de comandos al código y se agregó un comando de alerta. Este código Javascript se ejecutará cuando se cargue la página (el usuario verá un cuadro emergente)

¿Cómo evitar que $_SERVER["PHP_SELF"] sea explotado?

$_SERVER["PHP_SELF"] se puede evitar utilizando la función htmlspecialchars().

Mostrar directorio de mensajes de error

Se han agregado scripts a cada campo que mostrarán mensajes de error si se ingresa información incorrecta. (Si el usuario envía el formulario sin completar la información, se generará un mensaje de error):

<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
名字: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
   .
   .
   .

Coincidencia regular: correo electrónico de verificación y directorio URL

preg_match — realiza coincidencia de expresiones regulares

gramática:

int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] ) 
# 1. 验证名称,检测 name 字段是否包含字母和空格

$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
  $nameErr = "只允许字母和空格"; 
}


# 2. 验证邮件,检测 e-mail 地址是否合法

$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
  $emailErr = "非法邮箱格式"; 
}


# 3. 验证 URL

$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
  $websiteErr = "非法的 URL 的地址"; 
}

Recopilar datos del formulario: directorios $_GET y $_POST

  • variable $_GET

La información enviada desde un formulario con el método GET es visible para todos (se mostrará en la barra de direcciones del navegador) y existen límites en la cantidad de información enviada.

  • Por lo tanto, este método no debe utilizarse al enviar contraseñas u otra información confidencial.

Debido a que las variables aparecen en la URL, puede marcar la página como favorita. En algunos casos esto es útil.

  • El método HTTP GET no es adecuado para valores de variables grandes. Su valor no puede exceder los 2000 caracteres.
  • variable $_POST

La información enviada desde un formulario con el método POST es invisible para cualquier persona (no se mostrará en la barra de direcciones del navegador) y no hay límite en la cantidad de información enviada.

  • variable $_REQUEST

La variable $_REQUEST predefinida incluye GET, _GET,GRAMOET , _POST y el contenido de $_COOKIE.

La variable $_REQUEST se puede utilizar para recopilar datos de formularios enviados mediante los métodos GET y POST.

Supongo que te gusta

Origin blog.csdn.net/a772304419/article/details/133396943
Recomendado
Clasificación