2016-04-19 2 views
0

Здесь, в этом коде, я принимаю данные в виде массива и вставляю его в базу данных. Поскольку я использую цикл while, у меня есть несколько полей ввода с тем же именем, что и в HTML-коде ниже. Что я хочу сделать, я хочу добавить проверку, что если два поля одинаковы, то ошибка эха, говорящая о двух полях, не может быть тем же самым вложением данных. Я мог бы сделать это, если бы два разных поля ввода для данных вроде if($field1 == $field2){ echo "Error!"; еще вставляли данные. Но здесь поле только одно, дает несколько полей в цикле while. Как я могу добавить эту проверку?Добавление проверки во время записи цикла

HTML код формы:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
     <?php while($pro = $priq->fetch()){ extract($pro); ?> 
     <div class="row tbpad"> 
      <div class="col-sm-3 col-xs-6"> 
      <p><i class="fa fa-caret-right"></i> <?php echo $bk_title; ?></p> 
      </div> 
      <div class="col-sm-1 col-xs-1"> 
      <div class="form-group"> 
       <input type="text" class="form-control" name="priority[]" value="<?php echo $pr_priority; ?>"> 
       <input type="hidden" class="form-control" value="<?php echo $bk_id; ?>" name="bkid[]"> 
      </div> 
      </div> 
     </div> 
     <?php } ?> 
     <input type="submit" class="btn btn-orange" value="Set Priority" name="priority"> 
     </form> 

PHP код:

if(isset($_POST['priority'])){ 
    $priority = (!empty($_POST['priority']))?$_POST['priority']:null; 
    $bkid  = (!empty($_POST['bkid']))?$_POST['bkid']:null; 

    $iNumSets = count($priority); 

    for($i = 0; $i < $iNumSets; $i++){ 
     $str = "INSERT INTO priorities(pr_book, pr_by, pr_priority) 
       VALUES('$bkid[$i]', '$sess', '$priority[$i]')"; 
     $res = $PDO->prepare($str); 
     $res->execute(); 

     if($res){ 
      echo '<script>alert("Priority added successfully!");window.location = "view-order.php";</script>'; 
     }else{ 
      echo '<script>alert("Server Error! Please try back later.");window.location = "add-order.php";</script>'; 
     } 
    } 
} 
+0

внутри цикла, в котором вы использовали window.location, он будет перенаправлен на другую страницу в одном запросе на вставку. одна вещь заключается в том, что он не будет работать для нескольких запросов на вставку – dev

+0

сначала правильно поймите вопрос ... затем ответьте, только если вы знаете ответ ... из-за какого-либо предложения plz должно быть связано с вопросом конкретно .. место, где я используемый window.location будет выполняться только в том случае, если вставка прошла успешно, так как она находится внутри оператора if. Поэтому не о чем беспокоиться. –

+0

Ваш код уязвим для SQL-инъекций, вы должны использовать подготовленные операторы –

ответ

-1

С $ приоритетом является массив, который вы получаете от $ _POST [ 'приоритет'], вы можете сделать следующее:

$num_original = count($priority); 
$num_unique = count(array_unique($priority)); 

if ($num_original != $num_unique) { 
    echo "One or more item were idendical!"; 
} 

Также убедитесь, что вы используете mysql_real_escape_string() или аналогичные методы на входе $ _POST, прежде чем передавать его в S QL-запрос. В противном случае ваш код уязвим для SQL-инъекций!

+0

Я использую PDO ... так что не нужно использовать mysql_real_escape_string ... однако .. Я буду попробуйте ваш ответ сейчас .. спасибо –

+0

извините за поздний ответ .. сработал .. спасибо .. –

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