繁体   English   中英

PHP 验证表单

[英]PHP Validating Form

我无法在 php 教程中显示我在 printf 中调用的输出。 我只是按照教程进行操作,但仍然无法弄清楚在本地主机的 printf 中显示变量时出了什么问题。 有没有人可以帮助我。 谢谢你。

    <?php
            $name = '';
            $password = '';
            $gender = '';
            $color = '';
            $languages = [];
            $comments = '';
            $tc = '';
        
           if (isset($_POST['submit'])) {
                if (isset($_POST['name'])) {
                    $name = $_POST['name'];
                };
                if (isset($_POST['password'])) {  
                    $password = $_POST['password'];
                };
                if (isset($_POST['gender'])) {
                    $gender = $_POST['gender'];
                };
                if (isset($_POST['color'])) {
                    $color = $_POST['color'];
                };
                if (isset($_POST['languages'])) {
                    $languages = $_POST['languages'];
                };
                if (isset($_POST['comments'])) {
                    $comments = $_POST['comments'];
                };
                if (isset($_POST['tc'])) {
                    $tc = $_POST['tc'];
                };
            //here's the problem i cant resolve printing out the output//
            printf('User name: %s
                <br>Password: %s
                <br>Gender: %s
                <br>Color: %s
                <br>Language(s): %s
                <br>Comments: %s
                <br>T&amp;C: %s',
                htmlspecialchars($name, ENT_QUOTES),
                htmlspecialchars($password, ENT_QUOTES),
                htmlspecialchars($gender, ENT_QUOTES),
                htmlspecialchars($color, ENT_QUOTES),
                htmlspecialchars(implode('', $languages), ENT_QUOTES),
                htmlspecialchars($comments, ENT_QUOTES),
                htmlspecialchars($tc, ENT_QUOTES));
        
                
            }
        ?>
        
        
        <form action="" 
            method="post">
              User name:  <input type="text" name="name"><br>
              Password:  <input type="password" value="password"><br>
              Gender:
              <input type="radio" name="gender" value="f"> female
              <input type="radio" name="gender" value="m"> male
              <input type="radio" name="gender" value="o"> other<br/>
              Favorite color:
              <select name="color">
                <option value="">Please select</option>
                <option value="#f00">red</option>
                <option value="#0f0">green</option>
                <option value="#00f">blue</option>
        </select><br>
            Languages spoken:
            <select name="languages[]"multiple size="3">
                <option value="en">English</option>
                <option value="fr">French</option>
                <option value="it">Italian</option>
                </select><br>
                Comments: <textarea name="comments"></textarea><br>
            <input type="checkbox" name="tc" value="ok"> I accept the T&amp;C<br> 
        <input type="submit" value="Register">
        
        </form>`

这里的问题是if (isset($_POST['submit']))没有任何名为submit的表单字段,它永远不会执行。 删除 if Condition with submit or Else 将 sumbit 按钮名称设为 Submit

<input type="submit" value="Register" name="submit">

您之前的代码中的错误是:

  1. 没有分号; if语句结束后需要。
  2. 没有为表单中的密码输入指定name属性。
  3. if (isset($_POST['submit'])) {...}一样发布表单数据,而不在表单中指定name="submit"属性。
  4. 无效使用implode函数将生成输出,如enfrit ,反之亦然。

附加提示

  1. 为每个input添加required属性,以防止发送空表单数据。
  2. 您已经在表单标签中指定了method="post" ,因此无需像if (isset($_POST['fieldname'])) {...}那样验证每个输入字段。 if (isset($_POST['submit'])) {...}会将所有表单数据作为POST方法发送。

最后,这是您更新的代码。

<?php

if (isset($_POST['submit'])) {
    $name = '';
    $password = '';
    $gender = '';
    $color = '';
    $languages = [];
    $comments = '';
    $tc = '';

    if (isset($_POST['name'])) {
        $name = $_POST['name'];
    }
    if (isset($_POST['password'])) {
        $password = $_POST['password'];
    }
    if (isset($_POST['gender'])) {
        $gender = $_POST['gender'];
    }
    if (isset($_POST['color'])) {
        $color = $_POST['color'];
    }
    if (isset($_POST['languages'])) {
        $languages = $_POST['languages'];
    }
    if (isset($_POST['comments'])) {
        $comments = $_POST['comments'];
    }
    if (isset($_POST['tc'])) {
        $tc = $_POST['tc'];
    }

    //print output
    printf('User name: %s
    <br>Password: %s
    <br>Gender: %s
    <br>Color: %s
    <br>Language(s): %s
    <br>Comments: %s
    <br>T &amp; C: %s
    <br><br>',
    htmlspecialchars($name, ENT_QUOTES),
    htmlspecialchars($password, ENT_QUOTES),
    htmlspecialchars($gender, ENT_QUOTES),
    htmlspecialchars($color, ENT_QUOTES),
    htmlspecialchars(implode(', ', $languages), ENT_QUOTES),
    htmlspecialchars($comments, ENT_QUOTES),
    htmlspecialchars($tc, ENT_QUOTES));
}

?>

<form action="" method="post">
    User name: <input type="text" name="name">
    <br>
    Password: <input type="password" name="password">
    <br>
    Gender:
    <input type="radio" name="gender" value="f"> female
    <input type="radio" name="gender" value="m"> male
    <input type="radio" name="gender" value="o"> other
    <br>
    Favorite color:
    <select name="color">
        <option value="">Please select</option>
        <option value="#f00">red</option>
        <option value="#0f0">green</option>
        <option value="#00f">blue</option>
    </select>
    <br>
    Languages spoken:
    <select name="languages[]" multiple size="3">
        <option value="en">English</option>
        <option value="fr">French</option>
        <option value="it">Italian</option>
    </select>
    <br>
    Comments: <textarea name="comments"></textarea>
    <br>
    <input type="checkbox" name="tc" value="ok"> I accept the T &amp; C
    <br>
    <input type="submit" name="submit" value="Register">
</form>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM