2013-06-07 6 views
0

У меня есть форма, которая имеет радио входов, которые имеют динамически генерируемые имя, как показано ниже:

<input type="number" name="<?php echo date("Y")-4 ?>brand%gross" placeholder="Gross Sales % for <?php echo date("Y")-4 ?>"> 
<input type="number" name="<?php echo date("Y")-3 ?>brand%gross" placeholder="Gross Sales % for <?php echo date("Y")-3 ?>"> 
<input type="number" name="<?php echo date("Y")-2 ?>brand%gross" placeholder="Gross Sales % for <?php echo date("Y")-2 ?>"> 
<input type="number" name="<?php echo date("Y")-1 ?>brand%gross" placeholder="Gross Sales % for <?php echo date("Y")-1 ?>"> 

Тогда форма обрабатывается и создает динамическую таблицу со всеми значения входных данных пользователя, которые затем отправляются мне по электронной почте. Мой вопрос заключается в том, как получить динамически генерируемые радиостанции для вывода в таблицу, которая отправляется? Я знаю, что ниже не является правильным, но только, чтобы дать вам лучше смотреть на то, что я пытаюсь сделать:

if(isset($_POST)){ 
    ${ echo date("Y")-4 } = $_POST['{ echo date("Y")-4 }]; 

Любая помощь очень ценится!

+0

динамический стол? Вы имеете в виду строки, созданные на основе выбранных радиостанций? –

ответ

1

У вас есть строка (вывод date()), из которой вы вычитаете и целое число, в результате вы получаете результат как целое число, а не строку. Вероятно, вам лучше начать правильно писать строку и избавиться от целочисленной арифметической проблемы.

Я предлагаю работать с объектами DateTime. Вот как вы можете выводить поля ввода.

<?php 
$current_date = new DateTime(); 
while($i = 1; $i <= 4; $i++) { 
    $date_int = new DateInterval('P' . (string)$i . 'Y'); 
    $temp_date = $current_date->sub($date_int); 
    $date_string = $temp_date->format('Y'); 
?> 
    <input type="number" name="<?php echo $date_string; ?>brand%gross" placeholder="Gross Sales % for <?php echo $date_string; ?>" /> 
<?php 
} // end while 
?> 

Когда обрабатывая $_POST вы можете сделать то же:

<?php 
$current_date = new DateTime(); 
$year_array = array(); 
while($i = 1; $i <= 4; $i++) { 
    $date_int = new DateInterval('P' . (string)$i . 'Y'); 
    $temp_date = $current_date->sub($date_int); 
    $date_string = $temp_date->format('Y'); 
    if (!empty($_POST[$date_string. 'brand%gross'])) { 
     $year_array[$date_string] = $_POST[$date_string . 'brand%gross']; 
    } 
} // end while  
?> 

Обратите внимание, что я использую массив для хранения ваших данных индексируется года строкой, так как вы не можете иметь имя переменной, которая начинается с число (т.е. $2013nrand%gross недействительно).

Я бы также настоятельно предложил использовать запись доступа к массиву в ваших вводах для просто вещей.

Если вы сделали каждый вход так:

<input type="number" name="year_brand_gross[<?php echo $date_string; ?>]" placeholder="Gross Sales % for <?php echo $date_string; ?>" /> 

Тогда имена year_brand_gross[2013] и таким автоматически заполнят список как массив в $_POST['year_brand_gross'], устраняя необходимость в петлю через вход POST.

Вместо этого вы могли бы установить это в переменной, как этот

if(!empty($_POST['year_brand_gross']) { 
    $year_array = $_POST['year_brand_gross']; 
} 

Для PHP < 5.3.0 вы можете использовать альтернативный метод для генерации год строки:

$current_date = new DateTime(); 
for ($i = 1; $i <=4; $i++) { 
    $current_date->modify('-1 year'); 
    $date_string = $current_date->format('Y'); 
    // other code here 
} 

Обратите внимание, что, как показано , это изменит значение $current_date с каждым итератоном, который отличается от первого решения.

+0

При попытке реализовать ваш пример я получаю сообщение об ошибке в третьей строке вашего первого блока кода. – ItsMIllerTime65

+0

Какая ошибка вы получаете? Какую версию PHP вы используете, поскольку для параметра DateInterval требуется PHP> = 5.3.0? –

+0

Просто получить ошибку синтаксического анализа. Версия может быть проблемой ... Я знаю, что я работаю как минимум 5. Я должен проверить и вернуться к вам в понедельник. Очень ценю помощь, Майк! – ItsMIllerTime65

2

Если вы хотите установить изменяемый контент внутри $ _POST, ну ... используйте переменную.

$foo = date("Y")-4; 
$_POST['str'] = $foo; 

Итак ... вещь, вы хотите использовать переменную имя переменной, которая может идти, как это:

$foo = date("Y")-4; 
$$foo = $_POST[$foo]; 

Понял?

EDIT 1:

Так что переменная не будет начинаться с цифры:

$bar = "dt_"; 
$foo = date("Y")-4; 
${$bar.$foo} = $_POST[$foo]; 
+0

Ум, я думаю, у вас есть опечатка в '$$ foo'. ;-) –

+0

так не думайте ... Это двойной «$», вот почему его переменная переменная, потому что ее имя является переменной. –

+0

Хм ... интересный. Я этого не знал. «Каждый каждый день узнает что-то новое». –

0

Во-первых вы хотите обновить вам HTML, так что имена полей

<input type="number" name="year[<?= date("Y")-4 ?>brand%gross]" placeholder="Gross Sales % for <?= date("Y")-4 ?>"> 
<input type="number" name="year[<?= date("Y")-3 ?>brand%gross]" placeholder="Gross Sales % for <?= date("Y")-3 ?>"> 
<input type="number" name="year[<?= date("Y")-2 ?>brand%gross]" placeholder="Gross Sales % for <?= date("Y")-2 ?>"> 
<input type="number" name="year[<?= date("Y")-1 ?>brand%gross]" placeholder="Gross Sales % for <?= date("Y")-1 ?>"> 

На вашем PHP вы сможете получить доступ к элементам там, где есть ключи

$val2010 = $_POST["year"]["2010brand%gross"]; 
Смежные вопросы