Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Защо така с тази заявка?

Featured Replies

Здравейте експерти ;)

Половин час се чудих защо не ми се получава една заявка. Извиквам функцията $contents = getSiteContents('en','main'); като реших да я разширя и да вкарам втора променлива при изваждането на линковете на менюто на сайта (език, главно/под- меню). Функцията работеше ОК при една променлива ($user_lang), но добавянето на $parent я извади от строя:

function getSiteContents($user_lang,$parent) {


	$lang_table = "site_contents_".$user_lang;



	$site_contents = mysql_query("SELECT * FROM ".$lang_table." WHERE page_parent = ".$parent." ");
Заявката не се изпълняваше. Тъкмо бях описал докъде съм стигнал (тук, във форума) и щях да питам "защо така?", когато ми хрумна да променя заявката на:
$site_contents = mysql_query("SELECT * FROM ".$lang_table." WHERE page_parent = '$parent' ");

Проработи, ;), но изникна нов въпрос -- "защо така?"

Та, защо мога да подам $lang_table по единия начин, а не мога по същия да подам $parent? На какво се дължи тази разлика, къде ми куца синтаксиса?

Здравейте експерти :)

Половин час се чудих защо не ми се получава една заявка. Извиквам функцията $contents = getSiteContents('en','main'); като реших да я разширя и да вкарам втора променлива при изваждането на линковете на менюто на сайта (език, главно/под- меню). Функцията работеше ОК при една променлива ($user_lang), но добавянето на $parent я извади от строя:

function getSiteContents($user_lang,$parent) {


	$lang_table = "site_contents_".$user_lang;



	$site_contents = mysql_query("SELECT * FROM ".$lang_table." WHERE page_parent = ".$parent." ");
Заявката не се изпълняваше. Тъкмо бях описал докъде съм стигнал (тук, във форума) и щях да питам "защо така?", когато ми хрумна да променя заявката на:
$site_contents = mysql_query("SELECT * FROM ".$lang_table." WHERE page_parent = '$parent' ");

Проработи, :rolleyes:, но изникна нов въпрос -- "защо така?"

Та, защо мога да подам $lang_table по единия начин, а не мога по същия да подам $parent? На какво се дължи тази разлика, къде ми куца синтаксиса?

Какъв е типа на полето parent ?

  • Автор
Какъв е типа на полето parent ?

'parent' = varchar(50) --- Има ли значение?

'parent' = varchar(50) --- Има ли значение?

Разбира се, че има. Ако беше int нямаше да има нужда от кавички.

Не знам каква информация пазиш в това поле. Но ако е данни за родителски запис, аз поне винаги използвам за това индекса, който е int, а не стрингово поле.

Редактирано от Ken (преглед на промените)

  • Автор
Разбира се, че има. Ако беше int нямаше да има нужда от кавички.

Не знам каква информация пазиш в това поле. Но ако е данни за родителски запис, аз поне винаги използвам за това индекса, който е int, а не стрингово поле.

Я да видим дали правилно съм те разбрал -- int(eger) не е ли само числа? Тоест, ако искам да запиша стойност вътре трябва да е числова?

В това поле пазя вида на менюто: 'main' --> за линковете на главното меню, 'design' --> за линковете, съставящи подменюто Дизайн, 'activities' за подменюто на Дейности и така нататък... Всъщност цялото това нещо е екепримент за изграждане на менюто, който може и въобще да не проработи, защото аз все още се опитвам да формулирам как точно да вмъкна подменютата към всяко parent меню с горната функция...

Предвид това, че указвам parent с текст (стринг) не е ли по-удачно да оставя полето varchart?

Благодаря за помощта!

За да не се чудиш - винаги ползвай кавички (') за стойностите - независимо от типа и ще работи без проблем. А за имената на полетата може да използваш обратни кавички (`) - така няма да съвпадне с запазена дума (например: "date", "time").

Така заявката ти ще стане:

mysql_query("SELECT * FROM ".$lang_table." WHERE `page_parent` = '".$parent."' ");

Я да видим дали правилно съм те разбрал -- int(eger) не е ли само числа? Тоест, ако искам да запиша стойност вътре трябва да е числова?

В това поле пазя вида на менюто: 'main' --> за линковете на главното меню, 'design' --> за линковете, съставящи подменюто Дизайн, 'activities' за подменюто на Дейности и така нататък... Всъщност цялото това нещо е екепримент за изграждане на менюто, който може и въобще да не проработи, защото аз все още се опитвам да формулирам как точно да вмъкна подменютата към всяко parent меню с горната функция...

Предвид това, че указвам parent с текст (стринг) не е ли по-удачно да оставя полето varchart?

Благодаря за помощта!

Как изглежда една примерна таблица за описание на меню с родителски записи:

ID

Item

ParentID

Основните елементи от менюто имат родител 0:

ID:1

Item:Елемент 1

ParentID:0

ID:2

Item:Елемент 2

ParentID:0

След това идват поделементите:

ID:3

Item:Поделемент 1

ParentID:1

ID:4

Item:Поделемент 2

ParentID:1

ID:5

Item:Поделемент 1

ParentID:2

ID:6

Item:Поделемент 2

ParentID:2

и т.н. Можеш да позлваш колкото искаш поделементи и на поделементите.

За да не се чудиш - винаги ползвай кавички (') за стойностите - независимо от типа и ще работи без проблем. А за имената на полетата може да използваш обратни кавички (`) - така няма да съвпадне с запазена дума (например: "date", "time").

Така заявката ти ще стане:

mysql_query("SELECT * FROM ".$lang_table." WHERE `page_parent` = '".$parent."' ");
Айде малко по-внимателно със съветите. :whist: Пробвал ли си да INSERT-неш текст в числово поле, за да видиш резултата? Пробвал ли си да направиш SELECT на numeric данни с WHERE клауза 'some text'?
CREATE TABLE `test` (

  `id` int(11) NOT NULL auto_increment,

  `num` int(11) default NULL,

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;


mysql> INSERT INTO test (`id`, `num`) VALUES (NULL,'alabala');

Query OK, 1 row affected


mysql> INSERT INTO test (`id`, `num`) VALUES (NULL,'kukuruku');

Query OK, 1 row affected


mysql> INSERT INTO test (`id`, `num`) VALUES (NULL,101);

Query OK, 1 row affected


mysql> INSERT INTO test (`id`, `num`) VALUES (NULL,'102aaa');

Query OK, 1 row affected


mysql> SELECT * FROM test;

+----+-----+

| id | num |

+----+-----+

|  1 |   0 |

|  2 |   0 |

|  3 | 101 |

|  4 | 102 |

+----+-----+

4 rows in set


mysql> SELECT * FROM test WHERE num = 'Kimvaras';

+----+-----+

| id | num |

+----+-----+

|  1 |   0 |

|  2 |   0 |

+----+-----+

2 rows in set

Тъй че с две думи - уважавай(те) типа на данните, за да получавате резултатите, които очаквате.

Успех :whist:

Редактирано от mitkosoft (преглед на промените)

Абсолутно съм съгласен и уважавайки данните няма да слагаш текст в числово поле - това е работа на разработчика, да слага верните данни. Иначе резултата просто ще е същия.

Не разчитай грешната заявка да направи валидацията.

SELECT * FROM test WHERE num = 'Kimvaras';
е еквивалент на
SELECT * FROM test WHERE num = 0;
което е и резултата:
+----+-----+

| id | num |

+----+-----+

|  1 |   0 |

|  2 |   0 |

+----+-----+

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.