2010-12-15 60 views
0

我有這樣的代碼,添加文本框動態轉義字符問題


row_no=0; 
function addRow(tbl,row){ 
row_no++; 
if (row_no<=20){ 
if (row_no>=10){ 
var textbox = '';} 
if (row_no<10){ 
var textbox = '';} 
var textbox2 = ''; 
var tbl = document.getElementById(tbl); 
var rowIndex = document.getElementById(row).value; 
var newRow = tbl.insertRow(row_no); 
var newCell = newRow.insertCell(0); 
newCell.innerHTML = textbox; 
var newCell = newRow.insertCell(1); 
newCell.innerHTML = textbox2; 
var newCell = newRow.insertCell(2); 
} 
if (row_no>20){ 
alert ("Too Many Items. Limit of 20."); 
}

HTML代碼
<div style="padding-top:30px;"> 
<input type="button" name="Button" class="button" value="Add Ingredient" onClick="addRow('table1','row1')" /> 
<table style="padding-left:160px" width="600" border="0" cellspacing="0" cellpadding="2" id="table1"> 
<th><center>Ingredient 
<th>amount 
</center> 
<tr id="row1"> 
</tr> 
</table> 
</div>

和PHP代碼後的數據爲
$ingredient = $_POST['ingredient']; 
$amount = $_POST['amount']; 
$integer = 0; 
$ingredient=mysql_real_escape_string($ingredient); 
$amount=mysql_real_escape_string($amount); 
while (count($ingredient)>$integer) { 
if (($ingredient[$integer] <> "") && ($amount[$integer] <> "")){ 
$sql = "INSERT INTO cafe.ingredients (ingredient_name, ammount, rec_id) 
    VALUES ('".$ingredient[$integer]."', '".$amount[$integer]."', '$rec_id')" ; 
echo "the echo value is".$ingredient[$integer]."and the error is below 
"; mysql_query($sql) or die(mysql_error()); } else{ echo "ingredient number ".($integer+1)." is missing values and cannot be inserted."; } $integer = ($integer + 1); }

我的問題是當我使用轉義字符,即(')或(「)併發布數據在PHP腳本其確定但當我插入這個數據到MySQL,那麼它會給我錯誤
警告:mysql_real_escape_string()期望參數1是字符串,數組在/var/www/book/books.php上123行

回答

2

我想錯誤消息說明它,mysql_escape_string期望第一個參數是一個字符串而不是數組。

Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in /var/www/book/books.php on line 123 

你可以使用array_map如果你想逃避的整個數組,你應該做的:

$ingredient = $_POST['ingredient']; 
$amount = $_POST['amount']; 
$integer = 0; 
$ingredient = array_map('mysql_real_escape_string', $ingredient); 
$amount = array_map('mysql_real_escape_string', $amount); 
while (count($ingredient)>$integer) { 
if (($ingredient[$integer] <> "") && ($amount[$integer] <> "")){ 
$sql = "INSERT INTO cafe.ingredients (ingredient_name, ammount, rec_id) 
    VALUES ('".$ingredient[$integer]."', '".$amount[$integer]."', $rec_id)" ; 
echo "the echo value is".$ingredient[$integer]."and the error is below 
"; 
mysql_query($sql) or die(mysql_error()); 
} 
else{ 
echo "ingredient number ".($integer+1)." is missing values and cannot be inserted."; 
} 
$integer = ($integer + 1); 
} 
+0

感謝答覆,但這個給我的錯誤您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊,在第二行使用's','64')'。' – hunter 2010-12-15 09:59:33

+0

@hunter:你能告訴我們var_dump($ sql)的輸出嗎? – RageZ 2010-12-15 10:02:00

+0

RageZ thnks非常有效,現在.... ....但在我的代碼中的另一個問題,你可以看到它動態地生成兩個文本框(成分,數量),如果我想添加另一個動態文本框即指令,那麼我應該在javascript中做另一個指令函數......? – hunter 2010-12-15 10:17:36

1

$ amount是一個數組。mysql_real_escape_string需要一個字符串而不是數組,這就是爲什麼你會收到錯誤信息。您可能需要遍歷$ amount數組,併爲該數組的每個成員調用mysql_real_escape_string。