|
|
|
|
|
для: Лена
(06.10.2010 в 14:46)
| | >Ну я как бы с самого начала подразумевала, что кодировка utf...
Если подразумевать с самого начала, то нужно ставить кодировку для всего.
<?
mb_internal_encoding("UTF-8");
|
я не нашел... Может в конфиге.
Без этого неправильно подсчитает. | |
|
|
|
|
|
|
|
для: Николай2357
(05.10.2010 в 22:46)
| | >Вот это
<?
> $nameLenth = mb_strlen($_POST['login']);
| кирилицу неправильно посчитает.
Ну я как бы с самого начала подразумевала, что кодировка utf...
>echo createEndings(2, 'символ', 'символа', 'символов');
echo createEndings(1112, 'символ', 'символа', 'символов');
:)
за функцию спасибо. | |
|
|
|
|
|
|
|
для: Лена
(20.07.2010 в 17:11)
| | Вот это
<?
$nameLenth = mb_strlen($_POST['login']);
| кирилицу неправильно посчитает.
С окончаниями я раньше тоже мудрил... Сейчас позабыл совсем))
Вот, функцию решил подарить... Может пригодится. Довольно полезная штука.
<?
function createEndings($num, $sihgl, $even, $noeven)
{
$num = abs($num) % 100;
$ten = $num % 10;
if($num > 10 && $num < 20)
return $num .' '. $noeven;
if($ten > 1 && $ten < 5)
return $num .' '.$even;
if($ten == 1)
return $num .' '.$sihgl;
return $num .' '.$noeven;
}
echo createEndings(2, 'символ', 'символа', 'символов');
|
| |
|
|
|
|
|
|
|
для: Trianon
(19.07.2010 в 17:09)
| | Посмотрела решения других.
004 - красивый код.
006 тоже понравилась организация структуры, там же тоже защита от F5 через сессию, только
сессионную переменную, по которой проверяют, через скрытое поле формы передают.
И код nneadekvat`а понравился, как идет переключение с ветки на ветку.
В вашем решении задачи понравилось применение LENGTH в запросе для определения длины имени. Это мне даже в голову не пришло :) В моем случае это было бы CHAR_LENGTH().
Не понятно, зачем если мы кладем в базу числа и после их вытягиваем надо пропускать через
intval.
$visits = intval($row['visits']);
$len = intval($row['len']);
И ошибку у себя увидела: если список посетителей пустой, у меня нет вывода соответствующего сообщения. | |
|
|
|
|
|
|
|
для: Лена
(19.07.2010 в 17:03)
| | Очевидно, полностью решенной задачу можно считать лишь приложив к ней .htaccess со строкой вроде php_value magic_quotes_gpc off
В то время, когда я придумывал эту задачу, магические кавычки расценивались деструктивными совсем не всеми.
И хотя сейчас положение слегка улучшается, до абсолютной идилии у хостеров ой как далеко. | |
|
|
|
|
|
|
|
для: Trianon
(19.07.2010 в 15:06)
| | Спасибо! Теперь все понятно :)
Как обычно, полученные от вас знания не всегда найдешь в такой краткой и понятной форме.
Получается, задача решилась и теперь можно посмотреть, как ее делали другие, оценить и выбрать оптимальный вариант :) | |
|
|
|
|
|
|
|
для: Лена
(19.07.2010 в 12:02)
| | >>1. rawurldecode наверняка ошибочен.
>
>Почему, не пойму.
>
>Как я понимаю, при отправке данных $_GET-методом через форму данные кодируются браузером
> без применения rawurlencode и автоматом после декодируются php.
>Если мы отправляем данные без формы, их нужно url-кодировать, а после декодировать, что я и сделала.
Давайте отличать отправку запроса браузером (по ссылке ли, или из формы) и процесс получения, обработки этого запроса и соответствующую выдачу отклика сервером.
Отправка:
Браузер может отправлять GET-запрос на основании данных формы (в этом случае он (браузер) сам составляет целевой URL и сам занимается URL-кодированием) , может отправить его по ссылке (в этом случае URL-кодированием правильной ссылки придется заняться серверу в момент формирования текста ссылки), может отправить его из-за ввода URL руками пользователя (в этом случае за правильное кодирование будет ответственен пользователь... хоть современные браузеры и помогают ему в этом процессе - при наборе нелатинских букв/цифр, они принудительно URL-кодируют таковые.)
Прием и обработка.
Сервер не знает, кто явился инициатором отправки, да ему и не надо.
В QUERY_STRING апач разместит принятый сырой (недекодированный) хвостик URL.
PHP разобьет его на переменные, и декодивав их имена и значения, разместит их в $_GET и $_REQUEST.
Дальше скрипт сделает то, что указал программист. Но в $_GET данные будут уже декодированы. а в $_SERVER['QUERY_STRING'] - еще не декодированы. Независимо от источника данных - поскольку он серверу неизвестен. | |
|
|
|
|
|
|
|
для: Trianon
(19.07.2010 в 00:27)
| | >Собственно написать header("Location: .."); exit(); не проблема.
>Проблема обычно передать скрипту отклика точку исполнения запроса.
>Вы это сделали (или попытались сделать) путем передачи параметра ?res=....
Изменила, поставила условие, чтобы не показывалась пустая форма, теперь все работает:
<?php
//форма входа
if((!isset($_POST['enter']) || $errors) && !isset($_GET['res'])){
//вывод формы и, если есть, ошибок
}
|
>1. rawurldecode наверняка ошибочен.
Почему, не пойму.
Как я понимаю, при отправке данных $_GET-методом через форму данные кодируются браузером
без применения rawurlencode и автоматом после декодируются php.
Если мы отправляем данные без формы, их нужно url-кодировать, а после декодировать, что я и сделала.
>2. после выброса поля заголовка Location: исполнение скрипта следует останавливать. Обычно.
>3. Надо понимать, что редирект выполняется нетолько в ветви INSERT но и в ветви UPDATE также.
Да, у меня так и было, я просто не весь кусок показала:
<?php
if(empty($errors)){
$_POST['login'] = trim($_POST['login']);
//проверяем, есть ли уже такой пользователь в списке
$q = "SELECT * FROM guests
WHERE guestname ='" . mysql_real_escape_string($_POST['login']) . "'";
$r = mysql_query($q);
if(!$r)exit("Error in " . $q . mysql_error());
if(mysql_num_rows($r)>0){
//пользователь есть в списке
$upd ="UPDATE guests SET visits=visits+1
WHERE guestname ='" . mysql_real_escape_string($_POST['login']) . "'";
$r_upd = mysql_query($upd);
if(!$r_upd) exit("Error in " . $upd . mysql_error());
}else{
//пользователь зашел первый раз
$ins ="INSERT INTO guests(guestname,visits)
VALUES('" . mysql_real_escape_string($_POST['login']) . "',1)";
$r_upd = mysql_query($ins);
if(!$r_upd)exit("Error in " . $ins . mysql_error());
}
//защита от F5
header("Location:" . $_SERVER['PHP_SELF'] . "?res=" . rawurlencode($_POST['login']));
exit();
}
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(18.07.2010 в 18:46)
| | >Что касается редиректа. Я его пробовала, мне не понравилось, что возвращает пустую форму.
Нет уж, извините. Как это пустую форму?
Он должен вернуть ту самую фразу насчет длины логина.
Ну или собщение об ошибке, если что-то пошло не так.
Собственно написать header("Location: .."); exit(); не проблема.
Проблема обычно передать скрипту отклика точку исполнения запроса.
Вы это сделали (или попытались сделать) путем передачи параметра ?res=....
1. rawurldecode наверняка ошибочен.
2. после выброса поля заголовка Location: исполнение скрипта следует останавливать. Обычно.
3. Надо понимать, что редирект выполняется нетолько в ветви INSERT но и в ветви UPDATE также. | |
|
|
|
|
|
|
|
для: Лена
(17.07.2010 в 23:55)
| | если не секрет, зачем здесь вот это:
<?php
// .......
if($errors){
foreach($errors as $errKey=>$errVal){
if($errVal =='')
unset($errors[$errKey]);
}
}
// .....
|
разве в этой программе в массив $errors может попасть элемент с пустым значением? | |
|
|
|
|