【问题标题】:What do I do with form data after I have validated and sanitized it?验证和清理表单数据后,我该如何处理?
【发布时间】:2013-12-24 09:12:52
【问题描述】:

(我找到了但还是不明白){HTML form PHP post to self to validate or submit to new page}

如果这个问题在另一个地方得到更好的解释,我很抱歉,但我已经被困了几个小时,已经搜索过,然后就放弃了。我正在阅读有关如何使用 PHP 验证、清理和处理表单的 W3c 网站教程。一切都很顺利(至少我认为确实如此),直到是时候对这些数据做点什么了。我现在将代码展示给您,并在代码之后进一步说明我的立场和问题:

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

<label for="first name"></label><input id="first name" name="first_name"    placeholder="First Name" type="text" value="<?php echo $firstname;?>" /> <span  class="error">* <?php echo $firstnameErr;?></span>

<label for="last_name"></label><input id="last name" name="last_name"   placeholder="Last Name" type="text" value="<?php echo $lastname;?>" />
<span class="error">* <?php echo $lastnameErr;?></span>
<br><br>


<label for="email"></label><input id="email" name="email" placeholder="Email"    type="text" value="<?php echo $email;?>" />
<span class="error">* <?php echo $emailErr;?></span>
<br /><br />


<label for="password"></label><input id="password" name="password"    placeholder="Create Password" type="password" />
<span class="error">* <?php echo $passwordErr;?></span>
<br /><br />

<label for="male"><strong>Male</strong></label> 
<input id="male" value="male" <?php if (isset($gender) && $gender=="male") echo   "checked";?> name="gender" type="radio" /> 
<label for="female"><strong>Female</strong></label> <input id="female" value="female"     

<?php if (isset($gender) && $gender=="female") echo "checked";?> name="gender" type="radio" />

<span class="error">* <?php echo $genderErr;?></span>
<br /><br />

<label for="submit">"I Agree To <a href="#">Terms And Conditions"</a></label> <input id="submit" value="Submit" type="submit" name="submit"/><br /><br />

<p><span class="error">* required field.</span></p>
<hr>

我对很多事情感到困惑。我应该保持“表单操作”原样,还是应该将其更改为“welcome.php”。如果我将其更改为“welcome.php”,我是否仍然包含“htmlspecialchars”?我要正在使用 MSQLI。我已经能够连接到我的数据库,但是如何将用户数据转换为服务器的可行信息?我是否继续使用我在这个 HTML 表单中创建的变量?我知道我需要将某种变量放入查询字符串中然后确保我也退出它比我能处理一些不好的点。感谢您的帮助,祝您节日快乐。

下面是我的“welcome.php”。它实际上被称为不同的东西,但目前它是“welcome.php”。再次感谢。

  <?php

    $hostname="social89.db";
    $username="social89";
    $password="P!!";
    $dbname="social89";

  $db_conx = mysqli_connect($hostname, $username, $password) OR DIE ("Unable to
  connect to database! Please try again later.");

  if(mysqli_connect_errno()){
  echo mysqli_connect_error();
  exit();
  }

  $select = mysqli_select_db($db_conx,$dbname);

  $firstname= $_POST["first_name"];
  $lastname= $_POST["last_name"];
  $email= $_POST["email"];
  $password= $_POST["password"];
  $gender= $_POST["gender"];

  mysqli_query($db_conx,"INSERT INTO users (firstname, lastname, email, password, gender)
  VALUES ('$firstname', '$lastname', '$email', '$password', '$gender')");
  mysqli_close($db_conx);

  header("Location: ERASETHISprofile.php")
  ?>

【问题讨论】:

    标签: php html forms validation


    【解决方案1】:

    哦,从哪里开始。

    一开始我猜。

    “Post to self”是指让呈现表单的相同脚本接收表单数据。表单操作使用服务器变量 $_SERVER['PHP_SELF'] 指向同一个 php 脚本。

    这意味着您可以执行以下操作:

    <?php 
    
    if (!empty($_POST)) { // if $_POST isn't empty, the user submitted the form
        // validate 
        if ($validationPassed) { 
            // insert to db
        } else {
            // tell the user they messed up
            $error = 'Hey, you! Email address was incorrect.';
        }
    }
    
    //
    ?>
    
    <html> ...
    
    <?php if (isset($error)) { echo $error; } ?>
    
    // form
    

    以上内容非常基础。您需要为验证失败的特定字段设置错误,以便为用户提供更多关于更正内容的线索。

    htmlspecialchars() - 将特殊字符转换为 HTML 实体

    简而言之,如果您信任输入字符串,则不需要它。所以“welcome.php”是你自己手动输入到文档中的,是可信的,不需要转换特殊字符——字符串中没有任何特殊字符。如果该文本来自用户,它可能包含例如&lt;h2&gt;Hello&lt;/h2&gt;。如果不使用此函数,您的页面可能会在 H2 中呈现 Hello。

    下一部分推荐阅读:How can I prevent SQL injection in PHP?

    目前您很容易受到攻击,因为您正在从表单中获取数据并且没有对其进行验证或清理。必读的 XKCD 漫画:http://xkcd.com/327/。除了 SQL 注入的风险之外,还有垃圾数据最终进入数据库的风险。

    PHP 中的验证:filter_var 示例:http://www.php.net/manual/en/filter.examples.validation.php

    【讨论】:

    • 感谢您的回复。那么是否有两种不同的方式来验证和清理信息? “welcome.php”是我在尝试使用 PHP 验证和清理“index.php”文件之前所做的。(我放下的第一个代码。)我非常感谢这些链接,并将检查它们。另外,我应该在表格操作下放置什么?它是否应该是另一个文件的路径,向它发送表单数据,然后进一步对其进行清理和验证?喜欢“welcome.php”吗?然后,一旦我将其发送到那里,就开始对其进行进一步验证和清理?
    • 非常感谢您的帮助和耐心。
    • 嗯,这取决于你想要什么样的用户体验。一种常见的方法是使用外部脚本 (welcome.php),将其中的状态信息放入会话变量 ($_SESSION['success'] = true) 并使用页面中的会话数据重定向回原始脚本。这称为 POST-Redirect-Get:stackoverflow.com/questions/4142809/…
    • 太棒了。对此,我真的非常感激。我实际上希望它成为一个社交网络。我觉得我还有很长的路要走。
    • 学习新东西需要时间。还有很多东西要学。 SO 是一种宝贵的资源。当您掌握基础知识时,有很多东西需要研究:框架等,它们可以帮助您更好地构建代码以实现维护和可读性。进一步(抱歉!)阅读:stackoverflow.com/questions/2119083/…
    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 2017-07-28
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2014-04-08
    • 2017-06-11
    相关资源
    最近更新 更多