Отправка массива из формы

#php #html #arrays #post

#php #HTML #массивы #Публикация

Вопрос:

У меня на странице есть форма с кучей входных данных и несколькими скрытыми полями, меня попросили передать эти данные через «post array», только я не уверен, как это сделать,

Вот фрагмент того, что я делаю в данный момент

 <form enctype="multipart/form-data" action="process.php" method="POST"> 
...
more inputs
...

<!-- Hidden data -->
<input type="hidden" name="TimeToRenderHoursInput" value="<?php echo $RenderHours; ?>" />
<input type="hidden" name="TimeToRenderDaysInput" value="<?php echo $RenderDays; ?>" />
<input type="hidden" name="TimeToRenderYearsInput" value="<?php echo $RenderYears; ?>" />
<input type="hidden" name="ContentMinutesInput" value="<?php echo $ContentMinutes; ?>" />
<input type="hidden" name="ContentMinutesSelector" value="<?php echo $ContentMinutesSelector; ?>" />
<input type="hidden" name="PriorityInput" value="<?php echo $Priority; ?>" />
<input type="hidden" name="AvgFrameRenderTimeInput" value="<?php echo $AverageFrameRenderTime; ?>" />
<input type="hidden" name="AvgFrameRenderTimeSelector" value="<?php echo $AverageFrameRenderSelector; ?>" />
<input type="hidden" name="CoresInTestInput" value="<?php echo $CoresInTest; ?>" />
<input type="hidden" name="EstPriceInput" value="<?php echo $EstPrice; ?>" />
<!-- End hidden -->

<input type="image" src="http://www.venndigital.co.uk/testsite/renderbutton/_includes/images/button/submit.jpg" alt="Submit" value="Submit" style="border:0!important;" />
  

В моем process.php затем я вызываю данные как таковые…

 $first_name = $_POST['first_name']; 
$company_name = $_POST['company_name']; 
$email_from = $_POST['email']; 
$address = $_POST['address']; 
$postcode = $_POST['postcode']; 
$RenderHours = $_POST['TimeToRenderHoursInput'];
$RenderDays = $_POST['TimeToRenderDaysInput'];
$RenderYears = $_POST['TimeToRenderYearsInput'];
$ContentMinutes = $_POST['ContentMinutesInput'];
$ContentMinutesSelector = $_POST['ContentMinutesSelector'];
$Priority = $_POST['PriorityInput'];
$AverageFrameRenderTime = $_POST['AvgFrameRenderTimeInput'];
$AverageFrameRenderSelector = $_POST['AvgFrameRenderTimeSelector'];
$CoresInTest = $_POST['CoresInTestInput'];
$EstPrice = $_POST['EstPriceInput'];
  

Есть ли способ опубликовать его в виде массива? Является ли мой метод плохой практикой в любом случае?

Ответ №1:

Дайте каждому входному сигналу имя в формате массива:

 <input type="hidden" name="data[EstPriceInput]" value="" />
  

Тогда в PHP $_POST['data']; будет массив:

   print_r($_POST);         // print out the whole post
  print_r($_POST['data']); // print out only the data array
  

Комментарии:

1. будет ли это хорошей практикой? одна вещь, которую я увидел в важности этого, заключается в том, что когда вы хотите вставить значения в базу данных, не вводя все поля, вы просто перебираете массив?

Ответ №2:

Когда вы отправляете эти данные, они сохраняются в виде массива в $_POST .

При желании вы могли бы сделать что-то вроде:

 <input name="arrayname[item1]">
<input name="arrayname[item2]">
<input name="arrayname[item3]">
  

Затем:

 $item1 = $_POST['arrayname']['item1'];
$item2 = $_POST['arrayname']['item2'];
$item3 = $_POST['arrayname']['item3'];
  

Но я не вижу смысла.

Комментарии:

1. Меня попросили создать страницу формы заказа для клиента, и они хотят, чтобы данные передавались им в виде массива POST, поскольку я не разработчик php, мне было интересно, достаточно ли моего способа, опубликованного выше, или его каким-либо образом не одобряют?

2. В опубликованном вами коде нет ничего плохого. Если в этом массиве есть только определенные скрытые элементы формы, которые им нужны (а не остальная часть формы), тогда я вижу, что им нужен многомерный массив. Это было бы достигнуто с помощью приведенного выше кода. Но да, с вашим кодом все в порядке.

Ответ №3:

На самом деле вы уже это делаете. При отправке формы данные передаются через массив post ($_POST). Ваш process.php получает этот массив и перераспределяет его значения как отдельные переменные.

Комментарии:

1. на самом деле это может быть массив, но в этом массиве также есть другие данные, которые он, возможно, не захочет просматривать

2. Ааа, есть ли способ, которым тогда можно распечатать массив? Я пробовал использовать <?php print_r(); ?> только он ничего не выводит, я должен использовать мой приведенный выше код, если это имеет смысл?

Ответ №4:

Почему вы отправляете его через post, если у вас уже есть это на стороне сервера (PHP)?

Почему бы просто не сохранить массив в $_SESSION переменной, чтобы вы могли использовать его при отправке формы, это могло бы сделать его более «безопасным», поскольку тогда клиент не сможет изменять переменные, редактируя исходный код.

Это будет зависеть от того, как вы действительно хотите сделать.

Ответ №5:

Вы можете использовать встроенную функцию:

 extract($_POST);
  

это создаст переменную для каждой записи в $_POST .

Ответ №6:

То, что вы делаете, не обязательно является плохой практикой, но, тем не менее, это требует необычайного количества ввода. Я бы выполнил то, что вы пытаетесь сделать, следующим образом.

 foreach($_POST as $var => $val){
    $$var = $val;
}
  

Это возьмет все переменные POST и поместит их в их собственные индивидуальные переменные.
Итак, если у вас есть поле ввода с именем email и пользователь вводит Someone@example.com у вас будет переменная с именем $email со значением «Someone@example.com «.

Комментарии:

1. Это плохой дизайн. Действительно, действительно, действительно плохой дизайн. 1) «var» может быть отправлен пользователем 2) val может быть отправлен пользователем. Итак, кто-то может отправить существующие переменные приложения в скрипт, и это переопределит его!

Ответ №7:

Если вы хотите, чтобы все в вашем сообщении было в виде $ Variables, вы можете использовать что-то вроде этого:


foreach($_POST as $key => $value) {
eval("$" . $key . " = " . $value");
}

Комментарии:

1. Угроза безопасности. (Когда $key равен уже существующим переменным в скрипте)