Пустые параметры после правильных параметров в html select

#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() .

  1. 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>";
        }
    }
?>
  
  1. 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. Я не понимаю, почему они дали отрицательный голос за этот ответ 🙂