swer
|
 |
« : Июль 17, 2008, 05:13:37 » |
|
Значит так,пишу к скрипту знакомств голосование(рейтинг юзверов) <?php mysql_connect('sql-2.ayola.net', 'логин', 'пасс'); mysql_select_db('база'); $l = $_GET['l']; //Получаем записи $res = mysql_query("SELECT point FROM zn_anket WHERE login='$l'") or die("Invalid query: " . mysql_error()); $r = mysql_fetch_array($res); $p = $r['point']; $k = $r['kol']; $l = $_GET['l']; $gp = $_GET['point']; echo "<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=1>1</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=2>2</a>"; if($gp==1);{ $point==$p++; $kol==$k++;} if($gp==2);{ $point==$p+2; $kol==$k++;} mysql_query("INSERT INTO zn_anket(point, kol) VALUES ('$point' '$kol')");
?>
в обшем то писал ляпом,но получилос...точнее некоректно.. Я добавил к БД доп записи point(количество баллов) и kol(количество проголосовавших) скрипт вместо того что бы добавит к секциям point и kol каждого id по баллу он создает новые ид с уже прибавленными на 1 в поинте и кол,как сделать праильно не пойму и гугл я уж все облазил=(
|
|
|
Записан
|
|
|
|
Astraller™
|
 |
« Ответ #1 : Июль 17, 2008, 12:14:50 » |
|
Зарание сори за лекторский тон, но: 1) INSERT означает "Вставить". Вставить новую запись! 2) Есть команда UPDATE которая означает "изменить". Которая собственно и изменяет. 3) Не надо считать простые вычисления в скрипте - это долго. Заставьте считать MySQL: <?php mysql_connect('sql-2.ayola.net', 'логин', 'пасс'); mysql_select_db('база'); $l = $_GET['l']; $gp = $_GET['point']; echo "<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=1>1</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=2>2</a>"; if($gp==1){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+1, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==2){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+2, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); } ?>
|
|
« Последнее редактирование: Июль 17, 2008, 22:38:18 от Astraller™ »
|
Записан
|
Гамлета здесь больше нет. Осталась только тень. 
|
|
|
swer
|
 |
« Ответ #2 : Июль 17, 2008, 18:06:48 » |
|
Хмм,какая то ошибка,тк у мя белый экран....проблема начинается после if($gp==1);
|
|
|
Записан
|
|
|
|
Astraller™
|
 |
« Ответ #3 : Июль 17, 2008, 22:38:42 » |
|
Поправил, не доглядел. Сори. Но этот баг был еще у вас 
|
|
|
Записан
|
Гамлета здесь больше нет. Осталась только тень. 
|
|
|
swer
|
 |
« Ответ #4 : Июль 18, 2008, 06:33:43 » |
|
хехе да у мя там куча багов было=)) Спасибо за помошь.....начинаю вникать в суть mysql,до этого файлами баловался=))) Кстати незнаешь как можно сделать чтоб юзвер голосовал ток 1 раз...можно с помошью куков и еше читал про ф-ю в мускуле который не дает записывать больше 1 раза в день...
|
|
|
Записан
|
|
|
|
elCreator
Старший Новичёк

Карма: 5
Сообщений: 97
|
 |
« Ответ #5 : Июль 18, 2008, 22:48:05 » |
|
$l = $_GET['l']; //Получаем записи $res = mysql_query("SELECT point FROM zn_anket WHERE login='$l'"); А необходимость защиты от SQL-инъекций уже отменили? 
|
|
|
Записан
|
 играет сейчас в моем Winamp'е
|
|
|
-Deadly-
|
 |
« Ответ #6 : Июль 19, 2008, 14:45:18 » |
|
В смысле?
|
|
|
Записан
|
|
|
|
elCreator
Старший Новичёк

Карма: 5
Сообщений: 97
|
 |
