Ограничения вывода имени из БД

110
15 ноября 2019, 02:10

Подскажите как нажатием кнопки выводить имя из базы данных один раз, проблема в том что я вывожу имя но при втором ножати он опять выводит , нужно поставить ограничения на вывод из БД кнопка сделано на html методом POST,

пример:

    require_once('process.php');  //---Mysqli connect DB
//Кнопка
    <form name="frm" method="POST">
               <button  name="singline"  value="wcenter">Очередь</button>
    </form>
//Добавления в базу 
    if(isset($_POST['singline'])) {
        $query="INSERT INTO `online`(`id`, `onusername`, `onsurname`, `date`) VALUES 
        (NULL, '$personal', '$sur', UNIX_TIMESTAMP())";
        $result=$con->query($query);  
        mysqli_clode();
    }
  //Вывод массива в БД  
    $select=mysqli_query($con, "SELECT `id`, `onusername`, `onsurname`, `date` FROM `online`;");
    while ($m=mysqli_fetch_array($select)){
        $monitor1=$m['onusername']." ";
        $monitor2=$m['onsurname']." ";
        $monitor="$monitor1, $monitor2";
        echo ($monitor. "<br>");
    }
Answer 1

Для того чтобы кнопка сработала один раз можно сделать так:

/* Флаг, отвечающий за вызов функции */ 
  
let RUN = true; 
   
$('button[name="my"]').on('click', function(){ 
  if ( RUN ) { 
    $( this ).text('Нажимать бесполезно'); 
    $( this ).after('<div class="alert alert-primary mr-3 ml-3" role="alert">Иванов Иван Иванович</div>'); 
    RUN = false; 
  } 
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<button type="button" class="btn btn-success m-3" name="my">Можно выводить</button>

Можно сделать так:

$('button[name="my"]').on('click', function(){ 
   $(this).prop('disabled', true); 
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<button type="button" class="btn btn-success m-3" name="my">Можно выводить</button>

А можно быть сатанистом мазохистам и через ajax в бд изменять флаг на вывод данных из бд.

Answer 2

Все логично, сколько раз вы принимаете $_POST['singline'] - столько записей в БД и добавится. А ваш селект читает вообще все записи из БД и в цикле их выводит.

В зависимости от того, что вам действительно нужно, есть несколько вариантов.

Для начала я бы изменил структуру таблицы и сделал поле id автоинкрементным и первичным ключом.

1) Вам нужно хранить в БД все факты нажатия кнопки, а выводить последнюю для всех пользователей.

SELECT onusername, onsurname, MAX(date) FROM online GROUP BY onusername, onsurname;

2) Вам нужно хранить только факт последнего нажатия кнопки

Самый дурацкий вариант - сделать первичный ключ на поля (onusername, onsurname). Правильный вариант с id - но это теории на целую статью будет - потом сами разберетесь.

Обновляем значение (Запомните - подставлять переменные напрямую в запрос - это очень плохо! Почитайте про подготовленные запросы):

INSERT INTO online (onusername, onsurname, date) 
VALUES ('$personal', '$sur', UNIX_TIMESTAMP())
ON DUPLICATE KEY UPDATE date=UNIX_TIMESTAMP();

Читаем так-же, как у вас в коде.

READ ALSO
Вывод статей по годам и темам YII2

Вывод статей по годам и темам YII2

Есть статьи, которые имеют дату опубликованияЕсть связанная таблица с категориями статей

121
Защищают ли подготовленные выражения/переменные полностью от SQL инъекций?

Защищают ли подготовленные выражения/переменные полностью от SQL инъекций?

В мире уже давно используются mysqli и PDOМногие очень активно их пропагандируют: есть подготовленные переменные, всё становится безопасно и прочее

102
Как валидировать IP?

Как валидировать IP?

Как сделать проверку айпи в строке к примеру 1270

99