【问题标题】:$_POST error saving mysql database$_POST 保存mysql数据库时出错
【发布时间】:2013-05-16 09:49:07
【问题描述】:

我有这个代码,这是从电子邮件中提供的链接注册用户。所以ID和Email是通过表单获取并显示,然后检查是否有用户然后它会在字段上显示内容,那么它只是一个更新。现在我要做的是创建,因为链接中提供给用户的 ID 还不存在。这是Register.php文件中的代码

<?php

    load_function('database.php');

    if(!empty($_GET['user_id']) && !empty($_GET['cbemail'])) 
    {
        $user_id = base64_decode($_GET['user_id']);
        $email = base64_decode($_GET['cbemail']);   

        $employee = get_employee($user_id,$email);

    }

        /*$first_name = $_POST['first_name'];
        $middle_name = $_POST['middle_name'];
        $last_name = $_POST['last_name'];
        $suffix = $_POST['suffix'];
        $gender = $_POST['gender'];
        $date_birth = $_POST['date_birth'];
        $cbemail = $_POST['cbemail'];
        $locality_id = $_POST['locality_id'];
        $home_phone = $_POST['home_phone'];
        $mobile_phone = $_POST['mobile_phone'];*/

?>

<div id="main-content">
    <div id="emp_registrationform">
      <form action="" method="post">
        <table width="600" border="0">
        <h1>Create Employee</h1>
          <tr>
            <td class="align-right"><label for="user_id">User</label>
            <input type="text" name="user_id" id="user_id" 
             value="<?php if(isset($user_id)){echo $user_id ; } ?>"/></td>
            </td>
          </tr>
          <tr>
            <td class="align-right"><label for="first_name">First Name</label>
              <input type="text" name="first_name" id="first_name" value='<?php echo $employee['first_name'] ?>'/></td>
            <td><label for="birth_date">Birth Date</label>
              <input type="text" name="birth_date" id="birth_date" value='<?php echo $employee['date_birth'] ?>'/></td>
          </tr>
          <tr>
            <td class="align-right"><label for="middle_name">Middle Name</label>
              <input type="text" name="middle_name" id="middle_name" value='<?php echo $employee['middle_name'] ?>'/></td>
            <td><label for="cbemail">Email</label>
              <input type="text" name="cbemail" id="cbemail" 
               value="<?php if(isset($email)){echo $email ; } ?>"/></td>
          </tr>
          <tr>
            <td class="align-right"><label for="last_name">Last Name</label>
              <input type="text" name="last_name" id="last_name" value='<?php echo $employee['last_name'] ?>'/></td>
            <td><label for="locality_id">Locality ID</label>
              <input type="text" name="locality_id" id="locality_id" value='<?php echo $employee['locality_id'] ?>'/></td>
          </tr>
          <tr>
            <td class="align-right"><label for="suffix">Suffix</label>
              <input type="text" name="suffix" id="suffix" value='<?php echo $employee['suffix'] ?>'/></td>
            <td><label for="home_phone">Phone(Home)</label>
              <input type="text" name="home_phone" id="home_phone" value='<?php echo $employee['home_phone'] ?>'/></td>
          </tr>
          <tr>
            <td class="align-right"><label for="gender">Gender</label>
              <select>
                <option selected><?php echo  $employee['gender'] ?></option>
                <option value="male">Male</option>
                <option value="female">Female</option>
              </select></td>
            <td><label for="mobile_phone">Phone(Mobile)</label>
              <input type="text" name="mobile_phone" id="mobile_phone" value='<?php echo  $employee['mobile_phone'] ?>'/></td>
          </tr>
           <td class="align-right">
              <input type="submit" id="submit-btn" value="Create Employee" />
           </td>
           <td>&nbsp;</td>
        </table>
      </form>
    </div>
  </div>

我的问题是这些数据,在保存到数据库时没有被捕获。我在数据库中的功能如下。

function add_employee($user_id, $first_name, $middle_name, $last_name, 
                      $suffix, $gender, $date_birth, $cbemail, 
                      $locality_id, $home_phone, $mobile_phone) {
    $db   =  load_db();
    $sql = "INSERT into employees (
            user_id, first_name, middle_name, last_name, 
            suffix, gender, date_birth, cbemail,
            locality_id, home_phone, mobile_phone 
            ) VALUES (
            $user_id, $first_name, $middle_name, $last_name, 
            $suffix, $gender, $date_birth, $cbemail,
            $locality_id, $home_phone, $mobile_phone
            )";
    $result = $db->query($sql);
}

是的,我需要 POST,但我不知道如何在输入框的值字段中捕获“值”。

提交按钮将在这行代码中重定向。

if(isset($_POST['save_user'])){
    add_employee($_POST['user_id'], $_POST['first_name'], $_POST['middle_name'], $_POST['last_name'], 
                 $_POST['suffix'], $_POST['gender'], $_POST['date_birth'], $_POST['cbemail'], 
                 $_POST['locality_id'], $_POST['home_phone'], $_POST['mobile_phone']); 

所以有什么想法吗?我希望你能理解这个问题。

【问题讨论】:

  • 有时我希望有一个密切的原因是“请参数化”。将 PHP/MySQL 问题减少 95% :)

标签: php mysql http-post


【解决方案1】:

对于要存储在 Mysql 数据库中的字符串,您需要使用 ''(引号)。

所以对于像 $_POST['first_name'] 这样的字符串,使用 '$_POST['first_name']'

顺便说一句,为了安全起见,尝试使用参数化查询,

那你应该很好。

【讨论】:

    【解决方案2】:

    SQL 中的字符串值必须用引号引起来。您正在转储数据而不引用它。这是无效的 SQL。

    使用paramaterized queries,这些将自动引用您的数据并转义以消除您巨大的 SQL 注入安全漏洞。

    【讨论】:

      【解决方案3】:

      使用这个。

      function add_employee($user_id, $first_name, $middle_name, $last_name, 
                        $suffix, $gender, $date_birth, $cbemail, 
                        $locality_id, $home_phone, $mobile_phone) {
      $db   =  load_db();
      $sql = "INSERT into employees (
              user_id, first_name, middle_name, last_name, 
              suffix, gender, date_birth, cbemail,
              locality_id, home_phone, mobile_phone 
              ) VALUES (
              '".$user_id."', '".$first_name."', '".$middle_name."', '".$last_name."', 
              '".$suffix."', '".$gender."', '".$date_birth."', '".$cbemail."',
              '".$locality_id."', '".$home_phone."', '".$mobile_phone."'
              )";
      $result = $db->query($sql);
      }
      

      【讨论】:

      • 还是不行。我必须在顶部移除我的 cmets 吗?但它给了我索引错误。
      • @AjVillalobos 您的 user_id 在表中是自动递增的吗?
      • 没有用户 ID 是来自另一个表的外键。 user_id 和电子邮件来自电子邮件链接,这就是我使用 get 语句的原因。
      【解决方案4】:

      什么是if(isset($_POST['save_user'])){ 我没有看到任何带有save_user 名称的字段。您应该将其更改为其他内容,可能是if(isset($_POST['user_id'])){ 此外,您还需要其他人提及的引号。

      【讨论】:

      • save_user 是提交按钮的名称,在上面的最后一个代码中被称为 if-else 语句,我有 2 个开发人员,他们在那里创建了自己的框架,功能类似。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多