2011-01-22 54 views
0

有没有更好的方式来处理表单,我需要保存linklink text针对语言和公司?更好的方式处理多个表单域

下面的例子工作,但我认为这是艰苦的工作。

我已经将语言和公司ID添加到链接和链接文本字段的关键字中,以将它们分组在一起并将其他信息传递到PHP和数据库。

$newlinks = array(); 
foreach($_POST as $post_key => $post_value) { 
    if (substr($post_key, 0, 7) == 'newlink') { 
    $posted_link = explode('_', $post_key); 
    $newlinks[$posted_link[1]][$posted_link[2]][$posted_link[0]] = $post_value; 
    $newlinks[$posted_link[1]][$posted_link[2]]['language_id'] = $posted_link[1]; 
    $newlinks[$posted_link[1]][$posted_link[2]]['company_id'] = $posted_link[2]; 

    } 
} 

foreach($newlinks as $newlinklang) { 
    foreach($newlinklang as $newlink) { 
    if ($newlink['newlink'] != '' && $newlink['newlinkname'] != '') { 
     $sql = " 
     INSERT 
      INTO 
     ".$db_prefix."catalogue_links (
      link, 
      link_name, 
      language_id, 
      company_id 
     ) VALUES (
      '".$newlink['newlink']."', 
      '".$newlink['newlinkname']."', 
      '".$newlink['language_id']."', 
      '".$newlink['company_id']."' 
     "; 
    } 
    } 
} 

和HTML

<input type="text" name="newlink_1_1" value="" /> 
<input type="text" name="newlinkname_1_1" value="" /> 

可以有多个语言和公司在一个页面上显示。

+0

请注意,请务必清理这些输入!你的SQL语句让我感到畏缩。使用http://php.net/manual/en/function.mysql-real-escape-string.php或使用预准备的语句。 – nategood 2011-01-22 22:28:40

+0

感谢@nategood,简化了SO的代码,我从帖子键和值中删除了我的清理。 – 2011-01-22 22:57:54

回答

3

使用something[]作为字段名称。然后,PHP将在$_POST['something'](或$ _GET和$ _REQUEST - 显然)中创建一个数组,您可以使用该数组而无需丑陋的子字符串比较。

您也可以在字段名称(name="something[42]")中指定数组索引。如果你有多个属于一起的字段,这可能是一个好主意。虽然订单无论如何都应该是正确的(因此您可以foreach($_POST['field1'] as $idx => $val)并使用_POST['field2'][$idx])如果索引也在HTML代码中,对于阅读代码的人来说,它可能更安全或至少更直观。