2017-03-05 63 views
1

我是新來的PHP和MySQL,我目前正在嘗試構建一個小型網站作爲練習。我有這個小錯誤,我想在我的數據庫中編輯付款,代碼運行,它說它是成功的,但它不會在表中更新。我嘗試了很多不同的方式,例如在數據庫中創建視圖,但仍然無法使用。 php頁面應該從上一頁獲得user_id,這個效果很好,但它仍然不會更新表格。SQL查詢不更新phpmyadmin中的數據庫

這裏是我的購物籃表的SQL:

CREATE TABLE IF NOT EXISTS `basket` (


`product_id` int(8) NOT NULL, 
    `user_id` tinyint(4) NOT NULL, 
    `quantity` mediumint(8) NOT NULL, 
    `size` varchar(150) NOT NULL, 
    `payment` varchar(6) NOT NULL default 'No', 
    `checkout` varchar(3) NOT NULL default 'No' 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table `basket` 
-- 

INSERT INTO `basket` (`product_id`, `user_id`, `quantity`, `size`, `payment`, `checkout`) VALUES 
(1, 1, 1, 'Small', 'No', 'Yes'), 
(3, 1, 1, 'Small', 'No', 'Yes'), 
(20, 1, 1, 'Small', 'No', 'Yes'), 
(3, 2, 1, 'Small', 'Yes', 'Yes'); 

下面是我用叫我的數據庫payment_details認爲我的PHP代碼:

<?php 
require_once('my_connect.php'); 
require_once 'header.php'; 
$user_id=$_GET["user_id"];?> 

<html> 
<head></head> 
<body> 
<H1>Edit Payment Form</H1> 
<table> 

<?php 
if (isset($_POST['change_payment'])): 
     $user_id=$_GET["user_id"]; 
     $payment=$_POST["payment"]; 

     $edit_query= "update basket set 
         payment = '$payment' where 
         user_id='$user_id'"; 

     $edit_result= mysqli_query($connection, $edit_query); 

     if ($edit_result) : 
       header ('location: view_orders.php?confirm=Product item successfully updated'); 
     else : 
       echo "<b>This didn`t work, error: </b>"; 
       echo mysqli_error($connection); 
     endif; 
    endif; 


    $user_id=$_GET['user_id']; 
    $my_query="select * from basket where user_id=$user_id;"; 
    $result= mysqli_query($connection, $my_query); 

    while ($myrow = mysqli_fetch_array($result)): 
     $user_id= $myrow['user_id']; 
     $payment = $myrow["payment"]; 
    endwhile; 

    echo "<form method='POST' action='change_payment.php' > 
     <tr><td><b>Payment:</b> 
     <td><input type='text' name='payment' value='$payment'> 
     <tr><td><input type='submit' name='change_payment' value='Save Changes'> 
     </form>"; 
?> 

</table> 
</body> 
</html> 
</div> 
<?php require_once('footer.php'); ?> 

它不更新我的數據庫中的籃子表,我想知道爲什麼?請幫助我,我會很感激。

+0

是否有打印出來的sql錯誤? – hassan

+0

完全沒有錯誤,它將我帶到前面的頁面,並添加了「成功更新的產品項目」,但未更新。 –

+0

print'$ edit_query'並從phpmyadmin手動執行,並檢查出什麼是錯誤的 – hassan

回答

0

如果MySQL具有與MS SQL相似的語法,那麼我可以看到的唯一問題是插入語句中表名和列名稱周圍的撇號。您應該只需要撇號來輸入要插入的字符串值。

+0

這些是反引號''' - 這是在MySQL中引用標識符的正確方法。 –

+0

不知道它們是否相同,我試着把它們放下,但是顯示錯誤。我想varchar和字符串是一樣的,因爲我可以在varchar中插入數字或單詞(?) –

+0

對於鯡魚的道歉! – WillCDev

1

因爲我不能評論(缺乏聲譽我必須寫這個答案)。首先,每個mysql/i_query()都應該用棍子打,直到它變成準備語句。正如我看到你正在處理付款,你是SQLInjection脆弱。所以首先讀一下SQLInjection和準備好的語句。關於問題,請嘗試在腳本頂部設置錯誤報告以:

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

並寫入之後會發生什麼。在更新查詢之前還要轉儲$ user_id,並檢查是否存在一些問題,因爲即使數據庫中不存在$ user_id,查詢也會成功更新,但它只會查詢成功。

+0

我還沒有到達付款頁面,這是一個管理員只更新數據庫的頁面,我只是試圖練習,它不是一個真正的網站。錯誤如下:注意:一個會話已經開始 - 忽略第二行 –

0

試試這個工作對我來說,和u有錯誤這裏

"select * from basket where user_id=$user_id;" 

這一點;是錯誤的。並確保妳域已經user_id說明的index.php?USER_ID = 1名

編輯代碼更新了一個檢查,如果在URL中存在的user_id如果沒有它不會顯示形式或更新腳本,因爲烏爾形式閱讀基於user_id從數據庫輸入。

<?php 

require_once 'my_connect.php'; 
require_once 'header.php'; 

?> 

<html> 
    <head> 
     <title></title> 
    </head> 
<body> 

<H1>Edit Payment Form</H1> 
<table> 

<?php 

// if submit button is pressed 
if (isset($_POST['change_payment'])) 
{ 

     // check if user_id is exists in a URL 
     if (isset($_GET['user_id']) && !empty($_GET['user_id'])) 
     { 
      // now if user_id exists and is not empty make a variable and run a rest of a script 
      $user_id = (int)$_GET['user_id']; 

      // get name from a form input field payment 
      $payment = $_POST["payment"]; 

      // update basket table with payment where user_id is equal to user_id from a $_GET variable 
      $edit_query = "UPDATE basket SET payment = '$payment' WHERE user_id = '$user_id'"; 

      // run query 
      $edit_result = mysqli_query($connection, $edit_query); 

      // if query is valid redirect user to another location 
      if ($edit_result) 
      { 
       header('location: view_orders.php?confirm=Product item successfully updated'); 
      } 
      else 
      { 
       // if query fails display error message 
       echo "<b>This didn't work, error: </b>" . mysqli_error($connection); 
      } 
     } 

} 

// check if user_id is exists in a URL if not dont display a form 
if (isset($_GET['user_id']) && !empty($_GET['user_id'])) 
{ 
    // now if user_id exists and is not empty make a variable and run a rest of a script 
    $user_id = (int)$_GET['user_id']; 

    // select all data from basket table where user_id is equal to user_id from a $_GET variable 
    $my_query = "SELECT * FROM basket WHERE user_id = '$user_id'"; 

    // run query 
    $result = mysqli_query($connection, $my_query); 

    // get an array with all data from basket table where user_id is equal to user_id from $_GET variable 
    $myrow = mysqli_fetch_array($result); 

    // show a form and set value to $myrow['payment'] where payment is equal to payment data where user_id is equal to user_id from a $_GET variable 
    echo ' 
     <form method="POST" action=""> 
      <b>Payment:</b> 
      <input type="text" name="payment" maxlength="6" value="'.$myrow['payment'].'"> 
      <input type="submit" name="change_payment" value="Save Changes"> 
     </form> 
    '; 
} 

?> 

</table> 
</body> 
</html> 
</div> 
<?php require_once 'footer.php'; ?> 

而且my_connect.php

<?php 

// display errors, comment this 2 functions after make this script to work 
error_reporting(1); 
ini_set('error_reporting', E_ALL); 

// starting session 
session_start(); 

// connection to database 
define('DB_HOST', 'localhost');  // database host 
define('DB_USER', 'root');   // database username 
define('DB_PASSWORD', '');   // database pasword 
define('DB_NAME', 'baza');   // database name 

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

?> 
+0

編輯完成的C:\ WebServ \ wwwroot \ htdocs \ php \ my-shop \ footer.php中的session_start()。 – Mario

+0

我可以知道什麼是config.php嗎? –

+0

啊對不起,我的連接像你的數據庫my_connect.php只是改變它 – Mario

0

你必須考慮,如果它不顯示錯誤這並不意味着更新完成與否。這意味着查詢是好的(沒有語法錯誤)。 所以我們可以想象你試圖更新一個不存在的用戶的記錄。 例如:user_id = 10,然後嘗試用user_id = 11更新記錄。語法正常,SQL將找不到user_id = 11的用戶,但會回答「OK,我試過了,語法正常,對我來說很好」 。

你必須考慮的是檢查更新記錄的數量(例如使用$ result = @mysqli_affected_rows($ handle);)但是,你也必須明白,即使查詢是好的,如果更新沒有更改值(所以在你的情況下,如果「付款」的舊值和新值相同),mysqli_affected_rows將返回0。

我的建議是在調用前添加一個「回聲」查詢。然後將該字符串複製到PhpMyadmin中以查看發生了什麼。可能在顯示查詢字符串時,您會看到一些值是錯誤的。

希望這會有所幫助。

0

謝謝大家,尋求幫助。我想告訴你,我設法知道我的錯誤在哪裏。這僅僅是因爲支付是在重複的用戶ID的籃子表中,這就是爲什麼它不能工作。我將它移到用戶表中,現在它運行良好。