|
|
|
|
|
для: Николай2357
(09.10.2010 в 15:58)
| | ясно, в принципе может быть это и правильно.
я то за собой заметил, что больше внимания уделяю читабельности кода, нежели экономии. например иногда у меня название переменной состоит из 10-15 символов и т.п. пока что на грабли из-за этого не напоролся, хотя и высоконагруженных систем не делал | |
|
|
|
|
|
|
|
для: psychomc
(08.10.2010 в 23:16)
| | По поводу функции поясню. Она используется единожды и только тогда, когда включена директива. А значит инициализировать её при выключенной нет смысла - лишний расход памяти. По этому определяется она в блоке if
А почему функция - там нужна рекурсия, так что это самый оптимальный вариант ИМХО
Другой вопрос, что в этом скрипте можно было бы и обойтись без рекурсии, но привычка делать масштабируемые программы дает знать) | |
|
|
|
|
|
|
|
для: Лена
(08.10.2010 в 13:36)
| | за моим постом стоит исключительно интерес в том, что вам понравилось в коде Николая. не расценивайте это как провокацию или что-то еще. я, бегло просмотрев код, не увидел в нем ничего особенного (это совсем не значит что код плохой - задача такая, хотя функция внутри if смотрится не очень, хоть может быть в этом случае это правильно, но читается как-то странновато), вот и хочу узнать что понравилось вам чтобы сделать выводы для себя. и всего то | |
|
|
|
|
|
|
|
для: psychomc
(08.10.2010 в 00:51)
| | Мне тоже просто интересно, что именно стоит за вашим вопросом? | |
|
|
|
|
|
|
|
для: Лена
(05.10.2010 в 21:18)
| | а что именно красиво?
просто интересно... | |
|
|
|
|
|
|
|
для: Лена
(06.10.2010 в 14:49)
| | >Ну это если уж совсем под микроскопом смотреть :)
Привычка просто. Ничего естественно я там не экономил))
>RFC требует
>http тут как бы по умолчанию идет...
тоже привычка. Trianon по рукам бил больно))) | |
|
|
|
|
|
|
|
для: Николай2357
(05.10.2010 в 21:34)
| | >Операция перезаписи легче конкатенации, если не ошибаюсь.
В смысле меньше времени и меньше памяти идет?
Если так вот подумать... По памяти, наверное, легче... Конкатенация присоединяет к предыдущему значению новое, т.е. к памяти, которую занимало предыдущее, добавляется новое значение, которое тоже занимает какую-то память.
Перезапись старое значение получается убивает, память освобождается и тратится только на новое. Во втором случае памяти будет заниматься меньше. Ну это если уж совсем под микроскопом смотреть :)
>я http:// в header`ах не пишу. Может, так правильнее...
>RFC требует
Ну если даже не указывать http:// , редирект не пойдет же по ftp или https протоколу?
http тут как бы по умолчанию идет... | |
|
|
|
|
|
|
|
для: Лена
(05.10.2010 в 21:18)
| | Почитайте еще раз про эти запросы. Там просто, сами поймете.
Перемудрил))) каюсь.
я http:// в header`ах не пишу. Может, так правильнее...
RFC требует
забыли . поставить.
Нет, не забыл. Операция перезаписи легче конкатенации, если не ошибаюсь.
Это не совсем понятно. Зачем вы заглушку ставите? Чтобы при строгом уровне неопред.индексы не выводило? Так можно ж выше определить...
Именно для того, чтобы выше не определять) Лень - двигатель прогресса.
Я не из предвзятости писала, я тоже сюда хожу учиться, некоторые моменты захотелось уточнить.
Я рад критике. Именно она и помогает незаскорузнуть и по новому глядеть на вещи.
Спасибо за оценку))) | |
|
|
|
|
|
|
|
для: Николай2357
(05.10.2010 в 20:29)
| | Красиво :)
> mysql_query('SET NAMES utf8');
> mysql_query('SET CHARACTER SET utf8');
> mysql_query('SET
COLLATION_CONNECTION="utf8_general_ci"');
Почитайте еще раз про эти запросы. Там просто, сами поймете.
>header('location: http://'. $_SERVER['HTTP_HOST']
я http:// в header`ах не пишу. Может, так правильнее...
>$solutation = "Результаты поиска";
забыли . поставить.
>@$_GET['id']
Это не совсем понятно. Зачем вы заглушку ставите? Чтобы при строгом уровне неопред.индексы не выводило? Так можно ж выше определить...
Я не из предвзятости писала, я тоже сюда хожу учиться, некоторые моменты захотелось уточнить.
А вообще вы молодец :) | |
|
|
|
|
|
|
| Условия задачи здесь
Два года назад я уже решал эту задачу. Страшно вспомнить))
Собственно она мне и дала путевку в жизнь. Хотелось бы узнать, далеко ли я за эти два года продвинулся.
Вот как я решил бы её сегодня:
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
/**
* Блок соединения с сервером БД
*/
include('config.php');
mysql_connect( MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD );
mysql_select_db(MYSQL_DATABASE);
mysql_query('SET NAMES utf8');
mysql_query('SET CHARACTER SET utf8');
mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"');
/**
* Функция борьбы с магическими кавычками
* @param $data mixed
* @return mixed
*/
if(get_magic_quotes_gpc())
{
function stripslashesDeep($data)
{
if(is_array($data))
$data = array_map("stripslashesDeep", $data);
else
$data = stripslashes($data);
return $data;
}
$_GET = stripslashesDeep($_GET);
$_POST = stripslashesDeep($_POST);
}
/**
* Блок удаления
*/
if(!empty($_GET['del']) && !empty($_GET['id']))
{
mysql_query("DELETE FROM `guests`
WHERE `id` = ". (int)$_GET['id']
);
header('location: http://'. $_SERVER['HTTP_HOST']
. $_SERVER['PHP_SELF']);
exit();
}
/**
* Блок регистрации нового посетителя
* и подсчета визитов
*/
if(!empty($_POST['ok']))
{
$guestname = @$_POST['guestname'];
if(trim($guestname) !== '')
{
mysql_query("INSERT INTO `guests`
SET `guestname` = '". mysql_real_escape_string($guestname) ."',
`visits` = 1
ON DUPLICATE KEY UPDATE
`visits` = `visits` + 1 "
)or die(mysql_error());
$id = mysql_insert_id();
header('location: http://'. $_SERVER['HTTP_HOST']
. $_SERVER['PHP_SELF'] .'?vis=1&id='. $id);
exit();
}
else
$error = 'Введите пожалуйста имя';
}
/**
* Блок вывода
*/
$solutation = '';
if(!empty($_GET['search']) && isset($_GET['guestname']))
{
$solutation = "Результаты поиска";
$where = "WHERE `guestname` = '". mysql_real_escape_string($_GET['guestname']) ."'";
}
else
$where = !empty($_GET['id']) ? "WHERE `id` = ". (int)$_GET['id'] : '';
$res = mysql_query("SELECT `id`, `guestname`, `visits`
FROM `guests` ". $where
);
if(mysql_num_rows($res) > 0)
{
$out = '';
$i = 0;
while($row = mysql_fetch_assoc($res))
{
$guestname = htmlspecialchars($row['guestname']);
if($row['id'] == @$_GET['id'] && !empty($_GET['vis']))
$solutation = "Привет, <b>". $guestname ."</b>"
. " ! Вы знаете, что в Вашем имени "
. mb_strlen($row['guestname'], 'utf-8') ." символов?";
$out .= " <tr>\n\t<td>". ++$i ."</td>\n"
. "\t<td><a href=\"?id=". $row['id'] ."\">". $guestname ."</a></td>\n"
. "\t<td>". $row['visits'] ."</td>\n"
. "\t<td><a href=\"?del=1&id=". $row['id'] ."\""
. "onclick=\"return confirm('". $guestname ."! "
. "Вы действительно хотите удалить себя из списка?')\""
. " >del</a></td>\n <tr>\n";
}
}
else
$out = '<tr><td colspan="4" > Ничего не найдено </td>';
?>
<html>
<body>
<?php echo $solutation ?>
<table width="20%" border="1" cellspacing="0" cellpadding="0">
<tr>
<th>№№</th>
<th>Посетитель</th>
<th>Визит</th>
<th>Х</th>
</tr>
<?php echo $out ?>
</table>
<strong style="color:#FF0000">
<?php echo !empty($error) ? $error : ' '; ?>
</strong>
<form action="" method="post">
<input name="guestname" type="text" />
<input name="ok" type="submit" value="Войти" />
</form>
<form action="" method="get">
<input name="guestname" type="text" />
<input name="search" type="submit" value="Найти" />
</form>
<a href="?">Показать всех</a>
</body>
</html>
|
Правда пришлось немного модифицировать таблицу (добавить уникальности))
На вс случай дамп:
CREATE TABLE `guests` (
`id` int(11) NOT NULL auto_increment,
`guestname` varchar(250) default NULL,
`visits` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `guestname` (`guestname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
Еще раз спасибо автору и организаторам конкурса. Я снова пережил незабываемые ошщущения. | |
|
|
|
|