Исключить повторяющиеся заявки...

THEDECAL

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

PHP:
<?php
    echo "<html>";
    echo "<head>";
    echo "<meta http-equiv='refresh' content='0; url=index.php'>";
    echo "</head>";
    echo "<body>";
    include "mysql.php";
    $date = date("d.m.y H:i");
    $query_add = "INSERT INTO $tbname (streets, house, room, telephone, prio, comment, date) VALUES('${_POST['streets']}', '${_POST ['house']}', '${_POST['room']}', '${_POST['telephone']}', '${_POST ['prio']}', '${_POST['comment']}', '$date')";
    mysql_query($query_add) or die (mysql_error());
    mysql_close() or die (mysql_error());
    echo "</body>";
    echo "</html>";
?>
Теперь мне нужно сравнить данные те, что есть и те, что я отправляю, как?
 

Фанат

oncle terrible
Команда форума
Наверное. А отчего появляются дубли?

но вообще код - жесть.
сначала идёт команда на перенаправление, а потом - на работу с БД.
дата в неправильном формате.
если в комментарии встретится кавычка - запрос сломается.
 

THEDECAL

Новичок
Наверное. А отчего появляются дубли?
Бывает по спешке добавляют ту-же заявку...
сначала идёт команда на перенаправление, а потом - на работу с БД.
Перенапралвение для того, чтоб не показывать страницу отправки формы, я заполняю форму (add.php) затем отправляю её (submit.php) в БД и submit.php я не показываю (иначе просто пустая страница),а сразу возвращаю на index.php где показаны все заявки цыклом...
дата в неправильном формате.
Меня не устравивает формат mysql я забиваю тот который мне хочеться без секунд...
если в комментарии встретится кавычка - запрос сломается.
Не понял?
 

radioheaded

PHP нуб
Вам нужно для себя понять, что значит «существующая заявка». Заявка, с точно такими же параметрами, как и у какой-то другой? Или должны совпадать только несколько параметров, чтобы считать заявку существующей? Или есть еще какие-то признаки, позволяющие определить, существующая это заявка или нет.
 

THEDECAL

Новичок
Вам нужно для себя понять, что значит «существующая заявка». Заявка, с точно такими же параметрами, как и у какой-то другой? Или должны совпадать только несколько параметров, чтобы считать заявку существующей? Или есть еще какие-то признаки, позволяющие определить, существующая это заявка или нет.
Я это понимаю, мне нужно только несколько параметров, улица, дом, квартира...
 

Фанат

oncle terrible
Команда форума
Перенапралвение для того,
Я не спрашиваю, ЗАЧЕМ тебе перенаправление.
Я спрашиваю, почему команда на перенаправление даётся ДО того, как данные записаны в базу.
Ты уверен в том, что твой код всегда будет успевать записать данные в базу?
Меня не устравивает формат mysql
А mysql не устраивают твои неграмотные хотелки.
Формат должен быть такой, как положено. И дело не в секундах.
Отформатировать так, как тебе хочеТСЯ, можно будет при выводе, функцией date_format()
попробуй добавить в комментарий текст в одинарных кавычках, например 'новости' и посмотри, запишется ли у тебя что-то в базу данных.
Я это понимаю, мне нужно только несколько параметров, улица, дом, квартира...
Что мешает сделать запрос на выборку этих нескольких параметров?
 

Фанат

oncle terrible
Команда форума
попробуй, например, отсортировать по такой дате
 

THEDECAL

Новичок
попробуй добавить в комментарий текст в одинарных кавычках, например 'новости' и посмотри, запишется ли у тебя что-то в базу данных.
А как с этим бороться?
попробуй, например, отсортировать по такой дате
Попробовал всё ок...
 

Фанат

oncle terrible
Команда форума
Попробовал всё ок...
И за какой срок у тебя записи в таблице, милок? За три дня?
А что будет в следующем месяце?
А как с этим бороться?
Никак не борись.
Если уж с датой тебя надо два часа уговаривать, то здесь месяц уйдёт. А мне времени жалко.
 

THEDECAL

Новичок
И за какой срок у тебя записи в таблице, милок? За три дня?
А что будет в следующем месяце?

Никак не борись.
Если уж с датой тебя надо два часа уговаривать, то здесь месяц уйдёт. А мне времени жалко.
Заинтриговал иии бросил...

У нас заявки больше трёх дней не держаться, но я не делаю на тяп-ляп, поэтому если я сделаю фомат как положено в SQL, то всё впорядке будет?
 

Фанат

oncle terrible
Команда форума
в порядке будет гораздо больше, чем ты можешь себе представить.
отформатировать дату можно как угодно при выводе. хоть с секундами, хоть без. хоть американском формате, хоть в южноафриканском. можно складывать даты, можно вычитать, можно находить номер недели в году и дня - в неделе. Всё это можно, если дата хранится в стандартном формате.

по поводу кавычек - http://phpfaq.ru/slashes
 

THEDECAL

Новичок
в порядке будет гораздо больше, чем ты можешь себе представить.
отформатировать дату можно как угодно при выводе. хоть с секундами, хоть без. хоть американском формате, хоть в южноафриканском. можно складывать даты, можно вычитать, можно находить номер недели в году и дня - в неделе. Всё это можно, если дата хранится в стандартном формате.

