#php #html #variables #while-loop
#php #HTML #переменные #цикл while
Вопрос:
В принципе, у меня есть 1 поле выбора в верхней части моей страницы, называемое cups. На каждый кубок назначено по 8 команд. После выбора кубка и нажатия кнопки отправить я хочу, чтобы все команды, связанные с этим кубком, заполнили 8 полей выбора в другом месте страницы, позволяя пользователю выбирать, какая команда играет с другой.
Я пробовал много чего, и я дошел до того, что могу повторять команды, они просто не повторяются в полях выбора в другом div на той же странице
<input type="submit" name="submit" value="Generate" class="submit">
<?php
if (isset($_POST['submit'])) { //checking if submit button was clicked
include_once 'action/dbcon.php';
$cname = $_POST['cupname'];
if (empty($cname)) {
header("Location: ../table.php?field=empty"); //return them if fields are empty
exit();
} else {
$sql = "SELECT * FROM teams WHERE cup_name='$cname'";
$show_teams = mysqli_query($conn, $sql);
if (!$show_teams) {
echo "Could not load teams! " . "(" . mysqli_error($conn) . ")";
}
while ($team = mysqli_fetch_assoc($show_teams)) {
echo $team["team_name"];
}
}
echo "dank";
}
?>
</form>
<div class="seed-container">
<div class="column-1">
<form class="seed-form">
<select name="team" required>
<option></option>
</select>
<select name="team" required>
<option></option>
</select>
Итак, я повторяю правильные результаты, просто не в качестве параметров в полях выбора, где я их хочу
Комментарии:
1. Предупреждение: Вы широко открыты для SQL-инъекций и действительно должны использовать параметризованные подготовленные инструкции вместо ручного построения ваших запросов. Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким входным данным, особенно тем, которые поступают со стороны клиента. Даже когда ваши запросы выполняются только доверенными пользователями, вы все еще рискуете повредить свои данные .
Ответ №1:
проще всего было бы повторить их там, где они должны появиться:
<select name="team" required>
<?php while ($team = mysqli_fetch_assoc($show_teams)) { ?>
<option value="<?php echo $team["team_id"]; ?>"><?php echo $team["team_name"]; ?></option>
<?php } ?>
</select>
Комментарии:
1. Это то, что я пытался исправить, однако я запутался относительно того, где размещен уже написанный PHP-код до состояния while. Не могли бы вы привести пример? Спасибо
2. @BradArcher разве я уже не привел хороший минимальный пример? просто переместите этот цикл … или извлеките все записи, а затем выполните цикл дважды. единственное, что здесь сбивает с толку, это то, что вы не указали поля набора записей и не ожидали вывода … ни значений параметров, которые нужно выбрать. Обычно для такого вывода, вероятно, можно было бы использовать механизм шаблонов.
3. приношу извинения, я не понял, что части работают сейчас. Краткий вопрос, знаете ли вы способ удаления их из поля выбора, как только пользователь выбрал эту конкретную запись?
4. Кстати, этот код работает только для одного выбора, когда та же строка кода используется в другом, он не загружает никаких результатов
Ответ №2:
Вы можете справиться с этим с помощью jQuery — В моем примере я просто вырезал и вставил из одного из моих скриптов cms.
Приведенная ниже форма включена в увеличенную форму, поэтому тег формы и подзаголовок отсутствуют в примере.
Форма:
<?php
echo '<div class="row">';
# page-type
echo '<div class="col_3">';
$getPgType = $db->prepare('SELECT page_type_id, page_type FROM page_types WHERE page_type_id >= 1 order by page_type asc');
$getPgType->execute();
echo '<label>Page Type</label><br>';
echo '<select id="" name="page_type" class="expand">';
echo '<option value=""'; if($page_type == ''){echo 'selected';} echo '>Select Page Type</option>';
while($row = $getPgType->fetch(PDO::FETCH_ASSOC)){
$id = $row['page_type_id']; $pagetype = $row['page_type'];
echo '<option value="'.$pagetype.'"'; if($page_type == $pagetype){echo 'selected';} echo '>'.ucwords($pagetype) .'</option>';
}
echo '</select>';
echo '</div>';
# classification_type
echo '<div class="col_3">';
echo '<label for="classification_type">Classification Type</label><br>';
echo '<select id="classificationType" name="classification_type" class="expand">';
echo '<option value=""'; if($classification_type == ''){echo 'selected';} echo '>Select Classification Type</option>';
echo '<option value="classification"'; if($classification_type == 'classification'){echo 'selected';} echo '>Classification</option>';
echo '<option value="category"'; if($classification_type == 'category'){echo 'selected';} echo '>Category</option>';
echo '<option value="content"'; if($classification_type == 'content'){echo 'selected';} echo '>Content</option>';
echo '</select>';
echo '</div>';
# classification
echo '<div class="col_3">';
$selstmt = $db->prepare('SELECT classification_id, classification FROM classifications WHERE classification_id >= 1');
$selstmt->execute();
echo '<label>Classification</label><br>';
echo '<select id="getAssignedCats" name="classification" class="expand">';
echo '<option value=""'; if($classification == ''){echo 'selected';} echo '>Select Classification</option>';
while($row = $selstmt->fetch(PDO::FETCH_ASSOC)){
$classification_id = $row['classification_id']; $classN = $row['classification'];
echo '<option value="'.$classification_id.'"'; if($classification == $classification_id){echo 'selected';}
echo '>'.ucwords(str_replace('-',' ',$classN)).'</option>';
}
echo '</select>';
echo '</div>';
# category
echo '<div id="categoryHTML" class="col_3"></div>';
echo '</div>';
?>
Обратите внимание на <div id="categoryHTML" class="col_3"></div>
… здесь jQuery отображает желаемое поле выбора.
jQuery
/* PARSE GET ASSIGNED CATEGORIES
======================================================================================== */
$("#getAssignedCats").change(function(){
var type = $("#classificationType").val();
if(type != 'classification'){
var class_id = $(this).val();
var url = 'parse/get-assigned-categories.php';
var postit = $.post( url, {class_id:class_id});
postit.done(function( data ) {$('#categoryHTML').html(data);});
}
});
Когда поле выбора #getAssignedCats
изменяется пользователем, jquery собирает значение и отправляет его в parse.php файл.
Разбор PHP
<?php
$level = '../../../';
include($level.'core/ini/start.php');
$class_id = $_POST['class_id'];
if($class_id != 888888){
$selCat = $db->prepare('SELECT cat_id, category FROM categories WHERE classification = :THEID ORDER BY category asc');
$selCat->bindValue(':THEID',$class_id,PDO::PARAM_INT); $selCat->execute(); $cat_ct = $selCat->rowCount();
echo '<label>Category</label>';
echo '<select name="category" class="expand">';
echo '<option value=""'; if($category == ''){echo 'selected';} echo '>Select Parent category</option>';
if($cat_ct <= 0){
echo '<option value="777777"'; if($category == '777777'){echo 'selected';} echo ' class="blue">This is a Category Page</option>';}
elseif($cat_ct >= 1){
while($row = $selCat->fetch(PDO::FETCH_ASSOC)){
$cat_id = $row['cat_id'];
$category = $row['category'];
echo '<option value="'.$cat_id.'"'; if($category == $cat_id){echo 'selected';}
echo '>'.ucwords(str_replace('-',' ',$category)).'</option>';
}
}
echo '</select>';
}
?>
Надеюсь, это поможет.