2011-09-09 74 views
0

我有一個支付提供商,它可以幫助我通過電話支付。但是,付款後,我需要更新訂單的狀態。這不起作用。整個腳本在下面找到。更新表mySQL問題

 if ($m->payed) { 
$order_result = mysql_query('UPDATE jos_vm_orders SET order_status="C" WHERE order_id="'.$_GET['id'].'"');  
      echo '<b>Bedankt voor je betaling</b><br /> 
        De betaling is succesvol gelukt!'; 

     } 
     else { 

$ GET _ ['id']與url一起發送。

我真的不知道答案,因爲當我在開始時(付款前)使用它時,UPDATE行會起作用。

而且不僅更新行不起作用,「if payed」後的所有內容都不起作用。

感謝先進!

+2

提到你的代碼是非常容易受到SQL注入式攻擊,因爲你是路過'$ _GET [「身份證」]'直接轉換爲SQL語句。你至少應該調用'mysql_real_escape_string()'作爲:'$ id = mysql_real_escape_string($ _ GET ['id'])' –

回答

0

請在代碼中加入var_dump()以驗證$m->payed的值。

var_dump($m); 
if ($m->payed) 
{ 
$sql="UPDATE jos_vm_orders SET order_status='C' WHERE order_id=$_GET[id]"; 
$order_result = mysql_query($sql);   
echo '<b>Bedankt voor je betaling</b><br /> 
     De betaling is succesvol gelukt!'; 
} 
+1

Downvoters小心添加評論請。 – adatapost

+0

由於您正在將$ _GET ['id']直接傳遞到SQL語句中,因此您的代碼極易受到SQL注入攻擊。你至少應該調用mysql_real_escape_string()作爲:$ id = mysql_real_escape_string($ _ GET ['id']) –

+0

@Jon顯然有人不喜歡我的! – Pete171

1

檢查查詢:

$order_result = mysql_query('UPDATE jos_vm_orders SET order_status="C" 
WHERE order_id="'.$_GET['id'].'"'); 

這是我的猜測是,WHERE子句失敗。手術後Call mysql_affected_rows();如果沒有行更新,它將返回0。

問題也可能是查詢失敗。包裹查詢類似如下的塊:

if (!$order_result = mysql_query('UPDATE jos_vm_orders SET order_status="C" 
WHERE order_id="'.$_GET['id'].'"')) { 
    // Handle the error here. 
} 

還要注意,這不是很好的做法,曾經直接在SQL查詢中使用$ _GET或$ _POST數據。考慮驗證它,至少這樣做:

$_GET['id'] = (int) $_GET['id']; 
if ($_GET['id'] === 0) { 
    // handle the error here 
} 
0

你必須學會​​如何調試你的代碼。

僅通過觀看代碼就無法說出問題所在。
必須要運行的代碼,獲取所有可能的錯誤信息並檢查所有重要變量。這是找到問題的唯一方法。

所以,讓你運行你的查詢方式與前一個相同的可能的錯誤消息,通過使用mysql_error()

,你也必須要查詢值的照顧。

所以,讓你的代碼是這樣的:

if ($m->payed) { 
    $id = intval($_GET['id']); 
    $sql = "UPDATE jos_vm_orders SET order_status='C' WHERE order_id=$id"; 
    $res = mysql_query($sql); 
    if (!$res) { 
     trigger_error(mysql_error()." ".$sql); 
     echo '<br>Server Error<br>'; 
    } elseif (!mysql_affected_rows($res)) { 
     trigger_error("No rows were updated! ".$sql); 
     echo '<br>Server Error<br>'; 
    } else { 
     echo '<b>Bedankt voor je betaling</b><br />De betaling is succesvol gelukt!'; 
    } 
} else { 
    echo '<font color=red><b>Betaling is niet afgerond,<br />volg de onderstaande instructies!</b></font><br /><br />'; 
    } 
    include('includes/include.paymentscreen.php'); 
} 
+0

我有一個錯誤,它是警告:session_start()[function.session-start]:無法發送會話緩存限制器 - 已發送的頭文件(輸出開始於/home/rsdeals/domains/xxx/public_html/joom/pay/pay.php:1)in/home /rsdeals/domains/xxx/public_html/joom/pay/pay.php on line 2 所以session_start();是錯的 ?我該如何解決? –

+0

@Tim那是很常見的問題。檢查第一行的<?'前是否有空格。如果沒有 - 在這裏搜索字節順序標記以獲得指令 –

0

問題最終被我的服務器,我有「顯示錯誤回報」上了。當我打開它時,實際的錯誤與session_start有關。當我在我的服務器上打開文件時,我看到我以錯誤的格式保存它,這解決了它!

感謝您的每一個答案。

0

嘗試改變這種

UPDATE jos_vm_orders SET order_status="C" WHERE order_id="'.$_GET['id'].'" 

$id=$_GET['id'];  
"UPDATE jos_vm_orders SET order_status='C' WHERE order_id='$id'" 

小心查詢報價。在開始和結束時總是給出雙引號,在查詢中間更喜歡單引號。

避免concatination查詢,而是嘗試包括它像上面