#php #if-statement #mysqli #while-loop #html-table
#php #if-statement #mysqli #цикл while #html-таблица
Вопрос:
Я создаю свой собственный пользовательский веб-сайт и новичок в PHP, и я предполагаю, что я что-то неправильно сделал на начальном уровне. Я потратил несколько часов на просмотр различных видеоуроков и прочесал этот сайт в поисках подобной проблемы. Я нахожу руководство по PHP сложным для понимания, а образцы ресурсов W3 слишком просты.
Когда я запускаю это без оператора if «if ($ nosubs != NULL)», он работает как ожидалось, но когда я добавил оператор if, цикл остановился после одной итерации.
Вот PHP:
<?php
require "core.php";
require "connection.php";
$output = NULL;
if (empty($_SESSION['userID'])) {
header('Location: index.php');
} else {
if (isset($_SESSION['userID'])) {
$userID = $_SESSION['userID'];
$usergroup = $_SESSION['usergroup'];
$firstname = $_SESSION['firstname'];
$lastname = $_SESSION['lastname'];
if ($usergroup != 3) {
header('Location: index.php');
die();
} else {
// List unassigned submissions
$queryopensubs = mysqli_query($dbCon, "SELECT storysubID FROM storysubs WHERE storydecision IS NULL");
$numberopensubs = mysqli_num_rows($queryopensubs);
if ($numberopensubs == 0) {
$nosubs = "You do not have any new submissions";
break;
} else {
$nosubs = NULL;
}
// Assign new submissions to first readers
if ($numberopensubs > 0) {
$querynewsubs = mysqli_query($dbCon, "SELECT storysubID, storywordcount,
storyfilename, storysubdate, firstreadassignuserID FROM storysubs WHERE
firstreadassigndate IS NULL OR firstreadassigndate=0");
$newsubs = mysqli_fetch_assoc($querynewsubs);
$storysubID = $newsubs['storysubID'];
$storywordcount = $newsubs['storywordcount'];
$storyfilename = $newsubs['storyfilename'];
$storysubdate = $newsubs['storysubdate'];
$firstreadassignuserID = $newsubs['firstreadassignuserID'];
И вот html (из нижнего в том же файле):
<div id="editorunassignedsubs">
<h4 style="border:3px white inset; width:90%; margin:25px auto 0 auto; padding:15px;">
New Submissions To Be Assigned</h4>
<?php if ($nosubs != NULL) {
echo "<h3 style='text-align:center;padding:40px;'>".$nosubs."</h3>";
} else {
echo "<table>";
echo "<tr>";
echo "<th>Submission #</th>";
echo "<th>Submission File Name</th>";
echo "<th>Word Count</th>";
echo "<th>Submission Date</th>";
echo "<th>First Reader ID#</th>";
echo "<th></th>";
echo "</tr>";
while ($unassignedsubs = mysqli_fetch_assoc($querynewsubs)) :
echo "<tr>";
echo "<form name='assignfirstreader' method='post' action='upqry-assignfirstreader.php'>";
echo "<td>".$newsubs['storysubID']."</td>";
echo "<td>".$newsubs['storyfilename']."</td>";
echo "<td>".$newsubs['storywordcount']."</td>";
echo "<td>".date('M j, Y - g:ia',strtotime($newsubs['storysubdate']))."</td>";
echo "<td><input style='width:20px; text-align:center;'
type=text name='firstreadassignuserID' value='".$newsubs['firstreadassignuserID']."'>";
echo "<td><input type='submit' name='assign' value='Assign' style='font-family:Times; font-size:12pt;'>";
echo "</form>";
echo "</tr>";
endwhile;
echo "</table>";
} ?>
</div id="editorunassignedsubs">
Я попробовал mysqli_data_seek($querynewsubs,0); но он просто вернул одну и ту же строку дважды. Я выполнил var_dump, и запрос определенно возвращает две записи, которые я ожидаю увидеть из моих фиктивных данных. После того, как я заработаю правильно, я добавлю запрос на обновление, чтобы назначить читателей для отправлений в БД.
Что я сделал не так и почему это было неправильно?
* ПРИМЕЧАНИЕ: я еще не добавил никаких мер предосторожности — я все еще работаю над базовой структурой. Я вернусь и добавлю его после того, как изучу вопрос безопасности.
Комментарии:
1. О чем
if
ты говоришь?2. RTFM: php.net/manual/en/mysqli-stmt.data-seek.php он ожидает оператор mysqli, которого у вас нет. вы не подготовили инструкцию. Таким образом, ваш поиск завершается неудачей, и ваша строка, которую вы использовали при первом вызове выборки, просто ИСЧЕЗАЕТ.
3. Как вы думаете, какое if, по вашему мнению, останавливает итерацию? можете ли вы echo или var_dump что-то в каждом if?
4. @u_mulder Извините, я обновил свой вопрос, чтобы отразить, что это ($ nosubs != NULL) оператор if в разделе html.
5. В цикле while у вас есть объявленная переменная
$unassignedsubs
, но внутри цикла, который вы используете$newsubs
:-/
Ответ №1:
Фактической ошибкой была новая переменная в цикле while. Имя переменной выборки запроса должно было остаться прежним. Я изменил его на новое имя переменной, когда получал только вторую итерацию, но не изменил его обратно, когда добавил в mysqli_data_seek.
Спасибо, теперь я понимаю теорию присваивания переменных, поскольку она относится к функциям mysqli_fetch_xxx! Я действительно не понимал этого раньше, я просто следовал инструкциям, но не понимал, что я делаю.