У меня есть форма на моей странице с кучей входов и некоторых скрытых полей, меня просили передать эти данные через «почтовый массив», только я не уверен, как это сделать,
Вот фрагмент того, что я делаю в данный момент
<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 im, затем вызывая данные как таковые …
$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'];
Есть ли способ опубликовать его как массив? Во всяком случае, мой метод плохой практики?
дайте каждому вводу такое имя, как
<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
будет массив
Когда вы отправляете эти данные, он сохраняется как массив в $ _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'];
но я не вижу смысла. возможно, получить больше разъяснений?
Вы уже это делаете, по сути. Когда форма отправляется, данные передаются через массив сообщений ($ _POST). Ваш process.php получает этот массив и перераспределяет его значения как отдельные переменные.
Почему вы отправляете его через сообщение, если у вас уже есть его на стороне сервера (PHP)?
Почему бы просто не сохранить массив переменной $_SESSION
чтобы вы могли использовать ее, когда форма отправляется, что может сделать ее более «защищенной», так как клиент не может изменить переменные, отредактировав исходный код.
Это будет зависеть от того, как вы действительно хотите это сделать.
То, что вы делаете, не обязательно является плохой практикой, но, тем не менее, требует необычного набора текста. Я бы выполнил то, что вы пытаетесь сделать так.
foreach($_POST as $var => $val){ $$var = $val; }
Это займет все переменные POST и поместит их в свои отдельные переменные. Поэтому, если у вас есть поле ввода с именем электронной почты, а luser помещается на Someone@example.com, у вас будет переменная с именем $ email со значением «Someone@example.com».
Если вы хотите, чтобы все в вашем сообщении было как $ Variables, вы можете использовать что-то вроде этого:
foreach($_POST as $key => $value) { eval("$" . $key . " = " . $value"); }