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

Dan922 28.09.2017 14:48

а сколько эта работа будет стоить?

laimas 28.09.2017 15:12

Цитата:

Сообщение от Dan922
а сколько эта работа будет стоить?

Разобраться с вашими таблицами и написать запрос - минимальная цена которую принимают к переводу.

Но просто написать запросы и все, это не работа:

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

2) клиентский код ни к черту не годится, его тоже нужно привести к нормальному виду

3) Х - не известно есть ли еще какие ляпы в коде в целом, которые по ходу придется править

Так что решать не мне - если по минимум и только запросы написать, а остальное трава не расти, то в раздел Работа. Вполне возможно что кто-то и напишет, я такое делать не буду.

Если все сделать по уму, тогда можно, пишите в личку, давайте контакты для связи. А уже там и весь код представить, и пояснить что-то, и т.д., тогда и цена может обрисоваться.

Dan922 28.09.2017 15:19

Да я просто загнал все названия в value и пошло он к едрене фене.
Я два дня убил на то чтобы решить этот вопрос.
А теперь еще и деньги платить?
Не.
Обойдемся без таблицы в БД.

laimas 28.09.2017 15:23

Цитата:

Сообщение от Dan922
Да я просто загнал все названия в value

Цитата:

Сообщение от Dan922
Обойдемся без таблицы в БД.

Вольному воля, этого ни кто вам не запретит. )

Dan922 28.09.2017 15:24

Мне эти ваши проверки-нафиг не упали.
Надо чтобы просто инфа приходила на почту.
Для этого надо только:
а) По полученным id достать название города
б) Вставить это в почту.

А то, что вы тут мне пытались рассказать-не надо!
Спасибо конечно, но у меня не такой огромный бизнес, чтобы кто-то полез мне ломать сайт.
Даже если и полезет. Одна заявка в четыре дня. Я подниму бекапы.
Все!

laimas 28.09.2017 16:06

Цитата:

Сообщение от Dan922
Мне эти ваши проверки-нафиг не упали.

Цитата:

Сообщение от Dan922
А то, что вы тут мне пытались рассказать-не надо!

Ну-ну, а потом все закончится тем, что хост закроет вам доступ к почте.

Dan922 28.09.2017 16:27

сколько вам дать денег чтобы вы написали мне эти пару запросов?

Dan922 28.09.2017 16:35

Почему он ругается на строку где
if(mysql_num_rows($q))

Dan922 28.09.2017 16:37

Да и вот вы говорите регион не указывать.
По вашему запросу.
$q = mysql_query('SELECT `name` FROM `city` WHERE `city_id` = ' . $id);

возвращает почему-то 0
Что б вы понимали.
Я не против даже минимальную стоимость заплатить за эти запросы. Только вот вижу, что они не работают.
Че делать?

Dan922 28.09.2017 16:42

Судя по всему концепция , предложенная вами, не совсем подходит для моего ресурса.
Получается, что если следовать вашим подсказкам то в $id ничего не приходит.
Соответственно в $q ничего не записывается.

laimas 28.09.2017 17:34

Цитата:

Сообщение от Dan922
Да и вот вы говорите регион не указывать.

А зачем? Пусть, кратко, в базе имеются города и регионы

id_city, название города, id_region

1, А, 1
2, Б, 1
3, В, 2
4, Г, 1
5, Д, 1
....

Когда клиент запрашивает горда региона 1 для получения всех городов его, то в этом случае в условии запроса нужно искать по ID указанного региона:

..... WHERE id_region = 1

И запрос вернет записи с городами А, Б, Г, Д.

А выбор пользователя города, например Г, это найти один конкретный город, а значит искать нужно по ID города:

..... WHERE id_city = 4

И запрос вернет одну запись и именно этого города, так как городов с таким же ID в базе нет, и он принадлежит региону 1.

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

Цитата:

Сообщение от Dan922
$q = mysql_query('SELECT `name` FROM `city` WHERE `city_id` = ' . $id);
возвращает почему-то 0

Этот запрос не может вернуть 0, он может вернуть либо ошибку, либо NULL, либо ресурс в случае успеха. А количество записей можно получить из ресурса функцией, я писал, смотрите.

Цитата:

Сообщение от Dan922
Судя по всему концепция , предложенная вами, не совсем подходит для моего ресурса.

Чушь полнейшая, вы просто ничего не понимаете.

Цитата:

Сообщение от Dan922
Почему он ругается на строку где
if(mysql_num_rows($q))


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

$q = mysql_query('SELECT `name` FROM `city` WHERE `city_id` = ' . $id) or die (mysql_error());

Цитата:

Сообщение от Dan922
сколько вам дать денег чтобы вы написали мне эти пару запросов?

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

Dan922 28.09.2017 17:42

Блин, подождите.
Он возвращал мне ресурс ранее.
И я даже написал функцию типа
$num = mysql_num_rows($regs);
для количества записей.
А нужную запись то как достать?

laimas 28.09.2017 17:46

Цитата:

Сообщение от Dan922
А нужную запись то как достать?

Все написано тут https://javascript.ru/forum/misc/707...tml#post465826