по поводу кавычек - http://phpfaq.ru/slashes
Спасибо буду учиться правильному написанию...
 

Фанат

oncle terrible
Команда форума
Повторяющиеся-то ты в цикле небось проверяешь, перебирая в цикле всю таблицу?
 

THEDECAL

Новичок
Повторяющиеся-то ты в цикле небось проверяешь, перебирая в цикле всю таблицу?
Да, вот таким макаром, по другому знаний не хватает:
PHP:
<?php
    include "mysql.php";
    $date = date("d.m.y H:i");
    $query_check = "SELECT * FROM $tbname WHERE streets='${_POST['streets']}' AND house='${_POST['house']}' AND room='${_POST['room']}'";
    $show_check = mysql_query($query_check) or die(mysql_error());
    while ($row = mysql_fetch_array($show_check, MYSQL_ASSOC))
    {
        $streets_check = $row['streets'];
        $house_check = $row['house'];
        $room_check = $row['room'];
    }
    $streets_add = $_POST['streets'];
    $house_add = $_POST['house'];
    $room_add = $_POST['room'];
    if($streets_check==$streets_add AND $house_check==$house_add AND $room_check==$room_add)
    {
        echo "Такая заявка уже есть!";
    }
    else
    {
        $query_add = "INSERT INTO $tbname (streets, house, room, telephone, prio, comment, date) VALUES ('${_POST['streets']}', '${_POST ['house']}', '${_POST['room']}', '${_POST['telephone']}', '${_POST ['prio']}', '${_POST['comment']}', '$date')";
        mysql_query($query_add) or die (mysql_error());
        mysql_close() or die (mysql_error());
        echo "<html>" . "<head>" . "<meta http-equiv='refresh' content='0; url=index.php'>" . "</head>" . "</html>";
    }
?>
 

Фанат

oncle terrible
Команда форума
это не проверка, а ерунда.
она у тебя проверяет только последнюю добавленную запись.
проверять надо было тогда уж внутри цикла
а если ты и хотел проверять последнюю - то и запрашивать надо было тоже только её одну.
а правильно - делать 1 запрос к базе, в котором в условии WHERE перечислены проверяемые поля.
 

THEDECAL

Новичок
Вот модернизировал:
PHP:
<?php #submit.php
    include "mysql.php"; #Подключает файл
    $date = date("d.m.y H:i"); #Переменная с датой
    $query_check = "SELECT * FROM `$tbname` WHERE `streets`='${_POST['streets']}' AND `house`='${_POST['house']}' AND `room`='${_POST['room']}'"; #Запрос к mysql который просматривает информацию
    $show_check = mysql_query($query_check) or die(mysql_error()); #Выполнения запроса к mysql
    $row_check = mysql_fetch_array($show_check, MYSQL_ASSOC); #Переменная с массивом данных полученного из запросов к mysql
    $streets_check = $row_check['streets']; #Переменная с улицой из БД
    $house_check = $row_check['house']; #Переменная с домом из БД
    $room_check = $row_check['room']; #Переменная с квартирой из БД
    $streets_add = $_POST['streets']; #Переменная с улицой из заполненой формы
    $house_add = $_POST['house']; #Переменная с домом из заполненой формы
    $room_add = $_POST['room']; #Переменная с квартирой из заполненой формы
    if($streets_check==$streets_add AND $house_check==$house_add AND $room_check==$room_add) #Условие ЕСЛИ улица,дом,квартира из БД такая же, что и из заполненой формы, то выполнить
    {
        echo "Такая заявка уже есть!"; #Вывод сообщения
    }
    else #Условие ИНАЧЕ выполнить
    {
        $comment = mysql_real_escape_string($_POST['comment']); #Проверяем на наличие спецсимволов
        $query_add = "INSERT INTO `$tbname` (`streets`, `house`, `room`, `telephone`, `prio`, `comment`, `date`) VALUES ('${_POST['streets']}', '${_POST ['house']}', '${_POST['room']}', '${_POST['telephone']}', '${_POST ['prio']}', '$comment', '$date')"; #Запрос к mysql который добавляет информацию
        mysql_query($query_add) or die (mysql_error()); #Выполнения запроса к mysql или показать ошибку
        mysql_close($connect) or die (mysql_error()); #Закрытие соеденение к mysql или показать ошибку
        echo "<html>" . "<head>" . "<meta http-equiv='refresh' content='0; url=index.php'>" . "</head>" . "</html>"; #Перенаправление на главную страницу
    }
?>
 

Фанат

oncle terrible
Команда форума
чувак. ты УЖЕ сравнил параметры. прямо в запросе.
ещё раз сравнивать не надо. весь этот add попросту не нужен.
достаточно проверить, вернул ли что-то запрос

mysql_real_escape_string не проверяет ни на какие спецсимволы. она их экранирует
кавычка, теоретически, может встретиться в любом поле, а не только в комментариях

дату ты так и не поменял.
 

THEDECAL

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

Фанат

oncle terrible
Команда форума
вот не понимаю я, почему вы все так любите спорить.
 
  • Like
Реакции: craz
Сверху