一次将所有条目从登录表单传递到数据库

时间:2013-10-15 16:12:46

标签: php database

我在phpmyadmin(在wamp服务器中)创建了数据库。我有一个冗长的登录表单来从中获取条目。 只是登录表单代码的一部分:

            <label>

           <span>First name</span>

           <input type="text" size ="25" placeholder="Your Name" class="input_text"onfocus="if(this.value==this.defaultValue)this.value=''"    
    onblur="if(this.value=='')this.value=this.defaultValue" 
    value="" name="f_name" id="name"/>

        </label>

         <label>

           <span> Middle Name</span>

           <input type="text" size ="25" class="input_text" placeholder="Father's name"  name="m_name" onfocus="if(this.value==this.defaultValue)this.value=''"    
    onblur="if(this.value=='')this.value=this.defaultValue" 
    value="" id="middle name"/>

        </label>

         <label>

            <span>Last Name</span>
           <input type="text" size ="25" class="input_text" placeholder="Surname"  name="l_name" onfocus="if(this.value==this.defaultValue)this.value=''"    
    onblur="if(this.value=='')this.value=this.defaultValue" 
    value="" id="last name"/>

     <br>

我如何使用php检索条目(仅显示一个条目作为示例):

    if(isset($_POST['f_name'])){
$name .= $_POST['f_name'];}

然后使用以下命令将其传递给数据库:

mysql_query($sql,$con)

我的问题是不是单独添加每个条目,有没有比这更短的编码方式?我的意思是我们可以将所有元素的名称属性一次性传递给某个函数吗?还是以任何方式减少这份工作?

2 个答案:

答案 0 :(得分:1)

当然,唯一的要求是,所有内容都会进入单个表格。

HTML表单存根:

<input name="param1">
<input name="param2">
<input name="param3">

插入的基本示例:

<?php

mysql_query(
  "INSERT INTO `table` (`param1`, `param2`, `param3`) VALUES
    ('{$_POST["param1"]}', '{$_POST["param2"]}', '{$_POST["param3"]}')"
);

?>

请确保所有数据都已正确转义和验证(该示例仅为插图且非常不安全)。


我想扩展我的答案,因为接受的答案基本上表明如何不这样做,因为任何数据都只是直接进入数据库。任何软件中最基本的经验法则是“永远不要相信任何用户提供的数据”。您必须验证并清理任何内容。

让我们考虑以下登录表单:

<form action="/login.php" method="post">
  <input type="email" name="email">
  <input type="password" name="password">
  <input type="submit" value="Login">
</form>

非常基本,但它已经比大多数使用用户名的登录表单更好,这些用户名在每个用户配置文件中也是可见的。使用电子邮件地址更安全,因为大多数网站都隐藏用户的电子邮件地址,确保只有注册的用户知道她或他用来注册的电子邮件地址。

现在到验证部分。我们只考虑两个实体,但仍然需要对它们进行验证!

<?php

// Use proper PHP filters to validate the user input.
$email = filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL, FILTER_REQUIRE_SCALAR);
$password = filter_input(INPUT_POST, "password", FILTER_UNSAFE_RAW, FILTER_REQUIRE_SCALAR);

// Only continue if both are valid.
if ($email !== false && $password !== false) {
  // Use prepared statements and let the database take care of escaping!
  $user = $db->select("SELECT * FROM `users` WHERE `email` = ?", "s", [ $email ]);

  // Don't tell the user trying to sign in which of both entities was wrong!
  if ($db->numRows === 0 || password_verify($password, $user["password"]) === false) {
    throw new LoginException("We either don't know the email address or the password was wrong!");
  }

  // Well, everything is fine, go on ...
  session_start();
  echo "Welcome {$user["name"]}!";
}
// Be as helpful as possible.
elseif (empty($_POST["email"]) || empty($_POST["password"])) {
  throw new LoginException("Email and password are mandatory!");
}
// The password can't be invalid, so it must be the email address.
else {
  throw new LoginException("The email address is invalid!");
}

?>

如果您的表单变得更复杂,您的验证会变得更复杂,这是一件好事。

答案 1 :(得分:1)

以下是我如何解决这个问题。我将表单字段放在变量中。例如,在您的html表单中,而不是

<input type="text" size ="25" class="input_text" placeholder="Father's name"  name="m_name" onfocus="if(this.value==this.defaultValue)this.value=''"    
    onblur="if(this.value=='')this.value=this.defaultValue" 
    value="" id="middle name"/>

使用

<input type="text" size ="25" class="input_text" placeholder="Father's name"  name="m_name" onfocus="if(this.value==this.defaultValue)this.value=''"    
    onblur="if(this.value=='')this.value=this.defaultValue" 
    value="" id="login[middle name]"/>

这样,在你的php代码中,你可以遍历登录项。

foreach($_POST['login'] as $key=>$loginItem)