【问题标题】:I am getting no errors but the data is not going into the database on wamp我没有收到任何错误,但数据没有进入 wamp 上的数据库
【发布时间】:2014-12-12 13:46:00
【问题描述】:

我正在尝试将用户输入表单中的数据获取到我的 wamp 服务器中。我尝试过加载不同的方法和编码,但没有一个可以工作并提交数据。你能帮我吗?我只做了一周的网页设计和数据库。

<?php

 $username = "root";
    $password = "";
    $hostname = "localhost";
    $database = "project";



//connection to the server
    $dbhandle = mysqli_connect($hostname, $username, $password)
      or die ("Unable to connect to server<br>");
      echo  "Connected to server<br>";

      //connection to the database
    $select_db = mysqli_select_db($dbhandle, $database)
    or die ("Could not select Project database");
    echo "connected to database";


//Getting the Values from the form
$Firstname = $_POST["Firstname"];
  $Lastname = $_POST["Lastname"];
  $DOB = $_POST["DOB"];
  $Address = $_POST["Address"];
  $Telephone_No = $_POST["Telephone_No"];
  $NOK = $_POST["NOK"];
  $NOK_Address = $_POST["NOK_Address"];
  $vetting_date = $_POST["vetting_date"];
  $Clearance_Expiry = $_POST["Clearance_Expiry"];
  $Current_Employer = $_POST["Current_Employer"];
  $Resubmission = $_POST["Resubmission"];
  $Number_of_Attempts = isset($_POST["Number_of_Attempts"]) ? $_POST["Number_of_Attempts"] : 1;
  $Qualification1 = $_POST["Qual_1"];
  $date_completed_1= $_POST["date_completed_1"];
  $Expiry_date_1 = $_POST["Run_out_date_1"];
  $Qualification2 = $_POST["Qual_2"];
  $date_completed_2 = $_POST["date_completed_2"];
  $Expiry_date_2 = $_POST["Run_out_date_2"];
  $Qualification3 = $_POST["Qual_3"];
  $date_completed_3 = $_POST["date_completed_3"];
  $Expiry_date_3 = $_POST["Run_out_date_3"];
  $Qualification4 = $_POST["Qual_4"];
  $date_completed_4 = $_POST["date_completed_4"];
  $Expiry_date_4 = $_POST["Run_out_date_4"];
  $Qualification5 = $_POST["Qual_5"];
  $date_completed_5 = $_POST["date_completed_5"];
  $Expiry_date_5 = $_POST["Run_out_date_5"];
  $Qualification6 = $_POST["Qual_6"];
  $date_completed_6 = $_POST["date_completed_6"];
  $Expiry_date_6 = $_POST["Run_out_date_6"];
  $Qualification7 = $_POST["Qual_7"];
  $date_completed_7 = $_POST["date_completed_7"];
  $Expiry_date_7 = $_POST["Run_out_date_7"];
  $Qualification8 = $_POST["Qual_8"];
  $date_completed_8 = $_POST["date_completed_8"];
  $Expiry_date_8 = $_POST["Run_out_date_8"];
  $Qualification9 = $_POST["Qual_9"];
  $date_completed_9 = $_POST["date_completed_9"];
  $Expiry_date_9 = $_POST["Run_out_date_9"];
  $Qualification10 = $_POST["Qual_10"];
  $date_completed_10 = $_POST["date_completed_10"];
  $Expiry_date_10 = $_POST["Run_out_date_10"];
  $why = $_POST["why"];


//inserting to the database

