UPDATE данных в таблице!

1. Arnis (14.01.2010 / 19:51)
Как обновить данные в базе(правилно)? Я делал так
$add = $_GET['add'];
$pluss = 1;
$q = mysql_fetch_array(mysql_query("SELECT id,money,str,def,hp,maxhp FROM users WHERE usr = '.$_GET[usr].' AND pwd = '.$_GET[pwd].'"));
$id = strip_tags($q['id']);
$money = strip_tags($q['money']);
$str = strip_tags($q['str']);
$def = strip_tags($q['def']);
$hp = strip_tags($q['hp']);
$maxhp = strip_tags($q['maxhp']);
if($add == str){
echo '<p align="center">';
echo '<b><font color="green">Spēks veiksmīgi palielināts par 1 punktu!</font></b><br/>-===-<br/>';
echo '<a href="char.php?usr='.$usr.'&amp;pwd='.$pwd.'">Atpakaļ</a><br/>';
echo '<a href="main.php?usr='.$usr.'&amp;pwd='.$pwd.'">Uz galveno</a>';
$stre = $str + $pluss;
$mon = $money - $sprice;
mysql_query("UPDATE users SET str = '.$stre.', money = '.$mon.' WHERE id = '.$id.'"); }
но когда запускаю ету страницу все данные в таблице пропадает!
Help plizz

2. Олег (14.01.2010 / 20:05)
Как понять исчезают? Поля обнуляются? Я так пологаю id имеет числовое значение? Числовые значение в кавычки или апострофы не подвергаются.

3. Олег (14.01.2010 / 20:08)
Вообще к чему тебе тут strip_tags()?

4. Arnis (14.01.2010 / 20:21)
http://wap-gang.net/scr.zip
ет весь скрипт! посмотри плиз размер 6кб

5. Олег (14.01.2010 / 20:47)
В твоем скрипте очень много уязвимостей критической степени. пересмотри все свои типы данных. Например, денежный формат должен быть типа decimal. strip_tags вообще не к чему.
<?php
$q = mysql_fetch_array(mysql_query("SELECT id,money,str,def,hp,maxhp FROM users WHERE usr = '".$_GET['usr']."' AND pwd = ".intval($_GET['pwd'])));
mysql_query("UPDATE users SET str = $stre, money = $mon WHERE id = $id"); }
mysql_query("UPDATE users SET def = $defe, money = $mon WHERE id = $id"); }
mysql_query("UPDATE users SET hp = $hp, maxhp = $maxhpe, money = $mon WHERE usr = $id"); }
?>
Скрипт работает, но суть надеюсь понял

6. Олег (14.01.2010 / 20:51)
я тебе только запросы написал. Весь скрипт нет времени смотреть. Но дырок в нем полно

7. Олег (14.01.2010 / 20:53)
Для экранирования строковых значений достаточно
<?
$str = "Строка, "которую нужно" экранировать";
public function escapes($escp)
	{
		if(!get_magic_quotes_gpc())
		{
			$escp = mysql_escape_string($escp);
		}
		return $escp;
	}
$str = escapes($str);
?>
Для числовых значений достаточно intval()

8. Azzido (14.01.2010 / 21:15)
Ты в функции mysql_query ("..."); используешь двойные кавычки а переменные заключаешь в одинарные '.$id.'

9. CROWS (14.01.2010 / 21:21)
только хотел написать про уязвимости.

10. Azzido (14.01.2010 / 21:21)
Если уж использовать такой метод то mysql_query('UPDATE . . . '.$id.'. . .');

11. Олег (14.01.2010 / 21:22)
Вообще-то правильно так делать. Но не в данном случае.

12. Azzido (14.01.2010 / 21:29)
А еще функция mysql_fetch_array мне не нравится, mysql_fetch_assoc используй зачем грузить память двумя массивами. Еще советую применить для числовых значений
$id=intval($q[$id]);

13. Олег (14.01.2010 / 21:36)
12, Это же какими двумя массивами?

14. Azzido (14.01.2010 / 21:44)
Функция mysql_fetch_array возвращает нумерованный и ассоциативный массив, тогда же как функции mysql_fetch_assoc и mysql_fetch_num либо ассоциативный либо нумерованный

15. Олег (14.01.2010 / 21:56)
Это если, используется константа MYSQL_BOTH в качестве второго необязательного параметра. Она же используется по умолчанию. Если задействовать MYSQL_ASSOC или MYSQL_NUM вызовется один из соответветсвующих массивов. Вобщем это функция универсальная. Ну а по скорости самая быстрая это, конечно, mysql_fetch_row(), но все это несущественно.

16. Azzido (14.01.2010 / 22:02)
Пока сайт непосещаем - несущественно... Редко видел, чтоб в скриптах при использовании этой функции указан второй параметр.

17. Олег (14.01.2010 / 22:08)
Azzido, потому что как говорится дурной пример заразителен. Это все из книг пошло и поехало.

18. Azzido (14.01.2010 / 22:11)
Не спроста об этом пишут... Ладно,оффтоп пошел.

19. Arnis (15.01.2010 / 16:02)
я понял smile Учитса еше много нада! спс

20. Удаленный (01.02.2010 / 23:43)
ну. на самом деле mysql_fetch_array несущественно уступает mysql_fetch_assoc. ну очень несущественно

URL: https://visavi.net/topics/4953