Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 007 на задачу N 21
 
 автор: Eugene77   (28.06.2007 в 09:46)   письмо автору
 
 

<?php

// Решение задачи 21 | Список гостей | Eugene77|Решение предложено уже после публикации
// результатов конкурса. Оцените, пожалуйста! Подскажите ошибки!

function table(){
require_once('config.inc.php');
echo" <table>
<hr>На страничке были:</hr>
<tr><th>№</th><th>Nick name</th><th>посещений</th><th>удалить своё имя</th></tr>";
$q = "SELECT * FROM guests";
$all = mysql_query($q) or die("Error in request: $q ".mysql_error());
for($i=1; $row = mysql_fetch_assoc($all); $i++){
$id = $row['id'];
$name = $row['guestname'];
$visits = $row['visits'];
$url_name = htmlspecialchars(rawurlencode($name));
$brouser_name = htmlspecialchars($name);
$js_name = htmlspecialchars(mysql_escape_string($name));

echo " <tr>
<td> $i </td>
<td> <a href=\"?name=$url_name\"> $brouser_name </a> </td>
<td> $visits </td>
<td> <a href=\"#\" onClick = \"del('$js_name', $id)\" > удалить </a> </td> </tr>";
}
echo" </table>";
}
function remove($id){
require_once('config.inc.php');
$host = $_SERVER['HTTP_HOST'];
$self = $_SERVER['PHP_SELF'];
$q = "SELECT guestname FROM guests WHERE id = $id";
$handle = mysql_query($q) or die("Error in request: $q ".mysql_error());
if(($num = mysql_num_rows($handle))<1) notdel($name);
else
$name = mysql_result($handle,'guestname');
$url_name = (rawurlencode($name));
$q = "DELETE FROM guests WHERE id = $id";
$handle = mysql_query($q) or die("Error in request: $q ".mysql_error());
header("Location: http://$host$self?del=$url_name&redel=1");
exit("Загрузка обновлённой таблицы c удалённым посетителем");
}
function delnotify($name){
$html_name = htmlspecialchars($name);
echo "По вашей просьбе ваш ник $html_name успешно удалён из списка гостей";
}
function notdel($name){
$html_name = htmlspecialchars($name);
echo "Посетителя $html_name в списке гостей не оказалось";
table();
}
function top(){
?>
<html><head>
<META HTTP-EQUIV="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<title>Таблица гостей</title>
<style>
table { border:double }
td, th {border: double }
body {background-color: #997777}
</style>
<script type=text/javascript>
var ppp = escape('&');
function del(name, id){
window.location.href = confirm("Вы уверены, что не хотите оставить своё имя "+name+" в таблице гостей ?")
? '?remove='+id+''+ppp+'redel=0' : document.location.href;
}
</script>
</head><body>
<?php
}
function new_visit(){
?> <form method=post action=?reinput=0 >
Моё имя: <input name=name />
<input type=submit value=Запишите />
</form><hr>
<?php
}
function register($name){
require_once('config.inc.php');
$esc_name = "'".mysql_escape_string($name)."'";
$url_name = rawurlencode($name);
$q = "SELECT * FROM guests WHERE guestname = $esc_name";
$handle = mysql_query($q) or die("Error in request: $q ".mysql_error());
if(($num = mysql_num_rows($handle))>1) die ("In request of guest table $q $num identical names found");
else {
if($num == 1) $q = "UPDATE guests SET visits=visits+1 WHERE id=".mysql_result($handle, 0);
if($num == 0) $q = "INSERT INTO guests (guestname, visits) VALUES ($esc_name, 1)";
}
$handle = mysql_query($q) or die("Error in request: $q ".mysql_error());
$q = "SELECT visits FROM guests WHERE guestname = $esc_name";
$handle = mysql_query($q) or die("Error in request: $q ".mysql_error());
$host = $_SERVER['HTTP_HOST'];
$self = $_SERVER['PHP_SELF'];
header("Location: http://$host$self?regconfirm=$url_name&reinput=1");
exit("Загрузка обновлённой таблицы c добавленным посетителем");
}

function registered($name){
require_once('config.inc.php');
$esc_name = "'".mysql_escape_string($name)."'";
$q = "SELECT * FROM guests WHERE guestname = $esc_name";
$handle = mysql_query($q) or die("Error in request: $q ".mysql_error());
$row = mysql_fetch_assoc($handle);
$visits = $row['visits'];
$html_name = htmlspecialchars($name);
$length = strlen($name);
echo"Здравствуйте, $html_name ! </br>";
echo" В вашем имени $length символов. </br>";
echo" Вы зашли к нам $visits раз. </br>";
}

function search($name){
require_once('config.inc.php');
$esc_name = "'".mysql_escape_string($name)."'";
$q = "SELECT * FROM guests WHERE guestname = $esc_name";
$handle = mysql_query($q) or die("Error in request: $q ".mysql_error());
if(mysql_num_rows($handle) == 0) echo"Такого посетителя в списке не нашлось.";
else {$row = mysql_fetch_assoc($handle);
$id = $row['id'];
$name = $row['guestname'];
$visits = $row['visits'];
$url_name = htmlspecialchars(rawurlencode($name));
$brouser_name = htmlspecialchars($name);
$js_name = htmlspecialchars(mysql_escape_string($name));

echo" <table>
<hr>Вы искали:</hr>
<tr><th>Nick name</th><th>посещений</th><th>удалить своё имя</th></tr>";
echo " <tr>
<td> <a href=\"?name=$url_name\"> $brouser_name </a> </td>
<td> $visits </td>
<td> <a href=\"#\" onClick = \"del('$js_name', $id)\" > убрать </a> </td> </tr>";
echo" </table>";
}
}
function buttom(){
?>
<hr>
<form method=get action=? >
Поищите ка мне: <input name=name />
<input type=submit value=Ау! />
</form>
<hr>
<?php
new_visit();
?>
<hr>
<a href=?newvisit=2> Войти заново</a>
<a href=?>Список всех посещений</a>
<hr>
<?php
}
function unmq($arg){
return $arg === null ? null : (get_magic_quotes_gpc()? stripslashes($arg): $arg);
}
// Начало программы

if(isset($_GET['remove']) && $_GET['redel'] != 1) remove(intval($_GET['remove'])); // Удаление из таблицы гостей

if(isset($_POST['name']) && $_GET['reinput'] == 0) register(trim(unmq($_POST['name']))); // Ввод нового имени в базу
else table();
top();
if(isset($_GET['reinput']) && $_GET['reinput'] == 1)registered(trim(unmq($_GET['regconfirm']))); // Вывод на экран нового имени
if($_GET['redel'] == 1) delnotify(trim(unmq(($_GET['del'])))); // Извещение что посетитеь успешно удалён

if(isset($_GET['name']) && !isset($_GET['reinput']) )search(unmq($_GET['name'])); // ..по клику на одном из посетителей
if(isset($_GET['notdel'])) notdel(unmq($_GET['del'])); // Извещение что посетителя в таблице нет

$_GET['remove']=NULL;$_GET['all']=NULL;$_GET['name']=NULL;$_GET['del']=NULL;
buttom();
?>

   
 
 автор: cheops   (28.06.2007 в 10:24)   письмо автору
 
   для: Eugene77   (28.06.2007 в 09:46)
 

Да, решение справляется с требованиями задачи, однако, код очень мудрёный, даже если абстрагироваться от отсуствующих отступов - очень много функций и хитрых конструкций вроде
<?php
return $arg === null null : (get_magic_quotes_gpc()? stripslashes($arg): $arg);
?>

Это не очень хорошо, если ваш код будет сопровождать другой программист - он потратит много времени на разбор.

PS Собственно больше ничего вопиющего не увидел :)))

   
 
 автор: Trianon   (28.06.2007 в 10:33)   письмо автору
 
   для: cheops   (28.06.2007 в 10:24)
 

Я понимаю - применить идеи...
Но не идею повторного искользования опубликованного здесь же кода?

>return $arg === null ? null : (get_magic_quotes_gpc()? stripslashes($arg): $arg);

Эта функция один-в-один взята из решения 005.
Так что это скорее камень в мой огород. Был бы. Но в моем огороде над этой функцией был коментарий.

Вообще, я ясно вижу, что это далеко не единственный "помытый" у меня фрагмент.
Откровенно говоря, самому мне трудно (даже невозможно) объективно оценивать, насколько явно код решения 005 был применен в 007.
Но мне показалось, что (для учебной задачи, а не в процессе рефакторинга проекта) уровень копипаста - за гранью фола.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования