Массив PHP Form имеет пустые значения при вставке в таблицу MySQL - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблема с вставкой значений массива php в таблицу MySQL.Прямо сейчас форма сама извлекает рабочую информацию из другой таблицы, чтобы заполнить поля и их значения.В настоящее время есть только три работника, которые будут заполнять эти поля, однако по мере добавления новых работников их может быть целых 40. Когда я добавляю в форму только первого работника, вся информация вставляется нормально.Однако, когда я добавляю более одного, поля title и employeeId остаются пустыми, и я не могу понять, почему.Любая помощь будет принята с благодарностью.

Вот форма:

<form method = 'POST' action = 'addworkers.php'>
    <?php
        $sql2    = "select * from workers where companyId = 1";
        $result2 = mysqli_query($conn,$sql2);
        $numRows = mysqli_num_rows($result2);
        $check   = 0;
        while($row2 = $result2->fetch_assoc()) {
            $employeeId = $row2["id"];
            $name = $row2["name"];
            echo '<input type="checkbox" name="employeeId[]" value="' . $employeeId . '">';
            echo "$name\n";
            echo '<input type = "hidden" value="' . $companyId . '" name = "companyId[]"/>';
            echo '<input type = "hidden" value="' . $jobNumber . '" name = "jobNumber[]"/>';                
            echo 'Site Title : <input type = "text" name = "title[]"/><br/>';
        }
    ?>
    <input type="hidden" name="count" value="<?php echo "$numRows"; ?>"/>
    <input type = 'submit' value = 'SEND'/>
</form>

Затем код addworkers.php

require_once("dbConfig.php");
session_start();
$timestamp = date("Y-m-d");

if (isset($_SESSION['loginname'])) {
    $companyId  = isset($_POST['companyId']) ? $_POST['companyId'] : "" ;
    $jobNumber  = isset($_POST['jobNumber']) ? $_POST['jobNumber'] : "" ;
    $employeeId = isset($_POST['employeeId']) ? $_POST['employeeId'] : "" ;
    $title      = isset($_POST['title']) ? $_POST['title'] : "" ;

    foreach($title as $key=>$value){
        if (!empty($value)) {
            $query = "insert into `Jobs` (id, companyId, jobId, employeeId, siteTitle, dateAdded) values (NULL,'$companyId[$key]', '$jobNumber[$key]','$employeeId[$key]','$value','$timestamp')";
            $result = mysqli_query($conn,$query);
        }
    }
} else {
    echo "Error";
}

Я изменил строку "Ошибка" эха, но вывод был четким.

Должна быть проблема с подсчетом массива, но я не уверен, как это исправить.в форме, если я поставлю флажки рядом с каждой строкой, вся информация будет правильно введена в таблицу.Если я проверяю только вторую и / или третью строку, она не включает заголовок сайта, а идентификатор сотрудника меняется на обратный.

Вот вывод формы:

<form method = 'POST' action = 'insertworkers.php'>
    <input type="checkbox" name="employeeId[]" value="1">Mike
    <input type = "hidden" value="1" name = "companyId"/>
    <input type = "hidden" value="12345" name = "jobNumber"/>
    Site Title : <input type = "text" name = "title[]"/>

    <input type="checkbox" name="employeeId[]" value="2">Steve
    <input type = "hidden" value="1" name = "companyId"/>
    <input type = "hidden" value="12345" name = "jobNumber"/>
    Site Title : <input type = "text" name = "title[]"/>

    <input type="checkbox" name="employeeId[]" value="3">Roger
    <input type = "hidden" value="1" name = "companyId"/>
    <input type = "hidden" value="12345" name = "jobNumber"/>
    Site Title : <input type = "text" name = "title[]"/>

    <input type="hidden" name="count" value="3"/>
    <input type = 'submit' value = 'SEND'/>
 </form>

Iтакже изменил цикл foreach на цикл for, поскольку глубина массива должна быть одинаковой, поскольку все поля будут обязательными

require_once("dbConfig.php");
session_start();
$counter   = "".$_POST["count"]."";
$timestamp = date("Y-m-d");

if ( isset( $_SESSION['loginname'] ) ) {
    $companyId  = isset($_POST['companyId']) ? $_POST['companyId'] : "" ;
    $jobNumber  = isset($_POST['jobNumber']) ? $_POST['jobNumber'] : "" ;
    $employeeId = isset($_POST['employeeId']) ? $_POST['employeeId'] : "" ;
    $title      = isset($_POST['title']) ? $_POST['title'] : "" ;

    for($i=0, $count = count($employeeId);$i<$count;$i++){
        if (!empty($employeeId)) {
            $query = "insert into `customerJobs` (id, companyId, jobId, employeeId, siteTitle, dateAdded) values (NULL,'$companyId', '$jobNumber','$employeeId[$i]','$title[$i]','$timestamp')";
            $result = mysqli_query($conn,$query);
        }
    }
} else {
    echo "Error";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...