2017-01-13 4 views
0

У меня эти флажки, используемые для идентификации (если отмечено), должны посылаться по электронной почте соответствующему клиенту, он должен быть предварительно проверен.Флажок не получил правильного порядка

Но когда он предварительно проверен, а затем, когда я снял флажок, например, multipayment_email [1], когда он отправлен на PHP, тот, который получает unset, является последним индексом multipayment_email [4].

list_payments.php:

<form method="POST"> 
<?php while($row = mysqli_fetch_array($selectQuery) { ?> 
    <input type="text" name="multipayment_name[]" required/> 
    <input type="checkbox" name="multipayment_email[]" checked /> 
<?php } ?> 
</form> 

SUBMIT_payment.php:

$names = $_POST['multipayment_name']; 
$emails = $_POST['multipayment_email']; 

foreach ($names as $key => $name) 
{ 
    $email = isset($emails[$key]) ? 1:0; 

    $query = "INSERT INTO payments() VALUES (NULL, '$name', $email)"; 

    $response['message'] .= $query."<br/>"; 
} 

die(json_encode($response)); 

Так что, когда я отправить форму, вывод (учитывая, что я необузданный 2-й индекс из 5 флажков):

"INSERT INTO payments() VALUES (NULL, '1 waw', 1)" 

"INSERT INTO payments() VALUES (NULL, '2 wew', 1)" 

"INSERT INTO payments() VALUES (NULL, '3 wiw', 1)" 

"INSERT INTO payments() VALUES (NULL, '4 wow', 1)" 

"INSERT INTO payments() VALUES (NULL, '5 wuw', 0)" 

Должно быть

"INSERT INTO payments() VALUES (NULL, '2 wew', 0)"

любое просвещение?

+1

Это не связано с вашим вопросом, но этот код уязвим для SQL-инъекции. Представьте, что произойдет, если someones * name * будет '',' '); DROP TABLE payments; ' – Keatinge

+0

Ваш размер' $ name' и '$ emails'array не то же самое, поэтому вы не можете использовать ключи' $ names' для '$ emails' – anon

ответ

1

Попробуйте это:

<form method="POST"> 
<?php $idx = 0; ?> 
<?php while($row = mysqli_fetch_array($selectQuery)): ?> 
    <input type="text" name="rows[<?php echo $i; ?>][name]" required/> 
    <input type="checkbox" name="rows[<?php echo $i; ?>][email]" checked /> 
    <?php ++$idx; ?> 
<?php endwhile; ?> 
</form> 

И так, если третий флажок снят, то вы получите данные в $ _POST в этом формате:

array(
    'rows' => array(
     array(
      'name' => 'the value of name 1', 
      'email' => 'on' 
     ), 
     array(
      'name' => 'the value of name 2', 
      'email' => 'on' 
     ), 
     array(
      'name' => 'the value of name 3' 
     ) 
    ) 
) 

Флажки, которые не проверяются, будут сняты с поля и не будут отправлены, и оттуда вы можете легко выполнить проверку isset, чтобы узнать, проверено или нет.

$rows = $_POST['rows']; 
foreach ($rows as $row) { 
    $email = isset($row['email') ? 1 : 0; 
    $name = $row['name']; 
    $query = "INSERT INTO payments() VALUES (NULL, '$name', $email)"; 
    $response['message'] .= $query."<br/>"; 
} 

Но DO ПРЕДУПРЕЖДАЛ, что этот код чувствителен к SQL-инъекции. Поскольку это выходит за рамки этого вопроса, давайте не будем погружаться в это здесь :)

+0

спасибо, сэр, я сделал другой подход вместо этого, благодаря концепции, которую вы мне дали. Вместо этого я создал фиктивный тип ввода со значением = 1 (который изменяется, если снять флажок с соответствующей отметки). , поэтому мне не придется иметь дело с неустановленным индексом checkbox. Tho это действительно хороший сэр, я просто более комфортно с меньшими циклами на PHP-файлах.благодаря :) – Christopher

-1

Последний не снят, эта строка кода дает вам нежелательный результат.

$email = isset($emails[$key]) ? 1:0; 

При снятии флажка он не будет отправлен на сервер. дамп вашего поданного массива флажков, я думаю, вы его получите)

+0

Я пробовал этот сэр, но проблема в том, что что количество индексов будет немного выключено, поэтому в моем случае это действительно не подходит. спасибо tho: D – Christopher

1

Все Входы должны иметь разные имена. Теперь есть FAW входы с двумя именами multipayment_name[] и multipayment_email[]

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