2015-04-23 2 views
0

У меня есть сценарий электронной почты, который разбит на 3 раздела, отправив три отдельных письма в конце. Одно из писем имеет заданный пользователем количество полей, и для цикла, принимая число полей, шлейфы содержимое таблицы соответственно .. По существу, я должен itterate, что внутри для цикла, как это:

for ($i = 1; $i <= $_SESSION['ct']; $i++) { 

$_SESSION['sec4_fieldname_' .$i] = $_REQUEST['sec4_fieldname_' . $i]; 
$_SESSION['sec4_othername_' .$i] = $_REQUEST['sec4_othername_' . $i]; 
$_SESSION['sec4_finalname_' .$i] = $_REQUEST['sec4_finalname_' . $i]; 
} 

Есть ли способ правильно ввести имя сеанса? Где fieldname - это имя одного из полей, которые должны быть закодированы, вместе с нижними. И $ _SESSION ['ct'] - это подсчет количества раз, когда это необходимо зацикливать на основе решений пользователей.

Я-знай - это не правильный синтаксис для этого. Кто-нибудь может помочь я понимаю, как это сделать? И если не так, то каков правильный способ сделать это?

+3

Вы должны probablu использовать массивы, поэтому имена входных будет 'имя = "sec4_fieldname []"'. Намного легче. – AbraCadaver

+1

Мне сложно понять контекст этого. Можете ли вы привести пример и объяснение? –

+0

Можете ли вы предоставить пример вывода $ _REQUEST или представленных данных FORM? – Cybot

ответ

1
<html> 
<body> 
<form> 
<input name="sec4[fieldname][]" value="fieldl"> 
<input name="sec4[othername][]" value="otherr"> 
<input name="sec4[finalname][]" value="finan"> 
</form> 
</body> 
</html> 

Это передается через POST/GET/ЗАПРОС на PHP файл:

<?php 
session_start(); 
foreach ($_REQUEST['sec4'] as $outerRowKey => $outerRowVal){ 
    // In this foreach loads all the values 
    // listed above in the HTML. 
    // please note the IF clause is simply to only deal with the 
    // array values and leaves the string values untouched. 
    if(is_array($outerRowVal)){ 
     foreach ($outerRowVal as $innerRowKey => $innerRowVal){ 
      //In this foreach loads the 'fieldname' or 
      // 'othername' or 'finalname' arrays in turn 
      // and saves its data to the session. 
      $_SESSION['sec4'][$outerRowKey][] = $innerRowVal; 
      } 
    unset($innerRowKey,$innerRowVal); 
    } 
} 
unset($outerRowKey, $outerRowVal); 

Это представит вам структуры в $ _SESSION от:

$_SESSION['sec4']['fieldname'][0] = "fieldl" 
$_SESSION['sec4']['fieldname'][1] 
$_SESSION['sec4']['fieldname'][2] 
$_SESSION['sec4']['fieldname'][...] 

$_SESSION['sec4']['othername'][0] = "other" 
$_SESSION['sec4']['othername'][1] 
$_SESSION['sec4']['othername'][2] 
$_SESSION['sec4']['othername'][...] 

$_SESSION['sec4']['finalname'][0] = "finan" 
$_SESSION['sec4']['finalname'][1] 
$_SESSION['sec4']['finalname'][2] 
$_SESSION['sec4']['finalname'][...] 

Вы можете, конечно, самостоятельно адаптируйте структуру, но ключевой момент заключается в том, что использование синтаксиса [] в конце имени части входа задает его как значение массива и добавляется при отправке в $_POST/$_REQUEST массив для использования скриптом PHP. Используя Foreach, вам тогда не нужно заботиться о том, сколько их есть, потому что все они рассматриваются одинаково.

Это намного более аккуратное и аккуратное и удобное решение, чем ручное редактирование значений ключа в числовом цикле. Это также означает, что если вы добавляете или удаляете значения из ввода формы, тогда код PHP все еще работает отлично.

Для того, чтобы ваш код выше и без изменения способа и просто улучшить выполнение кода (а также сделать его более удобным для чтения), попробуйте следующее:

Примечание:это хуже к использованию массивов. Такая проблема заключается в том, какие массивы идеально подходят для обработки.

for ($i = 1; $i <= $_SESSION['ct']; $i++) { 
    $a = 'sec4_fieldname_' .$i; 
    $b = 'sec4_othername_' .$i; 
    $c = 'sec4_finalname_' .$i; 
    $_SESSION[$a] = $_REQUEST[$a]; 
    $_SESSION[$b] = $_REQUEST[$b]; 
    $_SESSION[$c] = $_REQUEST[$c]; 
    } 
unset($a,$b,$c,$i); 
+0

У меня есть ощущение, что мои петли foreach не хватает чего-то: -/ – Martin

+0

Большое спасибо за это ..! Это именно то, что я ищу. –

Смежные вопросы