Как правильно объединить 2 цикла foreach друг с другом в части SQL-запроса? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть информация в базе данных, которая использует тот же FK, но уникальный PK, и поэтому я зацикливаю ее для отображения на странице.И я хотел построить SQL Update Query, чтобы иметь возможность его обновлять.Теперь у меня есть 2 цикла, но я не уверен, как полностью объединить их, чтобы они работали в одном.

Что мне не хватает или что мне нужно сделать, чтобы получить результаты, которые янужно чтобы при запуске кода обновлялось уникальное поле, которое нужно обновить?Стоит ли использовать цикл for-each внутри другого цикла for-each?

Это код для подключения и получения информации из базы данных, а затем цикл для отображения значений и идентификатора.fields.

//connect
$sql_awards = "select `awards`, `awardsid` from inf_awards where inf_id = $vId";
$rs_awards = mysqli_query($vconncvnl, $sql_awards);

//display inputs
while ($rs_awards_rows = mysqli_fetch_assoc($rs_awards)) {
echo '<input type="text" name="awardact[]" id="awardact" class="awardactadd" value="' . $rs_awards_rows['awards'] . '">';
echo '<input type="hidden" name="txtaward[]" value="'. $rs_awards_rows['awardsid'] .'">';
}

Так что теперь я могу получить информацию на странице процесса, у меня также есть оператор обновления SQL и зацикленный

цикл foreach, который я использовал для отображения идентификатора наград, а затемцикл foreach для sql Code

//construction of loop for the awardsID field
$awardsId = '';
$award = $_POST['txtaward'];

foreach ($award as $awardid){
         $awardsId .= $awardid;
}

//construction of the loop for building the SQL Update Query
$sql_up_award = '';
foreach ($vaccolates as $valuesawards) {
                $sql_up_award .= sprintf("UPDATE inf_awards SET awards = %s WHERE inf_id = $vid AND awardsid = $awardsId ; ". "<br>", escapestring($vconncvnl, $valuesawards,'text'));
            }

, но когда я делаю это таким образом, это дает мне

UPDATE inf_awards SET awards = 'john smith honorary' WHERE inf_id = 2 AND awardsid = 23; 
UPDATE inf_awards SET awards = 'Best scorer' WHERE inf_id = 2 AND awardsid = 23; 

я предполагаю, что это является причиной предыдущего цикла теперь, когда я его вызываюв нем будут просто зацикливаться все значения, которые соответствуют требованию, которое на данный момент равно «23», однако

Результаты, которые я бы хотел получить, будут такими, как

UPDATE inf_awards SET awards = 'john smith honorary' WHERE inf_id = 2 AND awardsid = 2; 
UPDATE inf_awards SET awards = 'Best scorer' WHERE inf_id = 2 AND awardid = 3;

1 Ответ

0 голосов
/ 18 февраля 2019

Вложенные циклы не решат эту проблему, потому что вы получите 4 обновления.

У вас есть два массива, один с идентификаторами, один со значениями.Вы можете сделать один цикл for и получить соответствующие значения по индексу.

Однако я думаю, что это не совсем безопасно, так как я боюсь, что люди могут сделать текст пустым и таким образом испортить ваш массив, поэтому важно хотя бы заранее проверить, что оба массива содержат одинаковыеколичество предметов:

if (count($award) != count($valuesawards)) {

  echo 'Please fill in all the names';

} else {

    $sql_up_award = '';

    //construction of the loop for building the SQL Update Query
    $sql_up_award = '';

    for ($i = 0; $i < count($award); $i++) (
      $awardid = $award[$i];
      $valuesawards = $vaccolates[$i];
      $sql_up_award .= sprintf("UPDATE inf_awards SET awards = %s WHERE inf_id = $vid AND awardsid = $awardsId ; ". "<br>", escapestring($vconncvnl, $valuesawards,'text'));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...