2010-12-15 44 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。