перенос скрипта с пхп5 на 4

asics

Новичок
перенос скрипта с пхп5 на 4

У меня написан скрипт и работает на пхп5:

PHP:
$hostname = "localhost"; 
$username = "erru_doup"; 
$password = "123456"; 
$dbName = "erru_doup"; 

$userstable = $sleva."_".$sprava;

$query = "SELECT * FROM $userstable ORDER BY krs ASC"; 
mysql_query($query) or die(mysql_error());

При попытке запуска скрипта на сервере с пхп4, выдается ошибка:
Table 'erru_doup._' doesn't exist

данные скрипт получает через форму с другой страницы сайта, т.е. так http://site.ru/vibor.php?sleva=roo&sprava=orr.

Получается, что переменные передаются скрипту, но он почему-то их не видит и не подставляет в $userstable = $sleva."_".$sprava;, но почему это происходит?
 

Фанат

oncle terrible
Команда форума
НИКОГДА! Слышишь - Ни-ког-да не передавай имя таблицы из формы скрипту!
Как понял меня? Прием
 

voituk

прозревший
1. Послушай Фаната
2. Почитай про register_globals и почему это опцию не стоит включать
 

asics

Новичок
Автор оригинала: *****
НИКОГДА! Слышишь - Ни-ког-да не передавай имя таблицы из формы скрипту!
Как понял меня? Прием
я тебя понял, объясни почему нельзя этого делать?

-~{}~ 07.08.07 11:55:

Автор оригинала: Alexandre
сделай вывод этих переменных перед выполнением запроса к БД!
они же у меня и так стоят перед запросом к бд.
 

asics

Новичок
Автор оригинала: *****
тебя поломает даже ребенок.
:-( но каким образом? Ведь я же не пароли от базы передаю... Расскажите, пожалуйста, чтобы я понимал и не допускал, впредь.
 

Фанат

oncle terrible
Команда форума
asics
ты передаешь кусок запроса, дурень!
и тебе вместо твоей левой стороны напишут users
и полукчат пароли всех пользователей.
неужели непонятно?!

тем более, что в нормальном приложении вообще никогда имена таблиц передавать не надо - они и так известны
 

asics

Новичок
*****, у меня нет таблицы "users" или подобной, авторизации и админ панелей, а таблиц в базе около 300 и их имена составлены из двух слов, которые юзер выбирает из 2-х выпадающих списков через форму.

я пологаю, что если в базе не хранится секретной информации, то все-таки через форму имена передавать не опасно, так?
 

Фанат

oncle terrible
Команда форума
НЕТ, ОПАСНО
таблица в твоем случае должне быть только ОДНА.
а выбранные слова должны быть записаны в ее полях
 

4m@t!c

Александр
asics, вот Фома неверующая :), показываю:
PHP:
$sleva="mysql.user/*";
$sprava="*/";
Погугилите немного по фразе "SQL инъекция" и проникнитесь духом паранои к данным, которые приходят от клиента.
 

Фанат

oncle terrible
Команда форума
вот же блин, фома неверующий.
с таблицами-то небось все так же - себя умнее всех все равно считает. и будет делать через одно место
 

asics

Новичок
Фaнaт, я не считаю себя умнее, мне НЕ хватает опыта и я спрашиваю, не спорю, а понять пытаюсь, чтобы писать безопасные скрипты.

Вот ты говоришь, что не должно быть 300 таблиц в базе, смотри:

есть напитки:

мартини
водка
текила
конъяк
ром
абсент
шампанское
спирт
вино
джин
сок
квас
кола

и есть 30 баров которые делают коктейли из 2-х разных напитков, каждый продает коктейль по своей цене, делает в разных пропорциях.

На сайте организована статистика по ценам и пропорциям коктейлей в барах:

Человек выбирает из 2-х выпадающих списков 2-а коктейля, которые нужно смешать(из названий напитков склеивается имя таблицы в базе) и получает таблицу в которой в первом столбце названия баров, во втором цены и в третьем пропоции.


в базе это организовано так:

есть 300 таблиц с именами:
водка_пиво
водка_ром
водка_шампанское
водка_конъяк
ром_вода
ром_спирт

в каждой таблице 30 строк с названиями баров, цены и пропорции сответственно для каждого.

Представить эти 300 таблиц в виде одной, я придумал только так:

название | водка_спирт | водка_вода | водка_ром |.........
---------------------------------------------------------------------------------
бар1цен | 1руб | 2руб | 0,5руб |........
--------------------------------------------------------------------------------
бар1проп | 1/1 | 2/3 | 3/8 |.........
---------------------------------------------------------------------------------
бар2цен | 1руб | 2руб | 0,5руб |........
--------------------------------------------------------------------------------
бар2проп | 1/1 | 2/3 | 3/8 |.........
....................
---------------------------------------------------------------------------------
бар30цен | 1руб | 2руб | 0,5руб |........
--------------------------------------------------------------------------------
бар30проп | 1/1 | 2/3 | 3/8 |.........
----------------------------------------------------------------------------------


и передаваться из формы будет не имя таблицы, а название столбца, т.е "водка_сок". Так безопаснее будет?
 

4m@t!c

Александр
Глупость.
Совет. Откажитесь пока от разработки и изучите матчасть: почитайте про нормализацию БД, про принципы работы реляционных БД.
После этого у вас должно получится несколько таблиц.
 

Фанат

oncle terrible
Команда форума
а чо - у тебя коктейли только из двух ингредиентов?
а если из трех? 6 тысяч таблиц будешь делать?

или про коктейли - ты мне сказки тут рассказываешь?

-~{}~ 08.08.07 15:20:

в общем, как делаются такие таблицы с помощью реляционных баз данных:
есть таблица с алкоголем.
есть таблица с коктейлями. ид, название, комментарии.
есть таблица рецептами коктейлей.
вида
ид коктейля
ид алкоголя
количество
то есть, один коктейль занимает несколько строчек.

есть таблица с барами.
и есть таблица твоя связей коктейль-бар.
в ней идет иди бара, ид коктейля, цена.

но не дай бог речь идет на самом деле не о коктейлях и ты начнешь мне сейчас рассказывать, что на самом деле все не так.
 

asics

Новичок
Фaнат, понял тебя, только я не знаю как сделать таблицу связей
Автор оригинала: *****
и есть таблица твоя связей коктейль-бар.
где об этом почитать?

З.Ы.

Умоляю, не ругайтесь на меня :(
 

asics

Новичок
как делать ссылки в таблице на ид пункта из другой таблицы, вот что я имею ввиду
 
Сверху