« Ответ #7 : Июль 19, 2008, 17:40:56 » |
|
В смысле любой желающий может набрать в строке браузера _http://site.ru/script.php?mode=menu&login=blabla&pas=blabla&l=' OR 1=1 UNION DROP TABLE zn_anket'/* и снести все данные из таблицы. Ну или заменить DROP TABLE zn_anket по вкусу и выполнить абсолютно любые действия на сайте. Данным из $_GET[] нельзя доверять - нужна хотя бы элементарная их фильтрация $_GET['l'] = htmlspecialchars ($_GET['l'], ENT_QUOTES); , и то этого бывает недостаточно и вводятся проверки на существование переменной, другие символы, кроме кавычки - в интернете очень много примеров есть. И если с кавычкой еще справляется magic_quotes_on, то от остальных ошибок, вызываемых недостаточной фильтрацией, это не спасет.
|
|
« Последнее редактирование: Июль 19, 2008, 17:45:18 от elCreator »
|
Записан
|
 играет сейчас в моем Winamp'е
|
|
|
swer
|
 |
« Ответ #8 : Июль 19, 2008, 21:56:04 » |
|
В смысле любой желающий может набрать в строке браузера _http://site.ru/script.php?mode=menu&login=blabla&pas=blabla&l=' OR 1=1 UNION DROP TABLE zn_anket'/* и снести все данные из таблицы. Ну или заменить DROP TABLE zn_anket по вкусу и выполнить абсолютно любые действия на сайте. Данным из $_GET[] нельзя доверять - нужна хотя бы элементарная их фильтрация $_GET['l'] = htmlspecialchars ($_GET['l'], ENT_QUOTES); , и то этого бывает недостаточно и вводятся проверки на существование переменной, другие символы, кроме кавычки - в интернете очень много примеров есть. И если с кавычкой еще справляется magic_quotes_on, то от остальных ошибок, вызываемых недостаточной фильтрацией, это не спасет.
Бл**я я совсем забыл,спс за напоминание...иногда реал втормоз, займусь обязательно..
|
|
« Последнее редактирование: Июль 19, 2008, 22:00:34 от swer »
|
Записан
|
|
|
|
swer
|
 |
« Ответ #9 : Июль 23, 2008, 02:55:52 » |
|
Вот попробовал такой код $res = mysql_query("SELECT `gp`, `login` FROM `zn_anket`") or die("Invalid query: " . mysql_error()); $r = mysql_fetch_array($res); $gl = $r['gp']; $log = $r['login']; $_GET['l'] = htmlspecialchars ($_GET['l'], ENT_QUOTES); $_GET['login'] = htmlspecialchars ($_GET['login'], ENT_QUOTES); $l2 = $_GET['login']; $l=$_GET['l']; $gp = $_GET['point']; echo "<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=1>1</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=2>2</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=3>3</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=4>4</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=5>5</a>"; if($log==$gl){ echo "Вы уже проголосовали за эту анкету"; }else { if($gp==1){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+1, `kol`=`kol`+1, `gp`=`$l2` WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==2){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+2, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==3){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+3, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==4){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+4, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==5){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+5, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }} ?> Размышления таковы что бы с поинтами и кол проголосовавших записывались и логин за который был отдан голос и при попытке повторно проголосовать выводилось сообщение о том что он уже голосовал,но вот выдает ошибку( Invalid query: Unknown column 'alina' in 'field list' если login=alina)...что не так написал
|
|
|
Записан
|
|
|
|
-Deadly-
|
 |
« Ответ #10 : Июль 23, 2008, 03:59:24 » |
|
$gl = $r['gp']; $gp = $_GET['point']; Вы их местами не попутали случайно? и что храниться в переменных gp & gl?
|
|
|
Записан
|
|
|
|
swer
|
 |
« Ответ #11 : Июль 23, 2008, 14:07:21 » |
|
нет не перепутал в $gl это ячейка gp(записываются логины за которых отдан голос) $gp значения point (&point=1...) Хотел сделать с помощью кокиес,но подумал что не все мобилы принимают его(запрет на установку),а др ничего в голову не лезит...
|
|
|
Записан
|
|
|
|
atimur
Просветлённый
  
Карма: 59
Сообщений: 990
Живу в SanCity
|
 |
« Ответ #12 : Июль 23, 2008, 14:18:35 » |
|
Хотел сделать с помощью кокиес,но подумал что не все мобилы принимают его(запрет на установку),а др ничего в голову не лезит...
Пользуйтесь сессиями.
|
|
|
Записан
|
|
|
|
swer
|
 |
