Выберите запрос, выполняющийся дважды - PullRequest
2 голосов
/ 06 апреля 2019

Я пишу простую страницу, чтобы получить «Номера PO», принадлежащие зарегистрированному пользователю. Эта часть работает нормально, за исключением запроса, возвращающего 2 полных набора записей. Я проверил наличие проблем с обновлением страницы, как упоминалось в других прочитанных мной сообщениях, но ни одного не было найдено.

poTable.php

    <table class="table" style="width: 100%">
        <thead class="thead-dark">
            <tr>
                <th scope="col">PO#</th>
                <th scope="col">Job#</th>
                <th scope="col">Job Name</th>
                <th scope="col">Salesperson</th>
                <th scope="col">Vendor</th>
                <th scope="col">Date</th>
            </tr>
        </thead>
        <tbody>

        <?php include 'usersPOs.php'?>

        </tbody>
    </table>

usersPOs.php

$db = mysqli_connect('localhost', 'root', '', 'acs-jobs-pos');

$userID = $_SESSION['userID'];
$userPrivs = $_SESSION['admin'];

if ($userPrivs == 0) {  // User IS NOT an admin
    // Get ALL main table records that belong to the logged-in user
    $sqlmain = "SELECT * FROM main INNER JOIN users ON main.userID = '" . $userID . "'";
    //debug_print_backtrace(); 
    $resultmain = mysqli_query($db,$sqlmain);
    while($rowmain = mysqli_fetch_assoc($resultmain))  
    {  
?>  
            <tr>  
<?php
        $PONumb = $rowmain["PONumb"];
        $jobNumber = $rowmain["jobNumber"];
        $jobName = $rowmain["jobName"];
        $salespersonID = $rowmain["salespersonID"];
        $vendorID = $rowmain["vendorID"];
        $timestamp = $rowmain["timestamp"];
?>

                <td><?php echo $PONumb ?></td>  
                <td><?php echo $jobNumber ?></td>  
                <td><?php echo $jobName ?></td>

<?php
        $sqlsp = "SELECT * FROM users WHERE userID = '" . $salespersonID . "'";
        $resultsp = mysqli_query($db,$sqlsp);   
        $rowsp = mysqli_fetch_assoc($resultsp);

        if ($rowsp["lastname"] == '' && $rowsp["firstname"] == '') {
?>
                <td></td>
<?php
        } else {
?>
                <td><?php echo $rowsp["lastname"] . ', ' . $rowsp["firstname"] ?></td>
<?php
        }

        $sqlvendor = "SELECT * FROM vendor 
                        WHERE vendorID = '" . $vendorID . "'";
        $resultvendor = mysqli_query($db,$sqlvendor);   
        $rowvendor = mysqli_fetch_assoc($resultvendor);
?>
            <td><?php echo $rowvendor["vendorname"] ?></td>

            <td><?php echo $timestamp ?></td>
        </tr>
<?php  
    }  
    mysqli_close($db);      
}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

следовать за ошибкой sql "ВЫБЕРИТЕ * ИЗ ОСНОВНЫХ ВНУТРЕННИХ РЕЙТИНГОВ ПО ON main.userID = '".$ userID."'";

вы не можете использовать join как это, что-то вроде "SELECT * FROM main INNER JOIN users ON main.userID = users.ID, где users.ID ='".$ userID."'";

0 голосов
/ 06 апреля 2019

Этот код может быть значительно упрощен путем использования объединений.Я также рекомендовал бы использовать PDO для доступа к вашей базе данных;это менее многословно и облегчает подготовленные операторы (и они не являются обязательными в любой среде). Из базы данных выбираются только соответствующие столбцы.Блок heredoc также используется для упрощения вывода.

<?php
$db = new PDO('mysql:host=localhost;dbname=acs-jobs-pos', 'root', '');

$userID = $_SESSION['userID'];
$userPrivs = $_SESSION['admin'];

if ($userPrivs == 0) {
    $sql = "SELECT m.PONumb, m.jobNumber, m.jobName, m.salespersonID, m.vendorID, m.timestamp,
        u.lastname, u.firstname, v.vendorname
        FROM main m
        LEFT JOIN users u ON (m.salespersonID = u.userID)
        LEFT JOIN vendors v ON (m.vendorID = v.vendorID)
        WHERE m.userID = ?";
    $stmt = $db->prepare($sql);
    $stmt->execute([$userID]);
    $results = $stmt->fetchAll(\PDO::FETCH_ASSOC);

    foreach ($results as $row) {
        echo <<< HTML
<tr>
    <td>$row[PONumb]</td>  
    <td>$row[jobNumber]</td>  
    <td>$row[jobName]</td>
    <td>$row[lastname], $row[firstname]</td>
    <td>$row[vendorname]</td>
    <td>$row[timestamp]</td>
</tr>
HTML;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...