Dan922 28.09.2017 18:03

mysql_num_rows() expects parameter 1 to be resource, boolean

Выскочила такая ошибка, что булев тип у меня там.
Проверил на ошибки вот результат:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Dan922 28.09.2017 18:18

С булианам разобрался, сменил тип.
Но что-то с запросами.

laimas 28.09.2017 18:31

$sql = 'SELECT `name` FROM `city` WHERE `city_id` = ' . $id;

echo $sql . '<br>'; 

$q = mysql_query($sql) or die (__FILE__ .'/'. __LINE__ .' '. mysql_error());

Dan922 28.09.2017 19:25

SELECT `name` FROM `city` WHERE `city_id` =

52 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

mysql_num_rows() expects parameter 1 to be resource, null given

laimas 28.09.2017 23:08

Цитата:

Сообщение от Dan922
SELECT `name` FROM `city` WHERE `city_id` =

И после этого стоит спрашивать почему You have an error in your SQL syntax .... и т.д.?

Dan922 29.09.2017 22:33

В общем ничего нормально вывести не удалось так вы написали.
Максимально выводится Resource:#8 Что в ресурсе-не понятно.
Потому что ни через while ни через вашу конструкцию данные не выходят из него.
Например пробовал вариант как было в примере :
$result = mysql_query("SELECT * FROM `products`         
                        WHERE companyid = $companyid;");
mysql_query возвращает ресурс
это указатель на выборку данных из БД в памяти
потом по нему нужно пройти
while($row = mysql_fetch_assoc($result)){
      $product = array();
      $product["pid"] = $row["pid"];
      $product["productname"] = $row["productname"];        
    }

Все работает по другим таблицас, я даже таблицу создал такую же как в этом примере.

А с вашей конструкцией он перестает работать после вывода ресурса.
Ошибок в запросе нет.
Проверка показала, что в name[0] кроме 0 нет ничего.

Уже все варианты перебрал.
После каждой операции писал проверку, чтобы видеть на каком этапе косяк.
И вот получается, что по запросу ресурс выводит, но вот что в нем-не понятно.
Работал по учебникам, по примерам в них.
Прочитал полностью обработку полученных ресурсов, написал как в примере. И ни фига!

laimas 30.09.2017 00:18

Я не знаю что вы там делаете и что за проблемы, но я вам своих конструкций не мог написать. Все что я писал, это стандартные функции для работы с базой MySQL взятые из руководства РНР.

Я лишь оперировал "условной переменной", которую назвал $id, ибо говоря о том, что данные извне сервер обязан проверять, и самое простое в данном контексте, это привести их к Integer. Какое имя в вашем случае после всех операций получит ваша переменная я не знаю, поэтому и "условная". Вы ее добросовестно копируете себе, а таковой у вас и близко нет, делаете запрос и естественно получаете ошибку.

Вы чего хотите, чтобы я и далее писал примеры, а вы их копировали и задавали вопросы "почем"? Смысла нет - открывайте и читайте руководство, по каждым функциям есть примеры. Забудьте о своем Ajax и просто отдельным сркиптом обращайтесь к своей базе за конкретными записями. Как поймете что к чему, несложно будет понятое перенести и в реальный скрипт.

Dan922 30.09.2017 12:47

Я не в укор вам .
Привел к integer.
Разницы нет как называть переменную, если в нее все равно "падает" ресурс. Можно и $result.

Dan922 30.09.2017 13:03

Все, супер у меня получилось!

Разобрался, понял где была ошибка.
Не нужно было приводить к integer.
Т.к. эта переменная изначально была определена как integer.
$result = mysql_query("SELECT `name` FROM `city` WHERE `city_id` = $city");

if(mysql_num_rows($result)) {
     $namer = mysql_fetch_row($result);
     $namer=$namer[0];
} else {
   
   
}


Спасибо за помощь!

laimas 30.09.2017 13:29

Цитата:

Сообщение от Dan922
Т.к. эта переменная изначально была определена как integer.

Что?! И еще раз, и запомните хорошо - все что приходит POST/GET запросами, это строки! А приведение integer к integer не приведет к ее "порче", а тем более не сделает из нее NULL.

echo (int)25; //как была 25 объявлена как integer, так ею и останется
//а вот строковое представление 25 станет числом 25
$str = '25';
echo gettype($str) . '<br>';
$str = (int)'25';
echo gettype($str);
//а вот так вашу базу как орех грецкий
//вы уверены, что форма вам уже числа шлет, думаете что город под ID 230 запрашивают
//а на самом деле ваши "дыры прощупывают"  
$val = '230 union select "1", login, passwd ...';
//а вот так не прокатит
$val = (int)$val;
echo $val;


Вы не разобравшись в своих багах несете ахинею. Но это не беда, гораздо хуже, что вы не проверяете и не фильтруете входные данные.

Dan922 30.09.2017 13:35

Да я поставил фильтра.
Все нормально.

laimas 30.09.2017 13:45

Цитата:

Сообщение от Dan922
Да я поставил фильтра.
Все нормально.

Сомнительно.


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