MySQL INSERT只插入foreach循环的第一行

时间:2015-03-08 22:10:16

标签: php mysql foreach

我在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 []"。

非常感谢任何帮助!

修改'说明'已被更改为' 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>
&#13;
&#13;
&#13;

添加行的功能:

&#13;
&#13;
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>
&#13;
&#13;
&#13;

编辑这些值肯定会在url栏中传入,但是它们不会进入foreach循环并被插入。

2 个答案:

答案 0 :(得分:2)

您正在关闭sql连接的请求:

$sql = $sql."('$user_id', '$Desc', '$Lat', '$Lon]');";

&#34;;&#34; 替换为&#34;,&#34;

并添加循环后:

$sql = substr($sql, 0, -1) . ";";

答案 1 :(得分:2)

你查询字符串最终会看起来像

INSERT INTO map_input (user_id, desc, lat, lon) VALUES ('user_id', 'desc1', 'lat1', 'lon1'); ('user_id', 'desc2', 'lat2', 'lon2');

替换该行末尾的;

$sql = $sql."('$user_id', '$Desc', '$Lat', '$Lon]');"; to read $sql = $sql."('$user_id', '$Desc', '$Lat', '$Lon]'),";

也改变了

$sql = "INSERT INTO map_input (user_id, desc, lat, lon) VALUES ";

$sql = "INSERT INTO map_input (user_id, `desc`, lat, lon) VALUES ";

这是因为desc是mysql中的保留字。