#php #mysqli
#php #mysqli
Вопрос:
Я создал опцию выбора и заполнил ее запросом mysqli из базы данных. Но есть пустые параметры ниже правильных параметров в выпадающем меню. Это моя страница php с опцией выбора:
<!DOCTYPE html>
<!DOCTYPE html>
<?php
include("includes/connect.php");
function getcats_add_products(){
global $con;
$get_cats="select * from categories";
$run_cats=mysqli_query($con, $get_cats);
echo "<option>Select Category</option>";
while($row_cats = mysqli_fetch_array($run_cats)){
$cat_id = $row_cats['cat_id'];
$cat_title = $row_cats['cat_title'];
echo "<option value='$cat_id'>$cat_id, $cat_title<option>";
}
}
?>
<html>
<head>
<title>Admin Panel - Add Products</title>
<link rel="stylesheet" type="text/css" href="styles/admin-style.css">
</head>
<body>
<header class="header">
</header>
<div class="heading">Add New Product</div>
<div class="product-table-div">
<form>
<table class="product-table">
<tr>
<td>Product Category</td>
<td>
<select id="product-table-input" >
<?php getcats_add_products(); ?>
</select>
</td>
</tr>
<tr>
<td>Product Brand</td>
<td>
<input type="" name="" id="product-table-input">
</td>
</tr>
<tr>
<td>Product title</td>
<td>
<input type="" name="" id="product-table-input">
</td>
</tr>
<tr>
<td>Product Price</td>
<td>
<input type="" name="" id="product-table-input">
</td>
</tr>
<tr>
<td>Product description</td>
<td>
<input type="" name="" id="product-table-input">
</td>
</tr>
<tr>
<td>Product image</td>
<td>
<input type="" name="" id="product-table-input">
</td>
</tr>
<tr>
<td>Product Keywords</td>
<td>
<input type="" name="" id="product-table-input">
</td>
</tr>
<tr>
<td colspan="2">
<div id="product-submit-div">
<input type="submit" name="submit" id="product-submit" value="Add">
</div>
</td>
</tr>
</table>`enter code here`
</form>
</div>
<?php getcats_add_products(); ?>
</body>
</html>
Это файл css:
header {
height: 100px;
background: #006b00; /* For browsers that do not support gradients */
background: -webkit-linear-gradient(#006b00, #00fa00); /* For Safari 5.1 to 6.0 */
background: -o-linear-gradient(#006b00, #00fa00); /* For Opera 11.1 to 12.0 */
background: -moz-linear-gradient(#006b00, #00fa00); /* For Firefox 3.6 to 15 */
background: linear-gradient(#006b00, #00fa00);
}
.heading {
margin: 20px;
text-align: center;
width: 100%;
color: #001A00;
font-size: 25px;
font-weight: bold;
}
.product-table-div {
width: fit-content;
margin: auto;
display: block;
}
.product-table {
table-layout: auto;
height: auto;
background-color: #00CC8A;
}
.product-table td {
font-size: 20px;
text-align: left;
}
#product-submit-div {
text-align: center;
max-width: 100%;
}
#product-submit {
border: 0px;
height: 100%;
width: 30%;
line-height: 20px;
font-size: 20px;
border-radius: 3px;
}
Это моя страница подключения:
<?php
$con = mysqli_connect("localhost", "root", "root", "ecommerce");
if(!$con){
die('connection error: '.$mysqli->connect_error());
}
?>
Вот как выглядит опция выбора после заполнения данными:
Выберите параметры, за которыми следуют пробелы
Это таблица, к которой я запрашиваю: таблица базы данных
Я не могу убедиться, является ли это проблемой mysql или проблемой css. Пробелы не находятся между первым тегом и вторым. Есть пустые параметры, следующие только за тегами, которые я извлекаю из базы данных.
Комментарии:
1. Это просто опечатка. Вам не хватает правильного закрывающего тега, где вы повторяете параметры. Просто добавление
/
в, которое<option>
должно это исправить.2. @Don’Tp Спасибо, что указали на это.
3. Могу ли я просто указать, что в дополнение к ошибкам, упомянутым в ответах, у вас также есть 1)
type=""
и 2) идентичные идентификаторы во всех входных данных, что также неверно.
Ответ №1:
У вас отсутствует закрывающий тег, поэтому вы получаете дополнительное пустое пространство после каждого параметра.
echo "<option value='".$cat_id."'>".$cat_title."</option>";
Это причина, по которой вы получаете пустую строку после каждого выбранного параметра.
Комментарии:
1. Вы правы насчет закрывающего тега, но интерполяция переменных не является неправильной. Нет необходимости заменять его на конкатенацию.
2. @Don’Tp -ой, да, это правда. Но я думаю, что это красивее и проще для понимания при использовании того, что я написал раньше. Но чтобы избежать путаницы, я удалил эту часть.
3. Да, это смущает. Спасибо за ответ. Теперь это работает.
Ответ №2:
Вы добавили два раза начало HTML-документа, и это нежелательно, и вы должны удалить это из кода.
Удалите два раза, которые вы добавили <!DOCTYPE html>
Причина, по которой параметры не отображаются в теге select:
Вы неправильно объединили строку поверх echo, которое вы добавили в тег select. Следовательно, ваш тег select не будет отображать какое-либо значение в значении параметра, и вам нужно изменить всю функцию таким образом, чтобы отобразить значения в теге option.
Вместо использования
mysqli_fetch_array()
вы можете использоватьmysqli_fetch_assoc()
и вы можете получать по одной строке за раз в цикле while, чтобы вы могли изменять данные по мере необходимости. Аналогично тому, что вам нужно выполнить дляmysqli_fetch_array()
.
mysqli_fetch_array()
— Метод
PHP-код:
<?php
include("includes/connect.php");
function getcats_add_products(){
global $con;
$get_cats="select * from categories";
$run_cats=mysqli_query($con, $get_cats);
echo "<option>Select Category</option>";
while($row_cats = mysqli_fetch_array($run_cats)){
$cat_id = $row_cats['cat_id'];
$cat_title = $row_cats['cat_title'];
echo "<option value=".$cat_id.">".$cat_title."<option>";
}
}
?>
mysqli_fetch_assoc()
— Метод
PHP-код:
<?php
include("includes/connect.php");
function getcats_add_products(){
global $con;
$get_cats="select * from categories";
$run_cats=mysqli_query($con, $get_cats);
echo "<option>Select Category</option>";
while($row_cats = mysqli_fetch_assoc($run_cats)){
$cat_id = $row_cats['cat_id'];
$cat_title = $row_cats['cat_title'];
echo "<option value=".$cat_id.">".$cat_title."<option>";
}
}
?>
Примечание: оба будут использовать одни и те же методы циклической структуры, чтобы вы могли решить, какой из них использовать, и оба совпадают с тем, что вы видите при отображении выходных данных.
Но посмотрите на это в приведенном выше коде, как выполняется конкатенация, и вы должны делать это в одиночку.
И по умолчанию вы должны передать идентификатор или значение в значении параметра, а затем еще один параметр вне значения параметра.
Заменить:
echo "<option value='$cat_id'>$cat_id, $cat_title<option>";
С:
echo "<option value=".$cat_id.">".$cat_title."<option>";
Надеюсь, что мое объяснение будет ясным, и вы сможете исправить его для будущих целей.
Счастливого кодирования 🙂
Комментарии:
1. Ну, это лучше, чем мой ответ, но я надеюсь, что оба ответа полезны. 🙂 РЕДАКТИРОВАТЬ : обратите внимание, что это должно быть
".$cat_title."
не'".$cat_title."'
так, поскольку ваш вариант будет печатать с'
обеих сторон.2. @EdvinTenovimas. Спасибо:) Я изменил свой ответ, удалив кавычки, которые я добавил, к ответу.
3. Спасибо @EdvinTenovimas. Я не понимаю, почему они дали отрицательный голос за этот ответ 🙂