【发布时间】:2015-05-10 01:11:00
【问题描述】:
我在 PHP 中的 foreach 循环有点麻烦。我正在尝试从 html 表单中插入一堆值。表单中表格的工作方式是用户可以根据需要添加一行。无论出于何种原因,foreach 循环仅插入表的第一行,几个小时后我似乎找不到解决方案。
下面是foreach循环:
$sql = "INSERT INTO map_input (user_id, point_desc, lat, lon) VALUES ";
//inserting into the map_input table
foreach($_GET['input_Lat'] as $i => $Lat)
{
//get values from form
$in_Desc = mysql_real_escape_string($_GET['input_Desc'][$i]);
$Lat = mysql_real_escape_string($Lat);
$Lon = mysql_real_escape_string($_GET['input_Lon'][$i]);
$sql = $sql."('$user_id', '$in_Desc', '$Lat', '$Lon]'),";
}
表单表中每个文本框的值是“input_Desc[]”、“input_Lat[]”、“input_Lon[]”。
任何帮助将不胜感激!
编辑:“Desc”已更改为“in_Desc”,这样它就不会与保留字发生冲突。连接的 sql 语句末尾的分号已更改为逗号。结果还是一样。
回显 sql 语句,这是结果INSERT INTO map_input (user_id, point_desc, lat, lon) VALUES ('4', 'Start', '53.066363', ' -6.293127]'),
**编辑:**为表格添加了下面的 HTML 并添加了额外的行。 表格/表格
<form action="mapInput.php" method="get">
<table id="gpsPoints">
<tr>
<th>Description</th>
<th>Latitude</th>
<th>Longitude</th>
</tr>
<tr>
<td> <input type="text" name="input_Desc[]"> </td>
<td><input type="text" name="input_Lat[]" ></td>
<td><input type="text" name="input_Lon[]"></td>
</tr>
</table>
<br>
<br>
<input type="submit" value="Save Route" >
</form>
<br>
<br>
<button onClick="addRow()" >Add new point </button>
添加行功能:
function addRow()
{
var table = document.getElementById("gpsPoints");
var row = table.insertRow(2);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
//adding text boxes to each cell
var element1 = document.createElement("input");
element1.type = "textbox";
element1.name = "input_Desc[]";
cell1.appendChild(element1);
var element2 = document.createElement("input");
element2.type = "textbox";
element2.name = "input_Lat[]";
cell2.appendChild(element2);
var element3 = document.createElement("input");
element2.type = "textbox";
element2.name = "input_Lon[]";
cell3.appendChild(element3);
}//end function addRow()
</script>
编辑这些值肯定会像在 url 栏中一样被传入,但是它们不会进入 foreach 循环并被插入。
【问题讨论】:
-
老兄,先用 print_r() 调试你的 GET 数据,看看你得到了什么......
-
Desc 是保留字,用反引号 `desc` 括起来,但在这种情况下不应该添加任何行
-
同样在那个循环的结尾,问题是你会有一个语句 INSERT INTO blah VALUES 1,2,3,4,所以最后你会有一个额外的逗号。使用一些一种子字符串函数来删除它
-
@Mihai 我在循环之外有一个子字符串函数。仍然只插入第一行
-
我们可以看到 $sql 回显了吗?