ФорумПрограммированиеPHP для идиотов → Проверка перед составлением запроса в БД

Проверка перед составлением запроса в БД

  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 0:24

    Помогите решить такую задачку:
    Есть парочка переменных которые надо поместить в таблицу в БД.
    Но только перед этим надо проверить, если такие значения уже имеются в БД, то их нужно просто обновить, а если же таковых там нет, то просто вставить их туда.
    Так вот, как же сделать эту проверку?
    Я так понимаю надо делать запрос в базу данных через SELECT, и уже по имеющемуся результату ориентироваться и производить дальнейшие действия.
    Только вот почему-то не получается через select. Запрос выполняется, делаю проверку есть ли таковая переменная (или же равняется ли она FALSE/TRUE), но какие бы проверки я ни ставил всё равно выполняется просто INSERT
    Вот собственно код:

    <?php
    $mq = mysql_connect("localhost", "user", "pass");
    mysql_select_db("name_db");
    $str = "username=vasya; userpass=1234; age=34";
    $ex = explode("; ", $str);
    foreach ($ex as $exp) {
    $expl = explode("=", $exp);
    if ($expl[0]=="username") { $username = $expl[1];}
    if ($expl[0]=="userpass") { $userpass = $expl[1];}
              if ($expl[0]=="age") { $age = $expl[1];}
    }
    $sql = "SELECT username FROM `name_db` WHERE username='$username'";
    $result = mysql_query($sql);
    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);

    if (!isset($data['username'])){
    $sql_i = "INSERT INTO `name_db` VALUES ('$username', '$userpass', '$age')";
    $result_i = mysql_query($sql_i);
    } else {
    $sql_u = "UPDATE `name_db` SET userpass='$userpass', age='$age' WHERE username='$username'";
    $result_u = mysql_query($sql_u);
    }
    ?>
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 1:11, спустя 47 минут 35 секунд

    for ($data=array(); $row = mysql_fetch_assoc($result); $data[$row['username']]=$row);


    вот так попробуй
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 4:59, спустя 3 часа 48 минут 9 секунд

    Всё равно, делает именно INSERT, а не UPDATE
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 5:15, спустя 15 минут 50 секунд

    Есть такая замечательная команда REPLACE.
    Читать тут
    http://www.opennet.ru/base/dev/pl_sql_update.txt.html
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 6:53, спустя 1 час 38 минут 16 секунд


    Есть такая замечательная команда REPLACE.
    Читать тут
    http://www.opennet.ru/base/dev/pl_sql_update.txt.html
    реплейс не панацея)) пусть научится сначала простым вещам, а код полный бред)) тутт до реплейса как до пизды звезды.
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 6:58, спустя 4 минуты 21 секунду

    И с REPLACE'ом так же происходит просто вставка, а не замена!

    phpdude, мой код полный бред?!
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 9:34, спустя 2 часа 36 минут 42 секунды

    Sin, с виду каша и пиздец. :)

    вот смотрите
    $str = "username=vasya; userpass=1234; age=34";
    $ex = explode("; ", $str);
    foreach ($ex as $exp) {
    $expl = explode("=", $exp);
    if ($expl[0]=="username") { $username = $expl[1];}
    if ($expl[0]=="userpass") { $userpass = $expl[1];}
    if ($expl[0]=="age") { $age = $expl[1];}
    }


    я бы сделал так
    $str = "username=vasya; userpass=1234; age=34";
    preg_match_all("#(.*)=([^;]+)#",$str,$exp);
    $exp = array_combine($exp[1],$exp[2]);

    красиво? я о томже.
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 10:20, спустя 45 минут 19 секунд

    phpdude, ты сам то пробовал свой код?
    Я пытаюсь выташить переменные и их значения из массива, а ты опять мне их в массив заталкиваешь. Смысл?!
    И вообще, я по моему попросил помочь с проверкой значений в БД, а не код покрасивее сделать.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 11:10, спустя 49 минут 55 секунд

    Sin, если ты не понимаешь чем мой вариант лучше, удобнее, практичнее … то я даже и не знаю чем тебе помочь. помогать дальше писать говнокод?

    как по твоему себя ведет

    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);

    if (!isset($data['username'])){

    ?
    ты вообще понимаешь что тут написано? создается впечатление что нет.

    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);
    вообще пиздец кусок кода. в чем то он практичен конечно(места не занимает 3 строки), но так писать - надо в карцер сажать.

    в учебнике по функции mysql_fetch_assoc
    есть отличный пример, нахера так то пистаь? чем while не устроил?

    поясню тупо где минимум одна ошибка.

    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);
    итого - $data - нумерованный массив с индексами 0 .. n. надеюсь понятно почему.

    if (!isset($data['username'])){ - эта хуйня всегда фолс, потому что у тебя дата - нумерованный массив, и никакого индекса юзернейм у тебя в нет нет и при всем твоем желании не будет.

    ps:// и вообще наезжать когда помощи просишь - дурной тон. уважение хоть имей немного.
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 12:21, спустя 1 час 11 минут 3 секунды

    phpdude, ты наверное ебанутый да?!
    Ты своей фразой - "а код полный бред))" и начал этот самый НАЕЗД. Не забыл как ветка форума называется?! "PHP для начинающих"!!!
    Для особо тупых выделю "ДЛЯ НАЧИНАЮЩИХ". и если считаешь, что какой-то код является говнокодом, то засунь это мнение себе по глубже в жопу.

    ты вообще понимаешь что тут написано? создается впечатление что нет.

    Да. Я прекрасно понимаю что пишу!

    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);
    вообще пиздец кусок кода. в чем то он практичен конечно(места не занимает 3 строки), но так писать - надо в карцер сажать.

    Этот пример кода приведён в книге "PHP 5 Наиболее полное руководство".
    Ты точно полный тупой припизднутый дебил, если считаешь, что авторы книг буду приводить, как ты говоришь, говнокод за который надо в карцер сажать.

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

    Знаешь какой код будет наиболее красивым:

    <?php
    echo "phpdude ТУПОЙ олень!!!";
    ?>

  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 12:25, спустя 4 минуты 25 секунд

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

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 12:40, спустя 14 минут 53 секунды

    phpdude, ты реально олень какой-то. как ты вообще кодишь????

    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);
    итого - $data - нумерованный массив с индексами 0 .. n. надеюсь понятно почему.

    После данного действия у нас имеется массив, состоящий из пар ИМЯ_ЯЧЕЙКИ=>ЗНАЧЕНИЕ. где ИМЯ_ЯЧЕЙКИ это имя поля в таблице

    Кури в углу, неудачник
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 12:42, спустя 1 минуту 41 секунду

    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);
    после этой строки сделай

    print_r($data);
    die();

    кстати я не "кодю" в отличие от тебя. после просмотренного принт_р можешь просить прощения.
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 12:44, спустя 2 минуты 3 секунды

    я перед тем как запостить это, проверил.
    Попробуй сам…
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 12:45, спустя 1 минуту 19 секунд

    вставь это в сообщение и покажи что там получается. я тебе не верю почему то, что там ключ->значение.
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!