Использование цикла для получения всех таблиц в базе данных

Пожалуйста, поймите, что я довольно новичок в PhP и, возможно, пришел к ответу на мой вопрос, не зная об этом. Если это так, пожалуйста, направьте меня к правильному ответу.

У меня есть база данных, в которой есть несколько таблиц. Каждая таблица имеет одинаковую структуру, так как каждая таблица соответствует отдельной единице в рамках франшизы ресторанов. Я пытаюсь создать "главную" страницу для владельца франшизы, чтобы иметь возможность поднять все (или одну) таблицы на одну страницу, чтобы просмотреть данные, связанные с каждым подразделением. Я пробовал каждое проникновение, которое мог придумать, чтобы заставить код работать правильно, но я продолжаю получать сообщения об ошибках. Самое последнее сообщение об ошибке, которое я получаю: "У вас есть ошибка в вашем синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '' в строке 1".

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

<?php
require_once('../dbconnection.php');

$tables = array($_POST["spenard"], $_POST["benson"], $_POST["eagle"],
$_POST["wasilla"], $_POST["boniface"], $_POST["dimond"], $_POST["tudor"],
$_POST["huffman"], $_POST["dtown"], $_POST["airport"], $_POST["college"],
$_POST["npole"], $_POST["kenai"], $_POST["suldotna"]);
$length = count($tables);


?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Food Safety Checklist Master List</title>

<script>

</script>
</head>

<body>

<!--<table>
    ?php
        for ($i = 0; $i < $length; $i++) {?>
        <tr>
            <th>?php echo $tables[$i]; ?></th>
        </tr>
        ?php }
    ?>
    <tr>

    </tr>
</table>-->

<table>
    <tr>
        <th>Food Safety Checklist</th>
    </tr>
    <?php for ($i = 0; $i < $length; $i++) { 
        mysqli_select_db($conn, $dbname);
        $query_lists = "SELECT * FROM $tables[$i]";
        $lists = mysqli_query($conn, $query_lists) or
die(mysqli_error($conn));
        $row_lists = mysqli_fetch_assoc($lists);
        $totalRows_lists = mysqli_num_rows($lists);?>
    <tr>
        <th><?php echo $row_lists[' ']; ?></th>
    </tr>
    <?php } ?>
</table>

</body>
</html>

Код для начальной страницы:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Food Safety Checklist Master Selection</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.15.0/jquery.validate.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.15.0/additional-methods.min.js"></script>
</head>

<body>

<header>
    <h1>Pizza Hut Food Safety</h1>
</header>

<section>
    <div>
        <form action="mastershow.php" method="post" name="masterselect" id="masterselect">
            <table>
                <tr>
                    <th colspan="2"><h2>Stores</h2></th>
                </tr>
                <tr>
                    <th colspan="2"><input type="submit" value="Run" id="submit" name="submit"></th>
                </tr>
                <tr>
                    <td><label for="spenard">Spenard 010576</label></td>
                    <td><input name="spenard" id="spenard" type="checkbox" value="`010576`"><br/></td>
                </tr>
                <tr>                
                    <td><label for="benson">Benson 011169</label></td>
                    <td><input name="benson" id="benson" type="checkbox" value="`011169`"><br/></td>
                </tr>
                <tr>
                    <td><label for="eagle">Eagle River 008181</label></td>
                    <td><input name="eagle" id="eagle" type="checkbox" value="`008181`"><br/></td>
                </tr>
                <tr>
                    <td><label for="wasilla">Wasilla 010324</label></td>
                    <td><input name="wasilla" id="wasilla" type="checkbox" value="`010324`"><br/></td>
                </tr>
                <tr>
                    <td><label for="boniface">Boniface 008615</label></td>
                    <td><input name="boniface" id="boniface" type="checkbox" value="`008615`"><br/></td>
                </tr>
                <tr>
                    <td><label for="dimond">W. Dimond 009150</label></td>
                    <td><input name="dimond" id="dimond" type="checkbox" value="`009150`"><br/></td>
                </tr>
                <tr>
                    <td><label for="tudor">Tudor 014640</label></td>
                    <td><input name="tudor" id="tudor" type="checkbox" value="`014640`"><br/></td>
                </tr>
                <tr>
                    <td><label for="huffman">Huffman 0101684</label></td>
                    <td><input name="huffman" id="huffma" type="checkbox" value="`010684`"><br/></td>
                </tr>
                <tr>
                    <td><label for="dtown">6TH AVE 011168</label></td>
                    <td><input name="dtown" id="dtwon" type="checkbox" value="`011168`"><br/></td>
                </tr>
                <tr>
                    <td><label for="airport">Airport Rd. 014215</label></td>
                    <td><input name="airport" id="airport" type="checkbox" value="`014215`"><br/></td>
                </tr>
                <tr>
                    <td><label for="college">College Rd. 008179</label></td>
                    <td><input name="college" id="college" type="checkbox" value="`008179`"><br/></td>
                </tr>
                <tr>
                    <td><label for="npole">North Pole 008339</label></td>
                    <td><input name="npole" id="npole" type="checkbox" value="`008339`"><br/></td>
                </tr>
                <tr>
                    <td><label for="kenai">Kenai 008668</label></td>
                    <td><input name="kenai" id="kenai" type="checkbox" value="`008668`"><br/></td>
                </tr>
                <tr>
                    <td><label for="suldotna">Suldotna 031574</label></td>
                    <td><input name="suldotna" id="suldotna" type="checkbox" value="`031574`"><br/></td>
                </tr>
            </table>
        </form>
    </div>
</section>

<footer>
    Designed by Greg Weiland &copy;2017
</footer>   

</body>
</html>

Опять же, я пытаюсь сделать так, чтобы владелец франшизы мог "проверить", в каких хранилищах запускать отчет, а затем получить все строки из соответствующих таблиц (опять же, каждая таблица имеет имя, соответствующее одному из номера единиц), которые он выбрал. Каждая таблица имеет одинаковую структуру. Спасибо за любую помощь

2 ответа

Он говорит вам, что ваш запрос неправильный, и у вас есть переменная внутри, не сообщая, что это переменная исправить это так

$query_lists = "SELECT * FROM '$tables[$i]'";

изменить изменить это из-за типа массива

  //see my last comment on why i do it this way
  <?php foreach ($tables as $qtables) { 
            mysqli_select_db($conn, $dbname);
            $query_lists = "SELECT * FROM '$qtables'";

Попробуйте это вместо:

$sql = "SELECT * FROM ".$tables[$i];
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"] . "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();

тогда, например, вы ищете идентификатор в вашем выделении, а затем просто найдите его с $results['id'];

также небольшая заметка: мне нравится помещать методы запросов в базу данных в отдельный php-файл, который я импортирую. в этом случае я собираю все свои данные в массиве $ results и возвращаю массив.

что-то вроде этого:

$sql = "SELECT * FROM ".$tables[$i];
$result = $conn->query($sql);
$results = array();  
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $results[] = $row;
    }
} else {
    echo "0 results";
}
$conn->close();
return $results;
Другие вопросы по тегам