|
|
|
| Несостыковка поля BIGINT в таблице MySQL и переменной $_GET['id'], которая специально обрабатывается как
$_GET['id']=(integer)$_GET['id'];
|
Противоречие возникает в максимальных величинах:
для BIGINT - 9223372036854775807;
для (integer)$_GET['id'] - 2147483647.
|
Как быть? | |
|
|
|
|
|
|
|
для: Maxam
(03.11.2012 в 13:41)
| | В пхп на 32-битных системах предел целого - integer.
Я в базе в БИГИНТЕ когда хранил номера сотовых, в ПХП приходилось ими пользоваться как строками. | |
|
|
|
|
|
|
|
для: Maxam
(03.11.2012 в 13:41)
| | Все верно, BIGINT - это 64-битное целое, либо переходите на 64-битные версии операционной системы и PHP, либо не преобразовывайте значение $_GET['id'] к целому числу, работайте с ним как со строкой. | |
|
|
|
|
|
|
|
для: cheops
(03.11.2012 в 15:01)
| | Вот мы с вами в другой теме по-другому вопросу общались. Вы сказали, что безопасность переменных это то, что я использую передаваемые значения пользователей такими, какие они должны быть для скрипта, а не какими бы мог написать их пользователь, т. е. если мне нужно $_GET['page'], то оно должно быть цифрой, и если пользователь решит передать первая или 5я в $_GET['page'], то мне нужно это проверить. Вот как тогда проверить здесь $_GET['id'] через is_integer? | |
|
|
|
|
|
|
|
для: Maxam
(03.11.2012 в 23:21)
| |
if( !preg_match('#^\d+$#',$_GET['page']) ){
echo 'в переменной не число';
}else{
echo 'в переменной число';
}
|
| |
|
|
|
|
|
|
|
для: Sfinks
(04.11.2012 в 00:47)
| | А где есть список вот всех этих /d? | |
|
|
|
|
|
|
|
для: Maxam
(04.11.2012 в 01:21)
| | тут | |
|
|
|
|
|
|
|
для: Sfinks
(04.11.2012 в 00:47)
| | А
if(preg_match('#[0-9]+#ius',$_GET['page'])==false){ошибка}
| пойдёт? | |
|
|
|
|
|
|
|
для: Maxam
(04.11.2012 в 01:24)
| | Нет.
Во первых это выражение проверит просто есть ли в строке хотя бы одна цифра и вернет 1 даже на "вася2"
Во вторых зачем ius?
i -поиск производить регистронезависимо;
u -строка в utf8;
s -многострочный текст.
Вам для цифр что из этого надо?
Ну и в третих - зачем ==false, если функция preg_match() возвращает 0 или 1?
п.п.2,3 конечно не ошибки, пых это переварит. Но оно вам надо? | |
|
|
|
|
|
|
|
для: Sfinks
(04.11.2012 в 08:37)
| | Зачем при запросе номера страницы проверять посредством preg_match()? )
$n = (int)$_GET['page'] ? (int)$_GET['page'] : 1; | |
|
|
|
|
|
|
|
для: confirm
(04.11.2012 в 09:36)
| | А если завтра ТС понадобится проверить не номер страницы, а номер телефона? Он новую тему создаст? Тем более, что заголовок темы подразумевает, что ему нужно не только проверить большое число, но и использовать его неизмененным. | |
|
|
|
|
|
|
|
для: Sfinks
(04.11.2012 в 15:07)
| | Ну а кто спорит, что номер телефона надо проверять по шаблону, но зачем применять такую проверку там, где она ну просто не к месту, спрашивают же конкретно - о номере страницы, а вы его нагружаете никчемным. Вот и будет он втыкать это.
Ну вы же умный парень, ну зачем так. ) | |
|
|
|
|
|
|
|
для: confirm
(04.11.2012 в 15:34)
| | Я отвечаю опираясь на заголовок темы, предполагая, что ТС $_GET['page'] применил только для примера передачи данных, а не сменил тему.
Также он мог написать и $_GET['unique_not_autoincrement_sound_id_from_world_mega_collection'] =)
З.Ы.
Ну зато теперь, в результате нашей дискуссии ТС'у стало полностью понятно для каких чисел какую проверку применять :-D | |
|
|
|
|
|
|
|
для: Sfinks
(04.11.2012 в 23:37)
| | $_GET['page'] - да ну, и козе понятно чего просят. ) И именно об этом у него тема и РНР разделе.
Вот если бы он написал $_GET['phoe'], и получая при этом "Внучек мой телефон SN: 124 потом черточка потом...", вот тогда бы и шаблон с выдачей "Дедушка, попросите внучку..."
Я ему давал ссылку на раздел касающийся безопасности, и не раз повторял, чтобы он этот раздел изучал. А там и об экранировании , и о приведении типов... Значит он не внял этому, если он следует тому, что вы пишите, и мотает себе на ус, а это плохо. | |
|
|
|
|
|
|
|
для: Sfinks
(04.11.2012 в 08:37)
| | Функция preg_match() возвращает количество найденных соответствий. Это может быть 0 (совпадения не найдены) и 1, поскольку preg_match() прекращает свою работу после первого найденного совпадения
Я всегда расценивал 0 как false, а 1 как true. Поэтому и сравнивал так.
Кстати, проверил, и правда:
$_GET['page_number']='555';
$_GET['page_nonumber']='вася2';
if(preg_match('#[0-9]+#',$_GET['page_number'])==true){echo'1: Только числа<br>';}
if(preg_match('#[0-9]+#',$_GET['page_number'])==false){echo'2: Что-то кроме чисел<br>';}
if(preg_match('#[0-9]+#',$_GET['page_nonumber'])==true){echo'3: Только числа<br>';}
if(preg_match('#[0-9]+#',$_GET['page_nonumber'])==false){echo'4: Что-то кроме чисел<br>';}
| вывел:
1: Только числа
3: Только числа
|
Бесит уже.
P. S. Знаю, что вроде ^ может определять как только не. Вот только я видимо не так применяю. Я думал, что знак ^ нужно ставить перед [что-то-тут]. | |
|
|
|
|
|
|
|
для: Maxam
(05.11.2012 в 14:09)
| | Может так? :(
<?php
$_GET['page_nonumber']='вася2';
if(preg_match('#[^0-9]+#',$_GET['page_nonumber'])==true){echo'4: Что-то кроме чисел<br>';}
?>
|
Вроде вывел:
| |
|
|
|
|
|
|
|
для: Maxam
(05.11.2012 в 14:09)
| | >P. S. Знаю, что вроде ^ может определять как только не. Вот только я видимо не так применяю. Я думал, что знак ^ нужно ставить перед [что-то-тут].
Вы ссылку приведенную выше смотрели?
^ означает отрицание только в квадратных скобках. Вне их ^ означает начало строки. А $ - конец строки. Поэтому ^\d+$ означает "от начала до конца строки могут быть одна или более цифр" | |
|
|
|
|
|
|
|
для: Sfinks
(05.11.2012 в 16:52)
| | То есть я всё таки правильно теперь написал? | |
|
|
|
|
|
|
|
для: Maxam
(05.11.2012 в 17:30)
| | можно и так | |
|
|
|
|
|
|
|
для: Sfinks
(05.11.2012 в 18:44)
| | Спасибо.
P. S. Я знаю, что \d это цифры, мне 0-9 привычнее просто. | |
|
|
|
|
|
|
|
для: Maxam
(05.11.2012 в 21:40)
| | Некоторые диалекты регулярных выражений \d не понимают (это особенности диалекта Perl), а вот 0-9 все понимают. | |
|
|
|