Страница 1 из 1

Повторение

Добавлено: 24 фев 2011, 18:33
112
3 день пытаюсь разобраться,но ничего не понимаю...

Код: Выделить всё

<?php$db_host="*";       $db_user="*";       $db_password="*";       $db_name = "*";     $table_name = "online";      $name = $_POST['name'];      mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");  $query = 'INSERT INTO `'.$table_name.'` (`name`,`last_date`) VALUES ("'.$name.'","'.time().'")';    $sql = @mysql_query($query);    echo "OK"; ?>
Вот мой код все работает,но попытался сделать чтоб если в базе уже есть такая запись ,то обновляло время.
Попробовал как тут,но что то не получилось.

Код: Выделить всё

 <?php$db_host="*";      $db_user="*";      $db_password="*";      $db_name = "*";    $table_name = "online";      $name = $_POST['name'];     mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");  $query = 'INSERT INTO `'.$table_name.'` (`name`,`last_date`) VALUES ("'.$name.'","'.time().'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";'    $sql = @mysql_query($query);    echo "OK"; ?> 
Но оно тупа возвращает OK и продолжает добавлять в базу такие же записи а не обновлять старые.Может у кого нибудь найдеться решение?

Re: Повторение

Добавлено: 24 фев 2011, 21:36
bodnar
У тебя ключ то установлен?

Re: Повторение

Добавлено: 25 фев 2011, 14:10
112
Нет не установлен

Re: Повторение

Добавлено: 25 фев 2011, 18:21
bodnar
ON DUPLICATE KEY UPDATE в художественно переводе значит "если совпадает запись по ключу то не новую вставлять а обновить"
Так если у тебя ключ не задан чего ты хочешь?

Re: Повторение

Добавлено: 26 фев 2011, 18:12
112

Код: Выделить всё

 <?php$db_host="*";      $db_user="*";      $db_password="*";      $db_name = "*";    $table_name = "online";      $name = $_POST['name'];     mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");  $query = 'INSERT INTO `'.$table_name.'` (`name`,`last_date`) VALUES ("'.$name.'","'.time().'") ON DUPLICATE .$name. UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";'    $sql = @mysql_query($query);    echo "OK"; ?> 
Так тоже кстати не работает(Куча способов перепробывал=(

Код: Выделить всё

 <?php$db_host="*";      $db_user="*";      $db_password="*";      $db_name = "*";    $table_name = "online";      $name = $_POST['name'];     mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");  $query = 'INSERT INTO `'.$table_name.'` (`name`,`last_date`) VALUES ("'.$name.'","'.time().'") ON DUPLICATE `name` UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";'    $sql = @mysql_query($query);    echo "OK"; ?> 

Re: Повторение

Добавлено: 26 фев 2011, 20:52
bodnar
у тебя в таблице какому нибудь полю должен быть задан уникальный ключ
ON DUPLICATE KEY UPDATE это цельная комманда которая для удобства чтения пишется через пробел, ты же не пишешь вместо trace traнепонятныебуквыce?

Re: Повторение

Добавлено: 27 фев 2011, 14:41
112

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `online` (  `id` int(9) auto_increment,  `uid` int(9),   `TEXT` TEXT NOT NULL,  `last_date` int(10),  `visits` int(9) default '1',  PRIMARY KEY  (`id`),  UNIQUE KEY `uid` (`uid`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
Тут вроде KEY использую

Код: Выделить всё

<?php// данные доступа Рє базе данных$db_host="localhost";       // обычно РЅРµ РЅСѓР¶РЅРѕ изменять$db_user="1";        // РёРјСЏ пользователя БД$db_password="1";        // пароль БД$db_name = "1";      // РёРјСЏ БД      // РёРјСЏ БД$table_name = "online";       // РёРјСЏ таблицы статистики. Если РІС‹ РЅРµ меняли его РІ запросе, создающем БД, то Рё здесь менять его РЅРµ надо$name = $_POST['name'];     mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))    $query = 'INSERT INTO `'.$table_name.'` (`text`, `last_date`) VALUES ("'.$name.'","'.time().'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";';    $sql = mysql_query($query);    echo "OK";?> 
Но все равно дублируется(
В принципе я понял в чем ошибка.У меня stat.php передается в переменной NAME текст,и в бд NAME добавляется как TEXT,а надо чтоб оно добавлялось как UID ,а как UID оно не будет добавляться т.к UID не задан как TEXT NOT NULL,а задать его как TEXT NOT NULL не получается потому что выдает ошибку.Теперь ломаю голову над тем как задать ТЕХТ TEXT NOT NULL и чтоб оно осталось UNIQUE KEY.
Делаю так

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `online` (  `id` int(9) auto_increment,  `uid`TEXT NOT NULL ,  `last_date` int(10),  `visits` int(9) default '1',  PRIMARY KEY  (`id`),  UNIQUE KEY `uid` (`uid`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Re: Повторение

Добавлено: 30 мар 2011, 22:08
112
Все что описано сверху у меня получилось проделать=)
Теперь малость по другому пытаюсь сделать и опять ...
Хотел сделать чтоб выводилось фраза DUBL если такая запись уже есть в базе

Код: Выделить всё

<?php// данные доступа к базе данных$db_host="localhost";       // обычно не нужно изменять$db_user="user";        // имя пользователя БД$db_password="pass";        // пароль БД$db_name = "name";      // имя БД$table_name = "stat";       // имя таблицы статистики. Если вы не меняли его в запросе, создающем БД, то и здесь менять его не надо // данные приложения$app_id = '743131'; // id приложения$api_secret = 'qwertyuiopasdfghjklzxcvbnm'; // защищенный ключ приложения  $auth_key  = $_POST['auth_key'];$viewer_id = $_POST['viewer_id']; $real_key = md5($app_id."_".$viewer_id."_".$api_secret);if ($auth_key == $real_key){    // соединение с БД    mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");     $query = 'INSERT INTO `'.$table_name.'` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY echo"dubl";';    $sql = mysql_query($query);    echo "OK";}else{echo"anti"}?>
Но все время выводиться ОК и никакие записи не добавляются,что делать?(
P.s посоветуйте пжл книги по пхп или вот справочники вроде такого ,но для пхп

Re: Повторение

Добавлено: 30 мар 2011, 22:35
Александр
112
Может быть поможет функция mysql_info() или mysql_affected_rows()...
Можешь просто разделить запрос на 2 мелких, первым выбирай значение из базы, и в зависимости от этого либо выполняй запрос на добавление, либо выводи DUBL.

Re: Повторение

Добавлено: 31 мар 2011, 18:35
112
:geek: Решил проблему с помощью mysql_error( ) 8-)