处理,验证和清理数据

时间:2014-02-04 21:51:23

标签: php forms validation

好的,我已经坚持了一段时间了。我有一张表格。表单位于“index.php”中。 我将表单数据发送到名为“processuserform”的php文件。我提取所有输入并将它们分配给它们自己的变量。然后,我接受了每个变量并通过一个函数来运行它们,我相信它会修剪并剥离任何不需要的字符的输入。在同一个函数中,我将任何特殊字符转换为HTML表单。接下来,我尝试验证电子邮件。我为此使用了PHP过滤器。我不确定很多事情,并且一直在寻找答案或至少要遵循一条路径,以便我可以学习如何正确地消毒和验证信息。我的印象是,我需要处理与其他所有密码不同的密码,并在了解如何验证和消毒信息之后了解这些密码。你在下面看到的是我从网上各种来源收集的内容,这可能最终成为一种设计网页的错误方式。我已经使用Javascript实现了客户端验证,但我担心我的网站,因为我没有服务器端验证。如果有关闭javascript的人输入了错误的信息,会发生什么?他们如何被送回注册部分并告诉他们犯了错误。当他们错误地输入信息时,我不希望人们被引导到空白屏幕。我只想在服务器端验证我的网站。我实际上已经尝试了3个月。并不是说我不聪明,而是找不到一种方法去做这件事。通过这么多方式,我对采取的路径以及下一步该做什么感到困惑。我将把我的代码留在下面,希望你们对我有同情心和耐心。提前谢谢。

 ==========================================================================
  Form
 ==========================================================================
 <form method="POST" name="signup" action="php/processuserform.php">

 <input id="firstname" onkeyup="validateFirstName()"  placeholder="First Name" 
 type="text" /><label id="firstnameprompt"></label>

 <br><br>

 <input id="lastname" onkeyup="validateLastName()"  placeholder="Last Name" 
 type="text"/>
 <label id="lastnameprompt"></label>

 <br><br>


 <input id="Email" onkeyup="validateEmail()"  placeholder="Email" type="text" /><label 
 id="Emailprompt"></label>

 <br /><br />

 <input id="Password" onkeyup="validatePassword()"  placeholder="Create Password" 
 type="password" /><label id="Passwordprompt"></label>

 <br /><br />


 <strong>Male</strong><input id="Gender" type="radio" name="sex" value="male">
 <strong>Female</strong><input id="Gender" type="radio" name="sex" value="female">

 <br /><br />

 Click "Submit" if you agree to <a href="#">"Terms And Conditions"</a>
 <br>
 <input id="submit" onclick="return validateUserRegistration()" value="Submit" 
 type="submit" name="submit"/><label id="submitprompt"></label>

 <br /><br />
 <hr>
 </form> 





 ====================================================================
  //How I am Processing it.
 ====================================================================


 <?php

 //====================================
 //Variables

 $first_name= check_input($_POST['firstname']);
 $last_name= check_input($_POST['lastname']);
 $email= check_input($_POST['Email']);
 $password= check_input($_POST['Password']);
 $gender= check_input($_POST['Gender');

 //====================================
 //Trim and strip first name

 function check_input($first_name)
 { 
 $first_name = trim($first_name);
 $first_name = stripslashes($first_name);
 $first_name = htmlspecialchars($first_name);
 return $first_name; }; 

 //====================================
 //Trim and strip last name

 function check_input($last_name)
 { 
 $last_name = trim($last_name);
 $last_name = stripslashes($last_name);
 $last_name = htmlspecialchars($last_name);
 return $last_name; }; 

 //====================================
 //Trim and strip email

 function check_input($email)
 { 
 $email = trim($email);
 $email = stripslashes($email);
 $email = htmlspecialchars($email);
 return $email; }; 

 //=====================================
 //Trim and Strip Password

 function check_input($password)
 { 
 $password = trim($password);
 $password = stripslashes($password);
 $password = htmlspecialchars($password);
 return $password; }; 
 //======================================
 //Trim and strip Gender
 function check_input($gender)
 { 
 $gender = trim($gender);
 $gender = stripslashes($gender);
 $gender = htmlspecialchars($gender);
 return $gender; }; 

 //=========================================================
 //Validate Email

 $email

 if(filter_var($email,FILTER_VALIDATE_EMAIL))
 {
 echo 'This should be a valid email';
 }
 else
 {
 echo 'You need some guidance':
 }


 //========================================================


  $hostname="this is right";
  $username="this is right";
  $password="this is right";
  $dbname="this is right";

   $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);

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

  header("Location: pages/profile.php")
  ?>

1 个答案:

答案 0 :(得分:1)

在您从所有用户输入的变量中删除不需要的字符后,您现在也必须验证它们!

根据我过去的经验,作为开发人员,您应该拥有的一个假设是永远不要相信所有用户都知道表单的正确输入!永远不要相信用户!因此,考虑到这一点,我们去验证服务器端。

最简单的验证只是确保用户输入可行的数据(我不知道正确的方式),以保持应用程序的质量。

我们以你的一个变量为例。

$email

好的,您进行了验证以检查它是否是电子邮件,但有更好的方法来验证它,您还需要检查其他因素,例如用户是否输入空格等。

function validateEmail($email) 
    {
    //Regex is a great way to validate email. This checks if it has one @ sign and also the lengths of the email.
        if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) 
            {
        // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
                return false;
            }
//check if the input was something other than a whitespace.
//Even if you put inside the textfield "required" in html, a whitespace will still be a   //valid input so you better check to make sure that users aren't allowed to enter empty //fields!
         if (!preg_match("/^[a-zA-Z ]*$/",$email))
            {
                return false;
            }
        return true;
    }

这只是您如何使用正则表达式验证电子邮件的示例。

您甚至可以验证域是否是真实域,或者您可以验证电子邮件是否包含任何亵渎性词语等。关键是要知道你不想进入你的系统。

确保您还要清理查询以避免任何攻击。

希望有这种帮助!

干杯!