Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вытянуть название из select (https://javascript.ru/forum/misc/70704-vytyanut-nazvanie-iz-select.html)

laimas 28.09.2017 05:48

Цитата:

Сообщение от Dan922
я чет не совсем понимаю, так ведь приходят целые числа, нет?

Нет, все что в значениях полей формы, это строки, строковые представления, и сервер получается строки. А все что присылают серверу может быть "подделкой". Ссылку на документацию РНР я дал, скачивайте. Там есть раздел о безопасности, в котором есть и о безопасности баз данных.
Если вы не проверив, что прислал клиент, подставите его данные в запрос, то вашу базу могу и взломать, так как вы ожидали что там 5, а к ней еще добавят запрос.

Цитата:

Сообщение от Dan922
Дайте пример вот на это

В самом простом случае, это привести к типу integer, так как знаем, что получаем идентификаторы:

if($id = (int)имя_переменной) {
     теперь $id можно подставлять в запрос так как это число и не равно 0
}


Ищите в руководстве раздел работы с переменными, где описана и функция проверки переменной является ли она числом или строкой, содержащей число - is_numeric. Также в РНР достаточный набор фильтров для проверки данных. Я вам не могу написать примеров хотя бы потому, что вы их вставите в свое, а в итоге не получится. Примеры использования той или иной РНР функции смотрите в разделе ее описания, есть там и примеры.

Все потому, что нужно не просто проверять число/не число, но еще и отдавать клиенту сообщения об ошибках, то есть прием формы от клиента, это есть диалог клиент -> сервер -> клиент. Вы что хотите чтобы я вам полный скрипт всего и вся написал? Я не буду. Ищите здесь, в сети подобные вопросы, скрипты, изучайте и применяйте у себя познанное.

Это не раздел РНР, серверным скриптам на этом форуме посвящен другой раздел и писать тут много о проблемах на сервере не стоит. В данном разделе можно было бы вести диалог о клиентской части вашего кода. А она никуда не годится - много лишнего.

Dan922 28.09.2017 12:52

:lol:
Я привел к integer, подставил id в запрос и получил...снова число))
Может что-то не так с самим запросом?

Потому что таблица имеет вид :
city_id region_id name

Dilettante_Pro 28.09.2017 13:06

Dan922,
Как и говорил laimas
Цитата:

Сообщение от laimas
Я вам не могу написать примеров хотя бы потому, что вы их вставите в свое, а в итоге не получится

Цитата:

Сообщение от Dan922
привел к integer, подставил id в запрос и получил...снова число))

Покажите запрос и где получили число

Dan922 28.09.2017 13:13

да удалил уже, ересь написал :(
вроде понимаю что к чему, а как правильно записать хз.

Dan922 28.09.2017 13:35

if($city_id = (int)$_POST['city_id']) {
     $city = mysql_query("SELECT name FROM city WHERE city_id=city_id" . $post['city_id']);
}

laimas 28.09.2017 13:44

Цитата:

Сообщение от Dan922
Потому что таблица имеет вид :
city_id region_id name

Чтобы судить о структуре вашей таблицы это как минимум нужно видеть ее дамп. Но если по ID города получить его название и таблица городов, это: идентификатор города - city_id, идентификатор региона - region_id, название города - name, этих сведений достаточно.

Считаем, что города всех регионов и содержатся в этой таблице, а значит city_id, это уникальное значение принадлежащее только одному городу. Следовательно, если запросить значение поля name для city_id равное 200, то вернется название именно этого города, а не другого, но с условием, что в этой таблице город с идентификатором 200 есть. В противном случае запрос вернет NULL.

Будем считать, что входные данные обработаны и их можно подставлять в запрос, условно назовем эту обработанную переменную ID города полученную из формы как $id (ID региона в запросе указывать не надо, потому, что все города в этой таблице, читайте выше), тогда нужно выполнить такие действие:

$q = mysql_query('SELECT `name` FROM `city` WHERE `city_id` = ' . $id);
//проверяем вернул ли что-то запрос, если вернул, значит такой город в базе есть
if(mysql_num_rows($q)) {
    //получить название города
    $name = mysql_fetch_row($q);
    //в тело почты подставляем
     "..... \nИз города: $name[0] .....";
} else {
    //запрос ничего не вернул, значит, хотя данные это число, но под таким идентификатором в базе города нет
    //а это означает, что подстава, принять действия
}

Dan922 28.09.2017 14:24

Все круто:)
Только почему он мне первую букву города вернул? :D

Dan922 28.09.2017 14:31

Я слишком тупой, чтобы достать название города самостоятельно. :(
Да и вообще , скорее всего, изначально неправильно привел к integer , возможно ошибки в запросе.

Dan922 28.09.2017 14:40

Смотрю в учебнике работу с формами.
Там приводится к integer.
Написал примерно так же у себя. Но я так и не понял как вытащить строки из дскриптора.

laimas 28.09.2017 14:47

Цитата:

Сообщение от Dan922
Я слишком тупой, чтобы достать название города самостоятельно.

Заказывайте работу, оплачивайте и используйте написанное, но пояснять все никто не станет, все таки тут не школа.


Часовой пояс GMT +3, время: 15:04.