За последние 24 часа нас посетили 80488 программистов и 2751 робот. Сейчас ищут 1506 программистов ...

Правильный ли запрос?

Тема в разделе "PHP для новичков", создана пользователем ducozik, 1 сен 2011.

  1. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    Здраствуйте.
    Существует запрос который проверяет запись в бд и дает обратный ответ.
    Помогите в чем и где ошибка
    PHP:
    1.  
    2. <form method="POST">
    3. Имя<br>
    4. <input type='text' name="name">
    5. <br>Фамилия<br>
    6. <input type='text' name='family'><br>
    7. <input type='submit'>
    8. <?PHP
    9. $host='localhost';
    10. $name='root';
    11. $pwd='1234';
    12. $db=mysql_connect($host,$name,$pwd);
    13. mysql_select_db("test",$db);
    14. ?>
    15.  
    16. <?PHP
    17. $name_search=isset($_POST['name'])?$_POST['name']:'';
    18. $sql = ("SELECT *
    19. FROM `users`
    20. WHERE `name` = '$name_search'");
    21. $result = mysql_query($sql);
    22. if (!$result)
    23. if (mysql_num_rows($result)==0) {
    24.    $sql = ("INSERT INTO users(name, email, password) VALUES ('".$_POST['name']."', '".$_POST['family']."', '".$passwords[0]."')");
    25.    $result = mysql_query($sql);
    26.    if ($result){
    27.       echo "Запись добавлена";
    28.    } else {
    29.       echo "Ошибка добавления записи: ".mysql_error();
    30.    }
    31. } else {
    32.    echo "Такой пользователь уже зарегистрирован<br />";
    33.  
    34.    $row = mysql_fetch_array($result);
    35.    while ($row) {
    36.       echo $row["username"]." -- ".$row["email"]."<br />";
    37.       $row = mysql_fetch_array($result);
    38.  
    39.    }  
    40. }
    41.  
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А это ты нам скажи, раз тему создал =)

    Описываю, как должно быть:
    1. Для поля email создается уникальный индекс
    2. Далее появляется несколько вариантов:
    2.1. Проверить существование записи
    2.2. Либо использовать INSERT IGNORE вкупе с LAST_INSERT_ID()

    Я предпочел бы второй вариант.
     
  3. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    покажи пожалуйста на примере тогда.
    з.ы. на пхп нет не посылать
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Показать что? Как создать уникальный индекс для таблицы? Как сделать INSERT? Как достать LAST_INSERT_ID?
    Что именно?

    Твоё домашнее задание - найти в гугле:
    1. Что такое уникальный индекс?
    2. Разобраться, как его прилепить к полю в том же phpMyAdmin (сырые запросы на сладкое)
    3. Как использовать INSERT IGNORE?
    4. Как получить LAST_INSERT_ID() ?

    На все вопросы менее, чем за минуты ты найдешь ответы в гугле.
    А связать я, быть может, тебе помогу.
     
  5. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    Хорошо посмотрю
     
  6. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    ошибка тут - if (!$result)
    непонятно, что это за строка и для чего она здесь.
     
  7. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    Apple
    я все посмотрел, попробовал, но вопрос вот в чем.
    Когда я создаю индекс для строки `name` индекс идет создаеться почемуто для `id` пользователей.
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Покажи, как ты его создаешь?
     
  9. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
     
  10. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    Редактирую строку, Атрибуты >Binary
     
  11. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    В phpMyAdmin это делается так:
    [​IMG]

    Либо с помощью запроса CREATE INDEX
    В любом случае, через графический интерфейс удобней тебе.
     
  12. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    да все вижу спасибо
     
  13. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    Ну собственно что дальше?
    Код в главной теме не мой. Я пытался его модифицировать, но бесполезно. Видно пока нету опыта. Напиши пожалуйста, если тебя это не затруднит, пример чтоб я мог разобрался наконец и начал работать с ним
     
  14. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Через 20 минут будет тебе код.
     
  15. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    Спасибо, буду ждать.
     
  16. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Разбирайся на здоровье.
    Структура БД:
    [sql]CREATE TABLE IF NOT EXISTS `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `login` varchar(32) NOT NULL,
    `email` varchar(32) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `email` (`email`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/sql]

    РНР код с комментариями:
    PHP:
    1. <?php
    2.  
    3. $mysqli = new mysqli('localhost', 'root', 'password', 'php');
    4.  
    5. if(!$mysqli->connect_error) {
    6.   $login = 'Apple';
    7.   $email = [email='email@email.com]'email@email.com[/email]';
    8.  
    9.  // Вставка в таблицу с помощью INSERT IGNORE
    10.  $mysqli->query('
    11.     INSERT IGNORE INTO `users` VALUES (
    12.       NULL, "' . $login .'", "' . $email . '"
    13.     )
    14.   ');
    15.  
    16.  // Если вставлено корректно, то получим ID записи, иначе - ноль (0)
    17.  $user_id = $mysqli->insert_id;
    18.  
    19.  // Если нужно - топаем далее
    20.  if($user_id) {
    21.    printf('Пользователь добавлен ( %d )', $user_id);
    22.  } else echo 'Пользователь существует';
    23. }
    24.  
    25. ?>
    Этот подход очень удобен, но у него есть один недостаток: счетчик с автоинкрементом будет увеличиваться на единицу даже если пользователь не добавлен. Если не существенно - не обращай внимание.
    Мне это удобнее, чем лишний запрос.
     
  17. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    Спасибо большое!
     
  18. ducozik

    ducozik Активный пользователь

    С нами с:
    6 авг 2011
    Сообщения:
    81
    Симпатии:
    0
    С опп не знаком, пришлось делать по другому