检查Post数组中的变量名是否包含使用PHP的文本

时间:2013-06-21 13:51:54

标签: php post variable-variables

我有一个表单,允许用户在需要时添加更多字段。当用户执行此操作时,会出现另外两个字段(一个用于链接文本,另一个用于链接地址)。我使用javascript在输入名称上添加数字(例如newLinkTitle1 + newLinkAddress1newLinkTitle2 + newLinkAddress2等。)

  <input type="text" value="" name="newLinkTitle" size="50" />
  <input type="text" value="http://" name="newLinkAddress" size="50" />  

我想检查我的POST数组中是否有包含前缀newLinkTitle的变量,然后获取与之关联的newLinkAdress,然后将它们添加到我的数据库中。

目前我有这个:

foreach ((strpos($_POST, 'newLinkTitle')) as $currentNewLinkTitle) { // check if newLinkTitle exists
    $num = substr($currentNewLinkTitle, 12);  // get the number following "newLinkTitle"
    $currentLinkAddress = $_POST['newLinkAddress'.$num];
    //Update query 

}

5 个答案:

答案 0 :(得分:1)

正确的方法是将字段命名为数组:newLinkTitle[]newLinkAddress[]

<input type="text" value="" name="newLinkTitle[]" size="50" />
<input type="text" value="http://" name="newLinkAddress[]" size="50" />

然后使用您的JS代码添加另外几个具有相同名称的字段(newLinkTitle[]newLinkAddress[])。在PHP中,只需执行以下操作:

foreach($_POST['newLinkTitle'] as $key => $val) {
    $currentNewLinkTitle = $val;
    $currentNewLinkAddress = $_POST['newLinkAddress'][$key];
    // save to DB
}

在保存到数据库之前,不要忘记正确地转义值!

答案 1 :(得分:0)

尝试类似:

foreach ($_POST as $key => $value)
{
  if (strpos($key, 'newLinkTitle') !== false)  // note triple = is needed because strpos could return 0 which would be false
  {
    // do stuff with $value 
  }
}

答案 2 :(得分:0)

// Loop thru all POST fields.
foreach($_POST as $fieldName => $fieldValue)
{ 
  // Check if field is a link title.
  if(substr($fieldName, 0, 12) == 'newLinkTitle')
  {
    // If so, get index and link address.
    $num = substr($fieldName,12);
    $currentLinkAddress = $_POST['newLinkAddress'.$num];
    // Update query 
  }
}

如果使用UTF-8,请务必使用mb_substr()函数代替substr()

答案 3 :(得分:0)

您只需将循环调整为:

foreach($_POST as $field_name=>$field_value){
    #it's the field name you want to match for similarity
    if(strpos($field_name, "newLinkTitle") !== false){
        #we have a matching field
        .....
    }
}

注意:$ _POST是字段名的关联数组及其携带的值(只是提醒)

答案 4 :(得分:0)

您需要在表单名称中使用数组。例如:

<input type="text" value="" name="newLinkTitle[0]" size="50" />
<input type="text" value="http://" name="newLinkAddress[0]" size="50" />
<input type="text" value="" name="newLinkTitle[1]" size="50" />
<input type="text" value="http://" name="newLinkAddress[1]" size="50" />

PHP会将表单字段转换为数组。您可以这样使用它们:

foreach ($_POST['newLinkTitle'] as $key => $value) {
  echo 'Link title: ' . $value . ', link address: ' . $_POST['newLinkAddress'][$key];
}

不要忘记验证$ _POST数组。