За последние 24 часа нас посетили 16093 программиста и 1545 роботов. Сейчас ищут 868 программистов ...

Проверка перед записью в бд

Тема в разделе "PHP и базы данных", создана пользователем bapmak, 18 апр 2016.

  1. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    Люди добрые помогите. Есть запрос

    PHP:
    1. $number = $_POST['number'];
    2. $datetime = $_POST['datetime'];
    3. $dept = $_POST['dept'];
    4. $text = $_POST['text'];
    5. $disp = $_POST['disp'];
    6.  
    7. $serverName = "172.28.42.19";
    8. $connectionInfo = array( "Database"=>"test", "UID"=>"Supervisor", "PWD"=>"Supervisor");
    9. $conn = sqlsrv_connect( $serverName, $connectionInfo );
    10. if( $conn === false ) {
    11. die( print_r( sqlsrv_errors(), true));
    12. }
    13. $sql = "INSERT INTO jOrdersJounal1 (Num, begin_dts, dept, note, disp)
    14. VALUES ('$number', '$datetime', '$dept', '$text', '$disp')";
    15.  
    16. $stmt = sqlsrv_query( $conn, $sql);
    17. if( $stmt === true) {
    18. die( print_r( sqlsrv_errors(), true) );
    19. }
    20. sqlsrv_free_stmt( $stmt);
    который через форму получает данные и записывает их в бд. Как реализовать чтобы, по полю "Num"-(туда записывается номер нарушения, цифрами) проходила проверка, если такие данные в поле Num уже есть то выходила бы ошибка типа "Данный номер для записи уже занят", а если таких данных нет, проходила запись новых данных в бд
     
    #1 bapmak, 18 апр 2016
    Последнее редактирование модератором: 18 апр 2016
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    добавить уникальный ключ по этому полю и смотреть на код ошибки при выполнении запроса
     
  3. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    Не вариант, проблема в том что, к это таблице подключена прога рабочая на дельфе, написанная другим человеком,а мне нужно сделать ее web-клон и какие либо манипуляции с таблицей мне запрещены
     
  4. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    тогда, остается сделать выборку только по полю Num, а потом прогонять проверку на значение (;
     
  5. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    PHP:
    1. $sql_chek = "SELECT `num` FROM `jOrdersJounal1` WHERE `num`= '".$number."'";
    2. $rs_chek = sqlsrv_query( $conn, $sql);
    3. $row_count = sqlsrv_num_rows( $rs_chek );
    4. if ($row_count === false) {
    5. echo "Такой номер существует";
    6. }else {
    7. $sql = "INSERT INTO jOrdersJounal1 (Num, begin_dts, dept, note, disp)
    8. VALUES ('$number', '$datetime', '$dept', '$text', '$disp')";
    сделал так, не работает, при вводе любого значения есть оно в поле Num или нет выдает "Такой номер существует"
     
    #5 bapmak, 18 апр 2016
    Последнее редактирование модератором: 18 апр 2016
  6. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    сделай вар дамп - $row_count... и сразу станет всё понятно тебе (;
     
  7. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    сделай вар дамп - $row_count... и сразу станет всё понятно тебе (;

    Код (Text):
    1. var_dump($row_count);
    NULL Такой номер существует
     
  8. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    в данном случае NULL - это не номер, а результат... ((( :
     
  9. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    я ввожу в Num через форму значение 1283 которого еще нет в бд, а он пишет что такое значение уже есть
     
  10. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    могу посоветовать сделать вывод $sql_chek и вставить в клиент, если есть для sqlsrv... (( :
     
  11. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    если бы я знал как, я только учусь, можешь написать как сделать?
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. echo $sql_chek;
    Подключиться к MSSQL и выполнить там запрос.
     
  13. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    ms sql management studio запрос $sql_chek="SELECT `num` FROM `jOrdersJounal1` WHERE `num`= '".$number."'"; работает как надо
    --- Добавлено ---
     

    Вложения:

  14. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Всм? Так он всегда так и будет орать.
    Ибо номер не найден, так как, $row_count===false будет равна только в случае ошибки или не найденной результатирующей выборки.
     
  15. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    можешь написать как привольно сделать проверку
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @bapmak посмотри в документации sqlsrv_num_rows что она возвращает
     
  17. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    он все время пишет "Такой номер существует"; хоть есть такая запись хоть нет ее
    --- Добавлено ---
    Возвращает количество строк в результирующем наборе
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    так в чём проблема?
     
  19. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    проблема вот что код мой не работает, как надо, и я не знаю в чем касяк, я только учусь, и попросил помощи
    Код (Text):
    1. $number = $_POST['number'];
    2. $datetime = $_POST['datetime'];
    3. $dept = $_POST['dept'];
    4. $text = $_POST['text'];
    5. $disp = $_POST['disp'];
    6. $usrt = $_POST['usrt'];
    7. $serverName = "172.28.42.19";
    8. $connectionInfo = array( "Database"=>"test", "UID"=>"Supervisor", "PWD"=>"Supervisor");
    9. $conn = sqlsrv_connect( $serverName, $connectionInfo );
    10. if( $conn === false ) {
    11. die( print_r( sqlsrv_errors(), true));
    12. }
    13. $sql_chek = "SELECT * FROM `jOrdersJounal1` WHERE `num`= '".$number."'";
    14. $rs_chek = sqlsrv_query( $conn, $sql);
    15. $row_count = sqlsrv_num_rows( $rs_chek );
    16. if ($row_count === false) {
    17. echo "Такой номер существует";
    18. }else {
    19. $sql = "INSERT INTO jOrdersJounal1 (Num, begin_dts, dept, note, disp)
    20. VALUES ('$number', '$datetime', '$dept', '$text', '$disp')";
    21.  
    22. $stmt = sqlsrv_query( $conn, $sql);
    23. if( $stmt === true) {
    24. die( print_r( sqlsrv_errors(), true) );
    25. }
    26. sqlsrv_free_stmt($stmt);
    27. }
    вот он весь код
    --- Добавлено ---
    все время выдает что "Такой номер существует", хоть какое значение туда заноси, уже существующее или еще нет
    --- Добавлено ---
    все время выдает что "Такой номер существует", хоть какое значение буда з
    а мне нужно, если в поле Num есть такой номер та выходило "Такой номер существует", а если нет то шла запись
     
  20. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    1. получи значение поля NUM
    2. сравни его с текущим значением
    3. и выполняй определенное действие в зависимости от результата сравнения.
    PHP:
    1. $number = $_POST['number'];
    2. $datetime = $_POST['datetime'];
    3. $dept = $_POST['dept'];
    4. $text = $_POST['text'];
    5. $disp = $_POST['disp'];
    6. $usrt = $_POST['usrt'];
    7. $serverName = "172.28.42.19";
    8. $connectionInfo = array("Database" => "test", "UID" => "Supervisor", "PWD" => "Supervisor");
    9. $conn = sqlsrv_connect($serverName, $connectionInfo);
    10. if (!$conn) {
    11.     die(print_r(sqlsrv_errors(), true));
    12. }
    13. $sql_chek = "SELECT * FROM `jOrdersJounal1` WHERE `num`= '" . $number . "'";
    14. $rs_chek = sqlsrv_query($conn, $sql);
    15. $row_count = sqlsrv_num_rows($rs_chek);
    16. if ($row_count > 0) {
    17.     echo "Такой номер существует";
    18. } else {
    19.     $sql = "INSERT INTO jOrdersJounal1 (Num, begin_dts, dept, note, disp)
    20. VALUES ('$number', '$datetime', '$dept', '$text', '$disp')";
    21.  
    22.     $stmt = sqlsrv_query($conn, $sql);
    23.     if ($stmt === true) {
    24.         die(print_r(sqlsrv_errors(), true));
    25.     }
    26.     sqlsrv_free_stmt($stmt);
    27. }
    Попробуй так. По хорошему это все дело надо переписывать. Но я ничего не стал менять)).
     
  21. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
  22. bapmak

    bapmak Новичок

    С нами с:
    18 апр 2016
    Сообщения:
    14
    Симпатии:
    0
    @rodent90, ха ха ха как смешно.