2012-04-19 262 views
0

我已经搜索了这个问题的答案,但找不到任何答案。将html表格输入值添加到mysql数据库表格

我想添加一个html表格的内容到一个MySQL数据库使用PHP和JavaScript,其中每一行是一个新的记录。

这里有一个表例如:

<table width="100%" border="1" cellspacing="0" cellpadding="0"> 
    <tr> 
    <th scope="col">ID</th> 
    <th scope="col">NAME</th> 
    <th scope="col">EMAIL</th> 

    </tr> 
    <tr id="row"> 
    <td><input name="ID" type="text" value="20" /></td> 
    <td><input name="NAME" type="text" value="Peter" /></td> 
    <td><input name="EMAIL" type="text" value="[email protected]" /></td> 
    </tr> 
    <tr id="row"> 
    <td><input name="ID" type="text" value="21" /></td> 
    <td><input name="NAME" type="text" value="Jhon" /></td> 
    <td><input name="EMAIL" type="text" value="[email protected]" /></td> 
    </tr> 
    <tr id="row"> 
    <td><input name="ID" type="text" value="22" /></td> 
    <td><input name="NAME" type="text" value="Mike" /></td> 
    <td><input name="EMAIL" type="text" value="[email protected]" /></td> 
    </tr> 
</table> 

<input name="Btn" type="button" onclick="addRecords()" value="Add"/> 
</form> 

和我试过的JavaScript样本:

<script> 
function addRecords() 
{ 
    var row = document.getElementById("row") 


    for (x in row) 
    { 
     $.post="<? $insertSQL = sprintf("INSERT INTO accounts (acc_id, acc_name, acc_email) VALUES (%s, %s)", 
         GetSQLValueString($_POST['ID'], "integer"), 
         GetSQLValueString($_POST['NAME'], "text"), 
         GetSQLValueString($_POST['EMAIL'], "text")); 

    mysql_select_db($database_G3CSAdminControlPanel, $G3CSAdminControlPanel); 
    $Result1 = mysql_query($insertSQL, $G3CSAdminControlPanel) or die(mysql_error()); ?>" 
    } 
} 

</script> 

上面做什么,它只是增加了在最后一个记录表到数据库。 我猜我的问题是与PHP代码,并且每个输入应该放入数组以及不只是行,不知道如何做到这一点。

UPDATE 感谢您的回复。我所展示的代码仅仅是我想要做的一个例子。行的id必须保持不变,因为我使用的是在我的实际网页中创建表的脚本。

基本上我想做到以下几点,但在PHP中:

<script> 
function addRecords() 
{ 
    var row = document.getElementById("row"); 
    var n = 0; 
    var q = 0; 
    for (x in "row") 
    { 
     n++; 
     var code = document.getElementsByName("ID")[q].value; 
     var desc = document.getElementsByName("NAME")[q].value; 
     var price = document.getElementsByName("EMAIL")[q].value; 
     alert(code + ' ' + desc + ' ' + price); 
     q++; 
    } 
    alert('There is ' + n + ' rows in the table'); 
} 
</script> 

脚本的每一行返回的输入值。 我想在PHP中做类似的事情,但要将来自每行输入的值作为记录添加到数据库表中。

因此,不应该为每行执行JavaScript警报,而应该执行一个php脚本来插入该行的记录。

+0

你看看AJAX方法吗?或JQuery? – Elen 2012-04-19 14:13:21

+0

JS在客户端上运行,PHP在服务器上运行。你试图做什么都不行,期间。您需要使用AJAX或完整的往返传统表单提交系统。 – 2012-04-19 14:16:17

+0

我会检查出AJAX和JQuery。我现在意识到,服务器端PHP不能与客户端JS混合使用。试图找出如何在PHP中做到这一点,但PHP交互和返回html值/元素的方式并不像JS:/ – ChrisRSA 2012-04-19 20:09:55

回答

0

您必须唯一标识每一行(ID0,EMAIL0等)。当通过PHP或脚本构建表时,这很容易完成。然后在你的PHP表单代码中,你在$ _GET上做了一个foreach并读取它们。你现在的方式是,每个后续的ID,EMAIL等都写完前一个。

0

您有三个要插入的字段。每个都有一些。所以你需要使用输入字段的名称作为html数组。否则,在表单发布后,最后一个字段将覆盖之前的字段。相反

<table width="100%" border="1" cellspacing="0" cellpadding="0"> 
    <tr> 
    <th scope="col">ID</th> 
    <th scope="col">NAME</th> 
    <th scope="col">EMAIL</th> 
    </tr> 
    <tr id="row1"> 
    <td><input name="ID[]" type="text" value="22" /></td> 
    <td><input name="NAME[]" type="text" value="Mike" /></td> 
    <td><input name="EMAIL[]" type="text" value="[email protected]" /></td> 
    </tr> 
    <tr id="row2"> 
    <td><input name="ID[]" type="text" value="22" /></td> 
    <td><input name="NAME[]" type="text" value="Mike" /></td> 
    <td><input name="EMAIL[]" type="text" value="[email protected]" /></td> 
    </tr> 
    <tr id="row3"> 
    <td><input name="ID[]" type="text" value="22" /></td> 
    <td><input name="NAME[]" type="text" value="Mike" /></td> 
    <td><input name="EMAIL[]" type="text" value="[email protected]" /></td> 
    </tr> 
</table> 
+0

谢谢,花了我一段时间来弄清楚如何使用这些数组的代码,但得到它的工作。而不是为每一行分配一个唯一的名称。我创建了一个隐藏字段,该字段的值为每行增加javascript值。这个值然后用来遍历所有的数组值。 – ChrisRSA 2012-04-24 12:00:31

0

不是直接访问你的行,先得到你的表,然后将行:

具体讲,如下编辑您的标记。

var table = document.getElementById('myTable'); 
for (i=1; i < table.rows.length; i++) { 
    var row = table.rows(i); 
} 
0

如果你有相同ID的多个元素,如:

<tr id="row"> 

则函数:

document.getElementById("row") 

只考虑他们的最后一个这取决于(浏览器)。

要确定你真的会得到所有的元素,你必须给他们不同的id。像

<tr id="row1">... 
... 
<tr id="row2">... 
... 
<tr id="row3">... 
... 

祝你好运!