За последние 24 часа нас посетили 87493 программиста и 4641 робот. Сейчас ищут 2022 программиста ...

как выполнить UPDATE если uid равен uid который есть в базе

Тема в разделе "PHP для новичков", создана пользователем juliau, 8 авг 2018.

  1. juliau

    juliau Новичок

    С нами с:
    31 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    имеем код:
    $uid = $_POST['uid'];
    1. $result = mysql_query ("INSERT INTO priemka (uid,data_vremya,masters,type_app,type_z,marka,model,number_k,fio,imei,ser_num,complect,tsena,polomka,zametki,data2,status1,status2,status3,status4) VALUES('$uid','$vremya','$masters','$type_app','$type_z','$marka','$model','$number','$fio','$imei','$serialnumber','$complect','$stoimost','$nepoladka','$zametki','$data2','1','0','0','0')");
    2. if ($result=='TRUE')
    3. {
    4. echo "<p align=center>Квитанция успешно подготовлена, можно приступать к печати</p></br>";
    5. }
    6. else {
    7. echo "Что то пошло не так, повторите попытку";
    8. }

    где переменная UID прилетает по $_POST['uid'] c другого скрипта. Но при обновлении страницы, в базу данных пишется такая же строка с таким же UID. Тут вот вопрос:
    как сделать так, чтоб после INSERT INTO шла проверка на существование такого же UID (на случай обновления страницы) в базе данных, и если он существует, то выполняем запрос UPDATE вместо INSERT INTO с примерно теми же параметрами что и INSERT. Не могу просто понять где его поставить, и как, примерно как это должно выглядеть?
     
  2. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Ну наверное надо сначала просканить базу, типо если в базе строке с $uid то :
    PHP:
    1. $scan = " ищем в базе while нужный столбец = $uid" ;
    2. If($scan){
    3.      $result = mysql_query ("UPDATE...");
    4. }
    5. If(!$scan){
    6.     $result = mysql_query ("INSERT INTO...");
    7. }
    mysql не знаю, все вольно=)
     
  3. juliau

    juliau Новичок

    С нами с:
    31 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    спасибо, я только учусь, можно расставить в моем примере как это будет выглядеть?)))
     
  4. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Ну примерно так:
    PHP:
    1. $uid = $_POST['uid'];
    2. $scan = mysql_query (" SELECT 'что то там', FROM 'откуда то там', WHERE нужный столбец = ."'".$uid."'");
    3. if($scan->num_rows() > 0){
    4.      $result=mysql_query("UPDATE...");
    5. }else{
    6.     $result=mysql_query("INSERT INTO...");
    7. };
    8. if ($result->num_rows() > 0){
    9. echo "<p align=center>Квитанция успешно подготовлена, можно приступать к печати</p></br>";
    10. }else {
    11. echo "Что то пошло не так, повторите попытку";
    12. }
    Я говорю mysql я не знаю, но как то так.
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    а еще есть совмещенный синтаксис INSERT INTO t () VALUES() ON DUPLICATE KEY UPDATE .... .....
    типа если уже есть - то обновим, нет - вставим, но должен быть в бд ключ уникальный по которому и будет происходить проверка
     
    Poznakomlus нравится это.
  6. Ash214

    Ash214 Новичок

    С нами с:
    2 авг 2018
    Сообщения:
    6
    Симпатии:
    0
    Другое решение - отметь в таблице столбец uid как PRIMARY KEY, а запрос исправить на:
    PHP:
    1. $result = mysql_query ("INSERT INTO priemka (uid,data_vremya,masters,type_app,type_z,marka,model,number_k,fio,imei,ser_num,complect,tsena,polomka,zametki,data2,status1,status2,status3,status4) VALUES('$uid','$vremya','$masters','$type_app','$type_z','$marka','$model','$number','$fio','$imei','$serialnumber','$complect','$stoimost','$nepoladka','$zametki','$data2','1','0','0','0')
    2. ON DUPLICATE KEY UPDATE data_vremya='$vremya', ... указать через запятую все поля которые нужно проапдейтить ... status4=0;");
     
  7. juliau

    juliau Новичок

    С нами с:
    31 июл 2018
    Сообщения:
    8
    Симпатии:
    0
    он же UID, который генерируется на предыдущей странице, и прилетает в $_POST (имеет 15 значный набор цифробукв в разном регистре)
    --- Добавлено ---
    спасибо вам ребята))). Вот это настоящая помощь
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    А ещё есть запрос REPLACE INTO, крута вещь, не надо дублировать ключи и значения.
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    1 строка - Зачем по факту дублировать данные? у тебя переменная уже существует.

    mysql даже в документации красным выделен УНИЧТОЖЕН. Используй mysqli

    num_rows() такой функции в расширении не существует. Есть mysqli_num_rows
    --- Добавлено ---
    +
    Все данные пришедшие с внешнего мира, должным образом должны пройти проверку, перед тем как запихивать в запрос
     
  10. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @MouseZver человек спросил:
    Я ответил как это примерно может быть, честно написав :
     
  11. juliau

    juliau Новичок

    С нами с:
    31 июл 2018
    Сообщения:
    8
    Симпатии:
    0
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    @juliau
    --- Добавлено ---
    @Artur_hopf, а я тебя постом указал на ошибки и решение их.