2015-03-24 2 views
0

Я искал и стучал головой с двух дней, чтобы достичь того, чего хочу достичь, но поскольку Google и другие источники не смогли решить мои проблемы, отправьте его здесь. У меня есть форма, где я отправляю массив и отправляю его через PHP, чтобы вставить его в базу данных mysql.Проверка и вставка многомерных массивов

Форма значения

<tr class="alternate-1"> 
<td>1</td> 
<td><input name="description[]" id="description-1" type="text" value="test1"></td> 
<td><input name="amount[]" id="amount-1" type="text" value="500.00"></td> 
<td><input name="paidby[]" id="paidby-1" type="text" value="">Company</td> 
<td><input name="paidto[]" id="paidto-1" type="text" value="client"></td> 
</tr> 
<tr class="alternate-2"> 
<td>2</td> 
<td><input name="description[]" id="description-2" type="text"></td> 
<td><input name="amount[]" id="amount-2" type="text" value="400.00"></td> 
<td><input name="paidby[]" id="paidby-2" type="text" value="">Company</td> 
<td><input name="paidto[]" id="paidto-2" type="text" value=""></td> 
</tr> 
<tr class="alternate-3"> 
<td>3</td> 
<td><input name="description[]" id="description-3" type="text" value=""></td> 
<td><input name="amount[]" id="amount-3" type="text" value=""></td> 
<td><input name="paidby[]" id="paidby-3" type="text" value=""></td> 
<td><input name="paidto[]" id="paidto-3" type="text" value=""></td> 
</tr> 
<tr class="alternate-4"> 
<td>4</td> 
<td><input name="description[]" id="description-4" type="text" value=""></td> 
<td><input name="amount[]" id="amount-4" type="text" value=""></td> 
<td><input name="paidby[]" id="paidby-4" type="text" value=""></td> 
<td><input name="paidto[]" id="paidto-4" type="text" value=""></td> 
</tr> 
<tr class="alternate-5"> 
<td>5</td> 
<td><input name="description[]" id="description-5" type="text" value=""></td> 
<td><input name="amount[]" id="amount-5" type="text" value=""></td> 
<td><input name="paidby[]" id="paidby-5" type="text" value=""></td> 
<td><input name="paidto[]" id="paidto-5" type="text" value=""></td> 
</tr> 

Если вы видите первый ряд содержит все необходимые значения. И на второй строке вводится только сумма и description поле и paidto поле не вводится. Следовательно, я не хочу обрабатывать форму и вызывать ошибку.

Мой PHP код, как это

if($_POST['sform'] == "1") 
{ 
    foreach($_POST['description'] as $key => $desc) 
    { 
     if (!empty($_POST['description'][$key]) && !empty($_POST['amount'][$key]) || !empty($_POST['paidto'][$key])) 
     { 
      $query = 'INSERT INTO `expenses` (`amount`, `description`, `paidby`, `paidto`,) VALUES ('.$conn->qstr($_POST['amount'][$key]).', '.$conn->qstr($_POST['description'][$key]).', '.$conn->qstr($_POST['paidby'][$key]).', '.$conn->qstr($_POST['paidto'][$key]).')'; 
      $results = $conn->Execute($query); 
     } 
     else 
     { 
      $error = "Form contain errors, please fix"; 
     } 
    } 
} 

С помощью этого кода, он выдает сообщение об ошибке, а также вставляет первые 2 строки данных.

Где не должно быть вставлено в качестве второго ряда description и paidby значения отсутствуют. Как правильно проверить правильность и вставить только правильные данные в базу данных.

Пожалуйста, помогите ...

+0

ты провел var_dump на глобальном ($ _GET/$ _ POST), что было представлено? –

+0

Да, вы хотите, чтобы я опубликовал его здесь? – sammry

+0

это поможет, тогда я могу рассказать вам путь каждого [var1] [var2] [var3] ... для пары, чтобы вы могли видеть, как это сделать. –

ответ

0

Комментарий с кодом слишком долго, поэтому я выложу ответ в надежде, что помогает вам. Самый быстрый/простой способ, с помощью которого я могу это сделать, - это дважды пропустить данные. После того, как проверить это не пустой, и когда-то на самом деле вставить данные ...

$error = ''; 
foreach($_POST['description'] as $key => $desc){ 
    if (empty($_POST['description'][$key]) || empty($_POST['amount'][$key]) || empty($_POST['paidto'][$key])) { 
     $error = "Form contain errors, please fix"; 
     break; // this stops it from going through every input. if one fails, they all fail 
    } 
} 

if ($error != ''){ 
    foreach($_POST['description'] as $key => $desc){ 
     $query = 'INSERT INTO `expenses` (`amount`, `description`, `paidby`, `paidto`,) VALUES ('.$conn->qstr($_POST['amount'][$key]).', '.$conn->qstr($_POST['description'][$key]).', '.$conn->qstr($_POST['paidby'][$key]).', '.$conn->qstr($_POST['paidto'][$key]).')'; 
     $results = $conn->Execute($query); 
    } 

}
+0

Я попытался с '&&' тоже, первая строка все еще вставлена. также вызывает ошибку, но не вставляет данные части второй строки. – sammry