如何从动态HTML表中收集数据

时间:2012-01-20 23:11:43

标签: php html

我有一个带有新闻事件(NIEUWSBERICHT),照片(图片)和广告(RECLAME)的HTML表格。在此页面上,用户可以通过向其添加页面编号来组织这些项目。将页面编号保存到数据库后,带有页面编号的项目将在cablenewspaper的版本(或者您用英语调用的任何内容)中进行广播,这是最终目标。 HTML表还显示了我的查询所需的外键。

HTML表的图像位于:

enter image description here

我的问题是:如何在提交表单后从上面的HTML表中收集数据?

我想获得两种类型的查询(例如;键与上图相对应):

UPDATE NIEUWSBERICHT SET pagenumber = 2 WHERE nieuwsbericht_id = 53
UPDATE NIEUWSBERICHT SET pagenumber = 3 WHERE nieuwsbericht_id = 56
UPDATE NIEUWSBERICHT SET pagenumber = 6 WHERE nieuwsbericht_id = 62

UPDATE IMAGE SET pagenumber = 7 WHERE image_id = 19

让我感到困难的是,HTML表是动态构建的(在PHP中),行数是可变的。见下面的清单。不知何故,我认为如果我放开动态构建表并开始使用数组来存储所有变量而不是“$ cell”会更好。或者也许我可以以某种方式获取屏幕中的PageNo项目获得多个值,如图中第一行的PageNo获取值20和8,我可以在查询中使用。 Aahhhrrg,我只是不知道如何继续。有人请吗?

// Get column names //
$fields_num = mysql_num_fields($result);
echo "<h1>Create edition {$table}</h1>";
echo "<table border='1'><tr>";
for($i=0; $i<$fields_num; $i++)
    {
    $field = mysql_fetch_field($result);
    echo "<td>{$field->name}</td>";
    }
echo "<td>PageNo</td>";
echo "</tr>\n";

// Show query result //
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
echo "<tr>";
foreach($row as $cell)
    echo "<td>$cell</td>";
echo "<td> <select  name='paginanummer'>
    <option></option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option>
    <option>10</option>
    </select></td>";
    echo "</tr>\n";
    }
哇,这真是一个故事。希望我做得很好。

2 个答案:

答案 0 :(得分:0)

select元素名称指定其所代表行的ID 例如:

 <select name="position_12">

表示db

上id为12的行

比提交表单时 循环数据以搜索以“position _”

开头的参数
foreach($_POST as $key=>$value){
  if(preg_match("^position\_(\d+)$",$key,$matches) && is_numeric($value)){
     $row_id = $matches[1];
      echo "insert {$value} into row number {$row_id}";
  }
}

我在echo行放置了$row_id$value个vars,您可以用它来构建查询

答案 1 :(得分:0)

Bingo,它有效!

这是填充HTML表格列“PageNo”的代码。如你所见,我给出了选择的唯一名称(感谢Yaron ;-))并将我需要的键放在select的值中,就像字符串一样。

echo "<td> <select  name='position_".$rowcounter."'>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 0'></option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 1'>1</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 2'>2</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 3'>3</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 4'>4</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 5'>5</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 6'>6</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 7'>7</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 8'>8</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 9'>9</option>
   <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 10'>10</option>
   </select></td>";

然后在提交之后,十个值存储在名为$ kv的arrray中。它是这样的:

if ($_POST) {
    $kv = array();
    foreach ($_POST as $key => $value) {
    $kv[] = "$value";
    etc...

然后我循环遍历数组,使用splitdata将值(字符串)拆分成单独的变量。这就是我想要的!它是这样的:

$maxcount = count($kv) - 1;
for ($teller = 0; $teller <= $maxcount; $teller++) {
$data = $kv[$teller];
$splitdata = explode(',', $data);
$type = $splitdata[0];
$nieuwsbericht_id = $splitdata[1];
$reclame_id = $splitdata[2];
$image_id = $splitdata[3];
$paginanummer = $splitdata[4];

etc.... (now I can create the sql queries I need to update the database tables)