$query = "INSERT INTO `applicant` (`Firstname`, `Lastname`, `DOB`, `Address`, `Telephone_No`, `NOK`, `NOK_Address`, `vetting_date`, `Clearance_Expiry`, `Current_Employer`, `Resubmission`, `Number_of_Attempts`, `Why`) 
        VALUES (`$_POST[Firstname]`,`$_POST[Lastname]`,`$_POST[DOB]`,`$_POST[Address]`,`$_POST[Telephone_No]`,`$NOK`,`$NOK_Address`,`$vetting_date`,`$Clearance_Expiry`,`$Current_Employer`,`$Resubmission`,`$Number_of_Attempts`,`$why`)";









  //$sql = "INSERT INTO qualification_link (date_completed) VALUES (`$date_completed_1`), (Run_out_Date) VALUES (`$Expiry_date_1`), (date_completed) VALUES (`$date_completed_2`), (Run_out_Date) VALUES (`$Expiry_date_2`), (date_completed) VALUES (`$date_completed_3`), (Run_out_Date) VALUES (`$Expiry_date_3`), (date_completed) VALUES (`$date_completed_4`), (Run_out_Date) VALUES (`$Expiry_date_4`), (date_completed) VALUES (`$date_completed_5`), (Run_out_Date) VALUES (`$Expiry_date_5`), (date_completed) VALUES (`$date_completed_6`), (Run_out_Date) VALUES (`$Expiry_date_6`), (date_completed) VALUES (`$date_completed_7`), (Run_out_Date) VALUES (`$Expiry_date_7`), (date_completed) VALUES (`$date_completed_8`), (Run_out_Date) VALUES (`$Expiry_date_8`), (date_completed) VALUES (`$date_completed_9`), (Run_out_Date) VALUES (`$Expiry_date_9`), (date_completed) VALUES (`$date_completed_10`), (Run_out_Date) VALUES (`$Expiry_date_10`)";
 // $sql = "INSERT INTO qualification (Qual_1) VALUES (`$Qualification1`), (Qual_2) VALUES (`$Qualification2`), (Qual_3) VALUES (`$Qualification3`), (Qual_4) VALUES (`$Qualification4`), (Qual_5) VALUES (`$Qualification5`), (Qual_6) VALUES (`$Qualification6`), (Qual_7) VALUES (`$Qualification7`), (Qual_8) VALUES (`$Qualification8`), (Qual_9) VALUES (`$Qualification9`), (Qual_10) VALUES (`$Qualification10`)";



 // successfully insert data into database, displays message "Successful".
 if($query){
  echo "Successful";
 echo "<BR>";
 echo "<a href=index.php>Back to Home page</a>";
}

  else {
  echo "Data not Submitted";
}

//closing the connection
   mysqli_close($dbhandle)

   ?>

【问题讨论】:

  • 首先,你不是在查询。然后,您在 VALUES 中使用了反引号,这些不是正确的标识符。在打开&lt;?php 标记error_reporting(E_ALL); ini_set('display_errors', 1); 后立即将错误报告添加到文件顶部,看看它是否产生任何东西以及or die(mysqli_error($dbhandle)) 到mysqli_query()。您也对大规模 SQL 注入持开放态度。
  • 我们几乎需要一个带有错误内容的便签。早安@Fred-ii- ;)
  • @JayBlanchard 是的,粘性将是一个奖励。早安杰 ;)
  • 做了error_reporting,仍然没有错误
  • 您已经定义了变量,那么为什么要在查询中使用$_POST['var']?只需使用变量。

标签: php html mysqli


【解决方案1】:

正如我最初所说的,您使用了错误的 identifiers 作为您的 VALUES,即反引号。它们应该是引号。

另外,你不是在查询。

这是你需要做的:

确保所有的表单元素都包含一个 name 属性和一个 post 方法;看到您没有发布您的表格,所以我需要指出这一点。

使用mysqli_query(),你没用过的东西;它是执行查询所必需的。

$result = mysqli_query($dbhandle, $query) 
    or die(mysqli_error($dbhandle));

if($result){ echo "Success!"; }

  else{ echo "Error."; }

现在,您已经定义了变量,那么为什么要在查询中使用$_POST['var']?只需使用变量。

将您的 VALUES 变量放在单引号中:

