Как обрабатывать данные из нескольких флажков, имеющих одинаковое значение? - PullRequest
0 голосов
/ 30 декабря 2018

Итак, у меня есть код, который должен показывать данные из таблицы mysql, и в конце каждой строки есть флажок, цель которого - перенести всю строку в другую таблицу после отправки, если флажок установлен.Код работает нормально, но независимо от того, сколько строк вы выбрали, он всегда перемещает только одну строку, и мой вопрос здесь состоит в том, как я могу кодировать его дальше, чтобы он мог передавать все выбранные строки одним нажатием

Послемного исследований я почему-то пришел к выводу, что я должен использовать цикл foreach (с которым я не знаком), и когда я заменяю свой $ rowid этим

foreach ($_POST['checks'] as $check){
        $rowid = $check;
    }

$ rowid теряет свое первоначальное значение и всю функциюперестает работать

Вот мой рабочий код, который перемещает только одну строку:

<?php 
$mysqli = new mysqli('localhost', 'root', 'password', 'orders');

$query = "SELECT * FROM received ORDER BY date";
$result = mysqli_query($mysqli,$query);
?>

<table>
<tr>
    <th>ID</th>
    <th>Client Name</th>
    <th>Contact Info</th>
    <th>Address</th>
    <th>Order Type</th>
    <th>Amount</th>
    <th>Date Ordered</th>
    <th>Complete Order</th>
</tr>
<form action='#' method='POST'>
<?php
if(mysqli_num_rows($result)>0){
    while($row = $result->fetch_assoc()){
        echo'
        <br />
        <tr>
            <td>'.$row["id"].'</td>
            <td>'.$row["clientname"].'</td>
            <td>'.$row["contactinfo"].'</td>
            <td>'.$row["address"].'</td>
            <td>'.$row["ordertype"].'</td>
            <td>'.$row["amount"].'</td>
            <td>'.$row["date"].'</td>
            <td><input type="checkbox" name="checks" value='.$row["id"].' /></td>
        </tr>';
    }
}
?>
</table>
<button name="complete" class="regbutton">Complete Orders</button>
</form>

<?php 
if (isset($_POST['complete'])){
    $rowid = $_POST['checks'];
        if(isset($_POST['checks'])){
            $query = "INSERT INTO delivered SELECT * FROM received WHERE id = '$rowid'";
            $query_run = mysqli_query($mysqli, $query);
            $query = "DELETE FROM received WHERE id = '$rowid'";
            $query_run = mysqli_query($mysqli, $query);
            echo "<script>alert('Eureka!');</script>";
        }
        else{
        echo "<script>alert('Nothing is checked!');</script>"; 
        }
}
?>

Я ожидал, что переменная $ check покажет точные идентификаторы выбранных строк и, надеюсь, переместитсякаждая строка выбрана, но она этого не делает

Я также пытался поместить весь оператор if (isset ($ _ POST ['check ..) внутри цикла ..WHERE id =' $ check .. но этов любом случае не работает

1 Ответ

0 голосов
/ 30 декабря 2018

Измените имя флажка, чтобы он мог стать массивом, подобным этому

<input type="checkbox" name="checks[]" value='.$row["id"].' />

, затем добавьте оператор, который будет выполняться внутри цикла, также измените переменную условия WHERE, представляющую выбранное значение флажка / с (из$ rowid to $ check)

foreach ($_POST['checks'] as $check){

        if(isset($_POST['checks'])){
            $query = "INSERT INTO delivered SELECT * FROM received WHERE id = '$check'";
            $query_run = mysqli_query($mysqli, $query);
            $query = "DELETE FROM received WHERE id = '$check'";
            $query_run = mysqli_query($mysqli, $query);
            echo "<script>alert('Eureka!');</script>";
        }
        else{
        echo "<script>alert('Nothing is checked!');</script>"; 
        }
    }

ответ взят из комментариев к вопросу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...