« Ответ #13 : Июль 23, 2008, 16:36:40 » |
|
Хмм... незнаю,но врод сесии это 13 значное число генерируюшийся ф-ей uniqid(" ") которая записывается (к прим) в ячейку sess и в куки( setcookies ("userid", $id, time( )+2592000); ) и при совпадений выводится инфа....но опять же не подходит по вышеупомянутым причинам... или же я путаю сессии с чем то др..введите в курс дела=))
|
|
|
Записан
|
|
|
|
|
swer
|
 |
« Ответ #15 : Июль 23, 2008, 16:58:49 » |
|
Спс,будем изучать=)+
|
|
|
Записан
|
|
|
|
swer
|
 |
« Ответ #16 : Июль 23, 2008, 21:01:17 » |
|
Прочитал,и не понял каким образом можно реализовать данный метод в моем случае.Если можете помогите разобратся с тем что бы записывать логины в таблицу-так (на мой взгляд) лучше всего...
|
|
|
Записан
|
|
|
|
Astraller™
|
 |
« Ответ #17 : Июль 23, 2008, 21:43:04 » |
|
Прочитал,и не понял каким образом можно реализовать данный метод в моем случае.Если можете помогите разобратся с тем что бы записывать логины в таблицу-так (на мой взгляд) лучше всего...
1) Сессия тут, действительно не поможет. 2) Куки годны только для периодических действий. 3) В чем проблема записи логинов в таблицу?
|
|
|
Записан
|
Гамлета здесь больше нет. Осталась только тень. 
|
|
|
swer
|
 |
« Ответ #18 : Июль 23, 2008, 21:51:51 » |
|
Выдает такое сообщение Invalid query: Unknown column 'swer' in 'field list' (Если логин swer)
|
|
|
Записан
|
|
|
|
Astraller™
|
 |
« Ответ #19 : Июль 23, 2008, 22:01:27 » |
|
Выдает такое сообщение Invalid query: Unknown column 'swer' in 'field list' (Если логин swer)
Эм... покажите ВЕСЬ запрос.
|
|
|
Записан
|
Гамлета здесь больше нет. Осталась только тень. 
|
|
|
swer
|
 |
« Ответ #20 : Июль 23, 2008, 22:19:43 » |
|
Код выше убло написано.... $res = mysql_query("SELECT `gp`, `login` FROM `zn_anket`") or die("Invalid query: " . mysql_error()); $r = mysql_fetch_array($res); $gl = $r['gp']; $log = $r['login']; $_GET['l'] = htmlspecialchars ($_GET['l'], ENT_QUOTES); $_GET['login'] = htmlspecialchars ($_GET['login'], ENT_QUOTES); $l2 = $_GET['login']; $l=$_GET['l']; $gp = $_GET['point']; echo "<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=1>1</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=2>2</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=3>3</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=4>4</a>|<a href = ?mode=menu&login=$login&pas=$pass&l=$login&point=5>5</a>"; if($log==$gl){ echo "Вы уже проголосовали за эту анкету"; }else { if($gp==1){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+1, `kol`=`kol`+1, `gp`=`$l2` WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==2){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+2, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==3){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+3, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==4){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+4, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }elseif($gp==5){ mysql_query("UPDATE `zn_anket` SET `point`=`point`+5, `kol`=`kol`+1 WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error()); }} ?> Хотя чувствую что логика неправильная....да и незнаю какого рода таблицу надо сделал такое ТипДокументация: text Длина/значения:1000 Ноль:null
|
|
|
Записан
|
|
|
|
Astraller™
|
 |
« Ответ #21 : Июль 23, 2008, 22:22:24 » |
|
Код выше убло написано....
Проблема в этой строке: mysql_query("UPDATE `zn_anket` SET `point`=`point`+1, `kol`=`kol`+1, `gp`=`$l2` WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error());
Вы поставили не те ковычки, правильно будет так: mysql_query("UPDATE `zn_anket` SET `point`=`point`+1, `kol`=`kol`+1, `gp`= '".$l2."' WHERE `login` = '".$l."'") or die("Invalid query: " . mysql_error());
|
|
|
Записан
|
Гамлета здесь больше нет. Осталась только тень. 
|
|
|
|