VALUES ('$Firstname','$Lastname', .....

其余的也一样。

清理您的输入:

$Firstname = stripslashes($_POST["Firstname"]);
$Firstname = mysqli_real_escape_string($dbhandle, $_POST["Firstname"]);

其余的也一样。

如果您收到“未定义索引...”警告,那是因为表单元素可能没有命名,或者包含拼写错误。字母大小写很重要。

不过,我强烈建议您使用prepared statements 或PDO with prepared statements,它们更安全。

将error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只能在暂存阶段完成,而不能在生产阶段完成。

【讨论】:

    【解决方案2】:

    你有一个 if 声明,它什么都不做:

    if($query) {
        //more of your code
    }
    

    您希望通过以下方式实际执行该查询:

    if ($result = $mysqli->query($query) {
        //more of your code
    }
    

    【讨论】:

      【解决方案3】:

      你也可以替换

      $query = "INSERT INTO `applicant` (`Firstname`, `Lastname`, `DOB`, `Address`, `Telephone_No`, `NOK`, `NOK_Address`, `vetting_date`, `Clearance_Expiry`, `Current_Employer`, `Resubmission`, `Number_of_Attempts`, `Why`) 
          VALUES (`$_POST[Firstname]`,`$_POST[Lastname]`,`$_POST[DOB]`,`$_POST[Address]`,`$_POST[Telephone_No]`,`$NOK`,`$NOK_Address`,`$vetting_date`,`$Clearance_Expiry`,`$Current_Employer`,`$Resubmission`,`$Number_of_Attempts`,`$why`)");
      

      与

      $query = mysqli_query($dbhandle, "INSERT INTO `applicant` (`Firstname`, `Lastname`, `DOB`, `Address`, `Telephone_No`, `NOK`, `NOK_Address`, `vetting_date`, `Clearance_Expiry`, `Current_Employer`, `Resubmission`, `Number_of_Attempts`, `Why`) 
          VALUES ("'.$_POST[Firstname].'","'.$_POST[Lastname].'","'.$_POST[DOB].'","'.$_POST[Address].'","'.$_POST[Telephone_No].'","'.$NOK.'","'.$NOK_Address.'","'.$vetting_date.'","'.$Clearance_Expiry.'","'.$Current_Employer.'","'.$Resubmission.'","'.$Number_of_Attempts.'","'.$why.'")";
      

      【讨论】:

      • 我刚刚这样做了,现在给了我一个错误 Parse error: syntax error, unexpected ''.$_POST[Firstname].''
      【解决方案4】:
      $query = "INSERT INTO `applicant` (`Firstname`, `Lastname`, `DOB`, `Address`, `Telephone_No`, `NOK`, `NOK_Address`, `vetting_date`, `Clearance_Expiry`, `Current_Employer`, `Resubmission`, `Number_of_Attempts`, `Why`) 
          VALUES (`$_POST[Firstname]`,`$_POST[Lastname]`,`$_POST[DOB]`,`$_POST[Address]`,`$_POST[Telephone_No]`,`$NOK`,`$NOK_Address`,`$vetting_date`,`$Clearance_Expiry`,`$Current_Employer`,`$Resubmission`,`$Number_of_Attempts`,`$why`)";
      

      应该是

      $query = "INSERT INTO `applicant` (`Firstname`, `Lastname`, `DOB`, `Address`, `Telephone_No`, `NOK`, `NOK_Address`, `vetting_date`, `Clearance_Expiry`, `Current_Employer`, `Resubmission`, `Number_of_Attempts`, `Why`) 
      VALUES ('" .$_POST['Firstname']. "', '" .$_POST['Lastname']. "', '" .$_POST['DOB']. "', '" .$_POST['Address']. "', '" .$_POST['Telephone_No']. "', '" .$NOK. "', '" .$NOK_Address. "', '" .$vetting_date. "', '" .$Clearance_Expiry. "', '" .$Current_Employer. "', '" .$Resubmission. "', '" .$Number_of_Attempts. "', '" .$why."');";
      

      然后你需要添加这个:

      $attempt = mysqli_query($dbhandle , $query);
      
      # You will then need to check $attempt to see if it was true or not.
      if($attempt) {
          # Query executed successfully
      } else {
          # Whoops, it's failed!
      }
      

      【讨论】:

      • 这样可以,但变量确实应该参数化。
      • 我同意你@JayBlanchard - 我今天超级懒惰:(
      • @JayBlanchard 嗯,对此不太确定。注意 POST 是如何被视为常量的? ;) 可能是因为'" .$why'" . 在语法高亮中将其丢弃。我会使用预定义变量而不是所有变量,而不是在其中填充 POST。
      • 我收到此错误消息,其中包含以下文本 Parse error: syntax error, unexpected ''" .)"; ' (T_ENCAPSED_AND_WHITESPACE
      • @ChristopherBooth 我想我已经搞砸了替换反引号。你现在可以试试吗,我已经更新了答案。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多