PHP - отображение конкретных данных в текстовых полях

Мне нужно отображать только строку id базы данных в текстовом поле, моя проблема заключалась в том, что данные отображают все строки и столбцы id's.

Я извлекал все данные из базы данных, но мне нужен только идентификатор в базе данных.

Вот мой код в формах, текстовых полях ввода и отправке.

<form action = "" method = "POST">
    <div class = "row  col-md-4">
    <label>Amount</label>
     <input type = "text" name = "id" class = "form-control validate"> 
       <br>
    <input type = "submit" class = "form-control btn-warning" name = "search" value = "Search Data"></input><br>

    <?php 

    $connection = mysqli_connect("localhost","root","");
    $db = mysqli_select_db($connection, 'qrproject');

    if (isset($_POST['search']))
    {
      $id = $_POST['id'];

      $query = "SELECT * FROM scratch_cards WHERE amount='$id' ";
      $query_run = mysqli_query($connection, $query);

      while($row = mysqli_fetch_array($query_run))
      {
        ?>
        <form action = "" method = "POST">
        
        <input type = "text" name = "code" value = "<?php echo $row['code'] ?>" class = "form-control validate" id = "mapo">
        
           <input type = "text" name = "pin" value = "<?php echo $row['pin'] ?>" class = "form-control validate" id = "mact">

           <input type = "text" name = "status" value = "<?php echo $row['status'] ?>" class = "validate form-control" id = "soluong">
      
       

        <input type = "date" name = "card_expiration" value = "<?php echo $row['card_expiration'] ?>" class = "validate form-control" id = "cardex">
     

          <input type = "number" name = "card_validity" value = "<?php echo $row['card_validity'] ?>" class = "validate form-control" id = "cardval">
       

     
        </form>
        <?php 
      }
    }
     ?>   
</form>
   

Причина может заключаться в том, что у вас есть несколько записей с одним и тем же идентификатором. Не могли бы вы рассказать подробнее о таблице базы данных?

M A 14.12.2018 00:44

@MA Здравствуйте, сэр, я отредактировал изображение выше, пожалуйста, посмотрите изображение там, где находится моя таблица данных.

user10701881 14.12.2018 00:50

@MA Да, сэр, вы правы, у меня несколько записей, но не с одним и тем же идентификатором ..

user10701881 14.12.2018 00:51

Просто чтобы вы знали, что у вас есть серьезная уязвимость к SQL-инъекциям в "SELECT * FROM scratch_cards WHERE amount='$id' ". Это потому, что вы не дезинфицируете свой ввод. Не могли бы вы дать нам образцы данных, с которыми вы работаете? Немного сложно понять, что находится между вашим кодом и изображением.

domdambrogia 14.12.2018 00:52

@domdambrogia, хорошо, когда я ввожу или набираю 500 в текстовом поле. тогда он должен дать мне только конкретный идентификатор. поэтому, когда я снова ввожу 500 в сумму текстового поля, он даст мне другой конкретный идентификатор, который не повторяется.

user10701881 14.12.2018 00:56

У вас есть ошибка в вашем запросе, вы проверяете $id на amount, и я предполагаю, что вы хотите проверить $id на id в базе данных. Попробуйте это: $query = "SELECT * FROM scratch_cards WHERE id='$id' "

M A 14.12.2018 00:58

Если вы можете рассказать нам больше, чего вы пытаетесь достичь, мы сможем вам лучше помочь.

M A 14.12.2018 00:59

@MA не работает, сэр, я не могу поставить id только потому, что я ввожу имя поля данных amount, а не id.

user10701881 14.12.2018 01:00

Если вы хотите отфильтровать данные по полю amount, вам следует ожидать более 1 записи, поскольку amount может повторяться и в других записях. Однако, если вам нужна всего одна запись, вы можете поместить LIMIT 1 в свой запрос или просто завершить цикл while после чтения одной записи.

M A 14.12.2018 01:04

Либо используйте $query = "SELECT * FROM scratch_cards WHERE amount='$id' LIMIT 1";, либо поместите break; до конца фигурной скобки while.

M A 14.12.2018 01:05

@MA В этом есть смысл, но где я могу поместить break в цикл while

user10701881 14.12.2018 01:09

Вставьте break; после </form><?php

M A 14.12.2018 01:12

Если вы хотите вывести только одну строку, просто измените while($row = mysqli_fetch_array($query_run)) на if ($row = mysqli_fetch_array($query_run))

Nick 14.12.2018 01:13

@Nick, привет, это сработало! но как я могу это рандомизировать? он просто показывает 1 строку и 1 идентификатор

user10701881 14.12.2018 01:16

@Nick, мне нужно ввести больше 500, и результат должен быть другим и не повторяться

user10701881 14.12.2018 01:17

Чтобы каждый раз выводить новую строку, вы можете попробовать добавить в свой запрос ORDER BY RAND() LIMIT 1, то есть SELECT * FROM scratch_cards WHERE amount='$id' ORDER BY RAND() LIMIT 1.

Nick 14.12.2018 01:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
16
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из ваших комментариев кажется, что вы хотите вывести единственную случайную строку, которая соответствует значению $_POST['id'] в столбце amount в вашей таблице. Вы можете сделать это, изменив свой запрос на это:

SELECT * FROM scratch_cards WHERE amount='$id' ORDER BY RAND() LIMIT 1

Вы также можете изменить

while($row = mysqli_fetch_array($query_run))

к

if ($row = mysqli_fetch_array($query_run))

хотя с изменением запроса, ограничивающим вывод одной строкой, это больше не является абсолютно необходимым.

Как уже указывалось, вы уязвимы для SQL-инъекции, вам следует прочитать этот вопрос, чтобы увидеть, как решить эту проблему.

Другие вопросы по теме