2010-01-04 25 views
0

我使用下面的代碼將數據添加到MySQL數據庫MySQL的整數問題

<?php 
$debdes = $_POST['debdes']; 
$debamt = $_POST['debamt']; 
$crdes = $_POST['crdes']; 
$cramt = $_POST['cramt']; 
$date = $_POST['date']; 
$cberror = "<h1>Data not Added</h1><br/><br/><h3>Please Follow The Instructions</h3>"; 

include_once ("db.php"); 



if (empty ($date)) die ("$cberror"); 

if (empty ($debamt) && empty ($debdes) && empty ($cramt) && empty ($cramt)) die ("$cberror"); 

if (!empty($debamt) && empty ($debdes))die ("$cberror"); 

if (!empty($debdes) && empty ($debamt)) die ("$cberror"); 


if (!empty($cramt) && empty ($crdes)) die ("$cberror"); 

if (!empty($crdes) && empty ($cramt)) die ("$cberror"); 

$ucbook = "INSERT INTO cbook(debdes,debamt,crdes,cramt,date) VALUES ('$debdes','$debamt','$crdes','$cramt','$date');"; 

if(mysql_query("$ucbook")) 

{ 
echo "<h3>One Record Updated Successfully with the following Details </h3><br/>"; 
echo "Date = $date <br/><br/>"; 
echo "Debt Amount =$debamt <br/><br/>"; 
echo "Debt Description = $debdes <br/><br/>"; 
echo "Credit Amount = $cramt <br/><br/>"; 
echo "Credit Description = $crdes <br/><br/>"; 

} 
else 
{ 
echo "<be/><br/>The Following Error Occure While Updatig Data<br/><br/>"; 
echo mysql_error(); 
} 

?> 

現在的問題是,當我在mysql中設定的「debamt」的值作爲整數然後錯誤出現

Incorrect integer value: '' for column 'debamt' at row 1 

雖然我沒有插入「debamt」值我也是正確

填充其他數據??????

回答

2

那意味着debamt是空的。空不是正確的整數值。

你知道,你也可以使用||邏輯運算符,意思是OR。因爲此行:

if (empty ($debamt) && empty ($debdes) && empty ($cramt) && empty ($cramt)) die ("$cberror"); 

...表示如果即使其中一個值不爲空,if子句也不會觸發。你可能想要的是:

if (empty ($debamt) || empty ($debdes) || empty ($cramt) || empty ($cramt)) die ("$cberror"); 

這樣,如果其中一個字段爲空,腳本將不會繼續。這也使得你的許多檢查無用。

由於您當前的代碼,$debamt完全有可能通過爲空。我會引導你思考你的if子句,看看真正有必要的。

+0

此外,代碼容易受到SQL注入攻擊 - 字符串不會被轉義。 – 2010-01-04 17:36:54

+0

@盧卡斯瓊斯,是的,我只是不想混合OP的頭,直到他掌握了PHP語法的基本概念:) – 2010-01-04 17:40:19

0

從你的代碼看來,它仍然可能爲$debamt爲空,所以你的sql語句試圖插入一個空的參數。 ''不是有效整數

0

空字符串不是有效整數。要麼你必須提供適當數量的你應該聲明列以允許空值(並傳遞null而不是空字符串)。您也應該閱讀SQL injection