Использование цикла для получения всех таблиц в базе данных
Пожалуйста, поймите, что я довольно новичок в 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 ©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;