Кажется, мой код работает нормально ... но мне кажется, что нужно скопировать и вставить много кода, подходящего для каждой еды. Я только скопировал и вставил код для двух переменных, но думаете, что должен быть более простой способ?
В настоящее время я показываю блюда в соответствии с «ключевыми словами», которые они могли выбрать, какие из них они предпочитают, через форму. По сути, то, что он делает, - это отображение блюд на основе их предпочтений (которые они заполнили через форму флажка). Кроме того, мне НУЖНЫ переменные для определения слова, например, $ 1 = 'Option1', а также = 1 означает, что пользователь установил флажок.
Если кто-нибудь может мне помочь, я буду очень признателен.
Не могли бы вы привести мне пример? Вы имеете в виду - $ foods = array ("", "", ""); поскольку я пробовал это, мне нужны оба B1 = 'яйца', как я могу поместить их все в массив?
Откуда берутся $B1 и $B2? покажи код! Также этот код неверен: if ($B1 = '1'). Должен быть if ($B1 == '1'), такой же для $B2
Непонятно, чего вы в конечном итоге пытаетесь здесь достичь
В таблице РЕЗУЛЬТАТЫ (полученные из предпочтений пользователя) он будет иметь B1 прямо до B6, показывая либо 1, либо 0 для этого пользователя, независимо от того, выбрали он его или нет.
Хорошо покажите код для РЕЗУЛЬТАТОВ - он тоже нуждается в улучшении.
Я собираюсь догадаться, что вам действительно нужно JOIN, две таблицы.
Пожалуйста, обновите вопрос дополнительным кодом и попробуйте написать чистый код, это не хорошая привычка учиться писать плохие ... У вас много ошибок
Да, но мне нужно написать этот код для КАЖДОГО, это та часть, которую мне нужно сократить? Наверняка должен быть более простой способ?
Так у вас где-то есть $B1=$_POST['1']?
Если вы хотите получить пользователя FoodQuestionnaireResults, у которого есть какой-то идентификатор, и вы хотите, чтобы этот идентификатор был в Recipes, где ключевое слово = что-то. Я думаю, что короткий путь был бы: SELECT * FROM FoodQuestionnaireResults WHERE userid='$userid' AND userid IN (SELECT id FROM Recipes WHERE keyword = $keyword) А потом делайте то, что хотите
Вы знаете, что ваш запрос FoodQuestionnaireResults на самом деле вообще не выполняется, верно? Вы назначаете его $dbQuery, а затем немедленно перезаписываете его другим запросом. Так что, если «Мой код работает нормально» действительно верно, то я не уверен, что вы понимаете, что на самом деле делаете.
Патрик: Код не работает. Но он ищет информацию о том, как замкнуть это в петлю.
@Adder Весь вопрос спорный, если OP не понимает, что происходит, потому что, если вы не понимаете, вы не можете объяснить другим (нам).
@ user1251007 Можно рекомендовать публикацию OP в CR, но в будущем, пожалуйста, не используйте Code Review как повод для закрытия вопроса. Оцените запрос и используйте причину, например слишком широкий, в первую очередь основанный на мнении и т. д. Затем вы можете указать OP, что он может быть опубликован в Code Review, если это по теме. См. Раздел Чего не следует делать в этот ответ на Руководство по обзору кода для пользователей Stack Overflow
@SamOnela: Спасибо за любезное объяснение! Я учту это в будущем.






Вы можете использовать цикл для доступа к своим переменным и получения рецептов для каждой. Было бы лучше поместить их в массив, но я не делал этого изменения, так как не знаю, откуда вы берете $ B1.
include ("dbConnect.php");
$A1 = ("cheese");
$A2 = ("yoghurt");
$A3 = ("egg");
$A4 = ("fruit");
$A5 = ("cereal");
$A6 = ("oatmeal");
$dbQuery=$conn->prepare("select * from FoodQuestionnaireResults where UserID=$UserID");
$dbQuery->execute();
while ($dbRow=$dbQuery->fetch(PDO::FETCH_ASSOC))
{
for($i = 1; $i<=6; ++$i) {
$bname = "B$i";
$$bname = $dbRow[$bname];
}
}
for($i = 1; $i<=6; ++$i) {
$aname = "A$i";
$bname = "B$i";
if ($$bname == '1')
{
$dbQuery=$conn->prepare("select * from Recipes where Keyword = '".($$aname)."'");
$dbQuery->execute();
while ($dbRow=$dbQuery->fetch(PDO::FETCH_ASSOC))
{
echo "<br><br><h4>".$dbRow["Name"]."</h4><br>"."<br><img src=Breakfast/".$dbRow['Picture']."' width='150' height='150' />"."<br><br>".$dbRow['Instructions'];
}
} else {
echo "";
}
}
Я использую странный, но рабочий код, например $$aname, для доступа к $A1 и $A6 и $$bname для доступа к $B1 и $B6.
Измените HTML на:
<h1>Question 1</h1><br>
</br>
<h4> What types of food do you like to eat for Breakfast?</h4><br>
<input type = "checkbox" name = "B1" value = "Cheese">Cheese
<input type = "checkbox" name = "B2" value = "Yoghurt" >Yoghurt
<input type = "checkbox" name = "B3" value = "Eggs">Eggs
<input type = "submit" name = "submit" value = "save" class = "button-form"></center></br>
Он ничего не возвращает мне сюда. Я также установил для всех пользовательских результатов значение 1, чтобы увидеть.
$ B1 .. $ B6 - это результаты пользователей?
приведенный выше код возвращает: Примечание: неопределенная переменная: B1 в /homepages/28/d706589850/htdocs/breakfast.php в строке 136 A1-A6 нужно определить как B1-B6, но все равно ничего не возвращает?
Да, я спросил $ B1 .. $ B6, какой у вас был код для них, но вы не добавили информацию об этом в свой вопрос.
см. отредактированный выше.
Я его отредактировал, теперь он должен быть готов.
$ name не определено?
Мой рабочий день подходит к концу. Так что я не могу отладить это с вами. Используйте echo $B1; и print_r($dbrow);, чтобы увидеть, какие части вашего кода работают, а какие нуждаются в улучшении.
Хотя $ name нигде не определено? Если бы вы могли просто сказать мне, что означает $ name?
Должен быть $bname
Теперь это работает отлично! СПАСИБО за вашу помощь @Adder
поместите каждое значение еды в массив и пропустите массив и делайте то, что хотите