2017-06-21 45 views
-1

IM做PHP的一種形式,將數據保存到數據庫 這裏是它在那裏,我從PHP的形式將數據發送到數據庫的代碼:同值輸入到數據庫中,即使上發送不同的值

<?php 
$users_name = $_POST['name']; 
$users_email = $_POST['email']; 
$users_phoneNumber = $_POST['phNo']; 
$users_cnic = $_POST['cnic']; 
$users_voucherNumber = $_POST['vNum']; 
$users_modelNumber = $_POST['prod']; 


if($_POST) 
     { 

      $dbhost = "localhost"; 
      $dbuser = "root"; 
      $dbpassword = ""; 
      $dbname = "dany"; 
      $query = ""; 
      $sqlQuery = ""; 


      $conn = new mysqli($dbhost, $dbuser, $dbpassword, $dbname); 

      if ($conn->connect_error) { 
       die("Connection failed: " . $conn->connect_error); 
      } 


      echo ("Variables values: " . " " . $users_cnic . " " . 
          $users_phoneNumber . "<br>"); 
      $query = "INSERT INTO customer(c_name, c_phoneNumber, c_cnic, 
        c_email, c_voucherNumber, c_modelNumber) VALUES 
        ('$users_name','$users_phoneNumber', '$users_cnic', 
        '$users_email', $users_voucherNumber, 
         '$users_modelNumber')"; 

      if ($conn->query($query) === TRUE) { 
       //if successful 
      echo ("Variables values after success: " . " " . $users_cnic . 
        " " . $users_phoneNumber . "<br>"); 
      } else { 
       //if data not successfully entered 
       echo "Error: " . $query . "<br>" . $conn->error; 
      } 

      $conn->close(); 

     } 

?> 

但問題是當我嘗試發送數據時,「c_phoneNumber」和「c_cnic」的每次發送的值都是「2147483647」。即表格中的每一行都有兩列,每一列的值都是「2147483647」。

,如果你看到我所維滕檢查值,如果它們是正確的路線:

echo ("Variables values: " . " " . $users_cnic . " " . $users_phoneNumber . 
     "<br>"); 

在這裏,他們有準確的值從形式的文本框發來的相同。但是當在下一行代碼中進行查詢時:

$query = "INSERT INTO customer(c_name, c_phoneNumber, c_cnic, 
        c_email, c_voucherNumber, c_modelNumber) VALUES 
        ('$users_name','$users_phoneNumber', '$users_cnic', 
        '$users_email', $users_voucherNumber, 
         '$users_modelNumber')"; 

這兩個變量都包含「2147483647」。

當如果statment後的數據順利進入表運行:

if ($conn->query($query) === TRUE) { 
       //if successful 
      echo ("Variables values after success: " . " " . $users_cnic . 
        " " . $users_phoneNumber . "<br>"); 
      } 

它已經從文本框傳遞相同的值。 我無法弄清楚這個問題,變量數據在整個程序運行狀態下保持不變,但是當插入到數據庫變化時。

我曾嘗試:

1-創建一個新的表

2-創建兩個新列

3-發送硬編碼值。

$query = "INSERT INTO customer(c_name, c_phoneNumber, c_cnic, 
        c_email, c_voucherNumber, c_modelNumber) VALUES 
        ('$users_name',123, 456, 
        '$users_email', $users_voucherNumber, 
         '$users_modelNumber')"; 

,當我做到這一步沒有4,值被完全發送和插入其是123,456

4-創建一個新的查詢,並保存它在其它變量,在運行查詢=相同的結果。(錯誤)

+1

瞭解準備好的聲明,以防止SQL注入 – Jens

+0

延斯是正確的,你的代碼是廣泛開放的黑客攻擊。惡意用戶可能會輸入可能竊取,刪除或破壞數據的數據。使用預準備的語句和參數來保護您的數據庫。很容易找到這個在線的教程。 – ADyson

+0

你說它在這兩個字段中插入「2147483647」。 ''$ users_phoneNumber','$ users_cnic''表示你插入字符串(由於引號括起了變量)。但是你的硬編碼的例子插入整數。數據庫中每個字段的數據類型是什麼?當你插入時,每個文本框的值是什麼?可能是字符串/整數不匹配。如果您使用過參數,則應該如此,這種數據類型不匹配將會消失。 – ADyson

回答

-1

嘗試這個弟弟希望它會幫助你

<?php 
$users_name = $_POST['name']; 
$users_email = $_POST['email']; 
$users_phoneNumber = $_POST['phNo']; 
$users_cnic = $_POST['cnic']; 
$users_voucherNumber = $_POST['vNum']; 
$users_modelNumber = $_POST['prod']; 

if(!empty($_POST['name'])) 
{ 
      $dbHost = "localhost"; 
      $dbUsername = "nextgbsl_pay"; 
      $dbPassword = "[email protected]"; 
      $dbName = "nextgbsl_tbl_payment"; 



      $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName); 
      //Display error if failed to connect 
     if ($db->connect_errno) { 
      printf("Connect failed: %s\n", $db->connect_error); 
      exit(); 
        } 

echo ("Variables values: " . " " . $users_cnic . " " . 
          $users_phoneNumber . "<br>"); 
      $query = $db->query("INSERT INTO customer(c_name, c_phoneNumber, c_cnic, 
        c_email, c_voucherNumber, c_modelNumber) VALUES 
        ('".$users_name."','".$users_phoneNumber."', '".$users_cnic."', 
        '".$users_email."', '".$users_voucherNumber."', 
         '".$users_modelNumber."')";); 


      if ($conn->query($query) === TRUE) { 
       //if successful 
      echo ("Variables values after success: " . " " . $users_cnic . 
        " " . $users_phoneNumber . "<br>"); 
      } else { 
       //if data not successfully entered 
       echo "Error: " . $query . "<br>" . $conn->error; 
      } 

      mysqli_close($con); 


} 

?> 
+0

很多代碼,但沒有解釋爲什麼它會有所幫助。這對於OP或未來的讀者來說是最小的使用,他們只需複製/粘貼而不用學習,所以不是一個很好的質量答案。此外,它忽略了關於正在使用的整數大小的關鍵點,並且未能修復SQL注入漏洞,甚至無法將插入的值作爲ints而不是字符串傳遞。據我所見,所有這些都是使用稍微不同的PHP語法來將字符串連接在一起,這根本不會增加任何值。 – ADyson

+0

非常感謝兄弟。問題是我在數據庫中使用的數據類型。 「2147483647」是整數數據類型的最大值,我將它改爲BIGINT,它解決了這個問題。感謝您無論如何都在調查此事 –