2016-10-24 3 views
1

Я пытаюсь отправить через POST название некоторых отелей, код и адрес электронной почты на новую страницу, которая отправит электронное письмо в проверенные отели. Пока что, я действительно пытаюсь это сделать, отправить данные на новый php, который только echo с ними. То, что я работал до сих пор:Форма представления возвращает «массив»

<form action='chior.php' method='post'> 
<?php 
$i = 0; 
foreach($counter as $obj => $nr_rez) { 
    $nume_hotel = $hoteluri[$obj]; 
    $localitate = $localitati[$obj];  //all this arranges the data from a sql query 
    $email  = $emailuri[$obj]; 
    $total_rez += $nr_rez; 
    $cprest  = substr($cprest, 3, 10); 
    $parametri = "cp=$cprest&dstart=$data_start_af&dstop=$data_stop_af"; 
    $email  = str_replace(";", ";\n", $email); 

    echo "<tr class='mainRow'> <td> $i </td> 
       <td><input type='text' name='hotelul[$i][]' value='".$cprest."' readonly/> </td> 
       <td><a href='link.php?$parametri' target='_blank'>$nume_hotel</a></td> 
       <td> $localitate </td> 
       <td> $nr_rez </td> 
       <td><input type='text' name='hotelul[$i][]' value='". $email ."'/></td> 
       <td><input type='checkbox' id='$i' name='hotelul[$i][]'/></td> 
      </tr>"; 
$i++; 
} 
?> 
<input type='submit'/> </form> 

Там немного страницы я не писал, ради краткости (различные теги и CSS элементы, чтобы сделать страницу вид красиво), но он работает на мой конец. Единственная проблема заключается в том, что страница, на которую я отправляется после нажатия submit - chior.php, которая выглядит так: <?php echo $_POST['hotelul'];?>, возвращает «Массив». Я также пробовал <?php echo implode('/', $_POST['hotelul']);?>, <?php echo implode('-', implode('/', $_POST['hotelul']));?>, <?php echo $_POST['hotelul[][]'], и это было почти все, о чем я мог думать, и это все еще не сработало. У кого-нибудь есть идеи, почему это так и как я могу это исправить? Благодарю.

+0

Вместо '' echo' использовать print_r() ' –

+1

возвращает массив, потому что вы используете hotelul [$ i] [] в качестве имени ввода. Сделайте это hotelul, и вы не получите массив. В вашем случае имеет смысл использовать входное имя, например hotelul []. На стороне сервера вы получите массив всех введенных имен отелей. –

ответ

0

Изменения

1) Изменить name='hotelul[$i][]' в name='hotelul[]'

2) Все input имена hotelul. Измените другое имя, чтобы избежать двусмысленности.

Обновленный код:

<form action='chior.php' method='POST'> 
    <?php 
    $i = 0; 
    foreach($counter as $obj => $nr_rez) { 
    $nume_hotel = $hoteluri[$obj]; 
    $localitate = $localitati[$obj]; 
    $total_rez += $nr_rez; 
    $cprest  = substr($cprest, 3, 10); 
    $parametri = "cp=$cprest&dstart=$data_start_af&dstop=$data_stop_af"; 
    $email  = str_replace(";", ";\n", $emailuri[$obj]); 

    echo "<tr class='mainRow'> 
      <td> $i </td> 
      <td><input type='text' name='hotelul[]' value='".$cprest."' readonly/> </td> 
      <td><a href='link.php?$parametri' target='_blank'>$nume_hotel</a></td> 
      <td> $localitate </td> 
      <td> $nr_rez </td> 
      <td><input type='text' name='hotelul_email[]' value='". $email ."'/></td> 
      <td><input type='checkbox' id='$i' name='hotelul_chkbox[]'/></td> 
      </tr>"; 
    $i++; 
    } 
    ?> 
    <input type='submit'/> 
</form> 

chior.php

<?php 
$checkedHotels = sizeof($_POST['hotelul_chkbox']); 
for($i = 0 ; $i < $checkedHotels; $i++){ 
    $checked_hotel_email = $_POST['hotelul_email'][$i]; 

    //Write your mail function here to send mail to all checked hotels using `$checked_hotel_email`. 

}?> 
+0

Итак, в конце концов, нет способа сделать двумерные массивы в форме? – mihneaadr

0

Вы используете:

<td><input type='checkbox' id='$i' name='hotelul[$i][]'/></td>

, что означает, что hotelul является содержащий список (массив). Если вы хотите сохранить одно значение, удалите [];

name[] sintaxis используется, если вы хотите, чтобы $_POST['name'] был списком. Как это:

<input type="text" name="email[]" /> 
<input type="text" name="email[]" /> 
<input type="text" name="email[]" />