Подскажите как можно сделать лучше

Статус
В этой теме нельзя размещать новые ответы.

1d37r

Читатель
Заблокирован
Регистрация
16 Сен 2007
Сообщения
287
Реакции
62
  • Автор темы
  • Заблокирован
  • #1
Потратил два часа на этот код:
PHP:
<?
echo '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
';
@mysql_connect('localhost','root','');
@mysql_select_db('kidala');
@mysql_query("SET NAMES cp1251");
$_GET['page'] == 1;
if(!empty($_POST['id']) && !empty($_POST['name']) && !empty($_POST['icq']) && !empty($_POST['sub'])) { 
	$id = $_POST['id'];
	$name = $_POST['name'];
	$icq = $_POST['icq'];
	mysql_query("UPDATE black SET name='$name', icq='$icq' WHERE id=$id") ; 
		echo "Данные отредактированы<br>";
		echo "<a href=\"$_SERVER[SCRIPT_NAME]?id=$id\">Назад</a> | <a href=\"$_SERVER[SCRIPT_NAME]\">На главную</a>"; 
		die();
	}
$result = mysql_query("SELECT * FROM black WHERE name!='' ORDER BY id");
for($res=array();$row=mysql_fetch_assoc($result);$res[]=$row);
$lim = count($res) / 5 + 1;
echo("<a href=\"$_SERVER[SCRIPT_NAME]?page=1\">Посмотреть Блэк-список</a><br>");
if(!empty($_GET['page'])) {
	for($p=1;$p<$lim;$p++) {
		echo "<a href=\"".$_SERVER[SCRIPT_NAME]."?page=".$p."\"> [$p] </a>
		";
		} }
echo "<br>";
for($p=1;$p<$lim;$p++) {
	if(empty($u)) { $u = 4; }
	if(empty($a)) { $a = 0; }
	for($i=$a;$i<count($res);$i++) {
		$id = $res[$i][id];
		if($_GET['id'] == $id) { 
			echo "<form method=\"POST\" action=\"$_SERVER[SCRIPT_NAME]\">
				Имя: <input type=\"text\" name=\"name\" value=\"".$res[$i][name]."\"><br>
				ICQ: <input type=\"text\" name=\"icq\" value=\"".$res[$i][icq]."\"><br>
				<input type=\"hidden\" name=\"id\" value=\"".$res[$i][id]."\">
				<input type=\"submit\" name=\"sub\" value=\"Редактировать\">
				"; die();}
		if($_GET['page'] == $p) {
			echo "
			".$res[$i][id].". <a href=\"$_SERVER[SCRIPT_NAME]?id=".$res[$i][id]."\">".$res[$i][name]."</a><br>"; 
			}
		if($i == $u) { break; }
		}
	$u = $u + 5;
	$a = $a + 5;
	}
?>
<p>
<form method="POST" action="<? echo $_SERVER[SCRIPT_NAME];?>">
<input type="text" name="search">
<input type="submit" value="Найти">
</form>
</p>
<?
$search = $_POST['search'];
if(!empty($search)) {
	$search = mysql_query("SELECT * FROM black WHERE name='$search'");
	$search = mysql_fetch_assoc($search);
	if($search[id] == 0) { echo "Нет такого"; die(); }
	echo "<b> Имя: ".$search[name]." <br> ICQ: ".$search[icq]; }
?>
И вдруг понял, что я занимаюсь херней и данный код будет работать очень медленно.... Объясните как можно его оптимизировать, и вообще как дальше быть :/
p.s. на счет безопасности кода, точнее его не безопасности говорить не надо, так как для меня в этом коде это не принципиально.
 
Не совсем понял зачем редактирование, отображение, поиск и т.д. делать в одном файле?
Не проще ли разбить по файлам всё. А коннект к базе вообще вынести в отдельный файл.
Тебе самому тогда будет и понятнее и легче работать.
 
Потратил два часа на этот код:
PHP:
<?
echo '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
';
@mysql_connect('localhost','root','');
@mysql_select_db('kidala');
@mysql_query("SET NAMES cp1251");
$_GET['page'] == 1;
if(!empty($_POST['id']) && !empty($_POST['name']) && !empty($_POST['icq']) && !empty($_POST['sub'])) { 
	$id = $_POST['id'];
	$name = $_POST['name'];
	$icq = $_POST['icq'];
	mysql_query("UPDATE black SET name='$name', icq='$icq' WHERE id=$id") ; 
		echo "Данные отредактированы<br>";
		echo "<a href=\"$_SERVER[SCRIPT_NAME]?id=$id\">Назад</a> | <a href=\"$_SERVER[SCRIPT_NAME]\">На главную</a>"; 
		die();
	}
$result = mysql_query("SELECT * FROM black WHERE name!='' ORDER BY id");
for($res=array();$row=mysql_fetch_assoc($result);$res[]=$row);
$lim = count($res) / 5 + 1;
echo("<a href=\"$_SERVER[SCRIPT_NAME]?page=1\">Посмотреть Блэк-список</a><br>");
if(!empty($_GET['page'])) {
	for($p=1;$p<$lim;$p++) {
		echo "<a href=\"".$_SERVER[SCRIPT_NAME]."?page=".$p."\"> [$p] </a>
		";
		} }
echo "<br>";
for($p=1;$p<$lim;$p++) {
	if(empty($u)) { $u = 4; }
	if(empty($a)) { $a = 0; }
	for($i=$a;$i<count($res);$i++) {
		$id = $res[$i][id];
		if($_GET['id'] == $id) { 
			echo "<form method=\"POST\" action=\"$_SERVER[SCRIPT_NAME]\">
				Имя: <input type=\"text\" name=\"name\" value=\"".$res[$i][name]."\"><br>
				ICQ: <input type=\"text\" name=\"icq\" value=\"".$res[$i][icq]."\"><br>
				<input type=\"hidden\" name=\"id\" value=\"".$res[$i][id]."\">
				<input type=\"submit\" name=\"sub\" value=\"Редактировать\">
				"; die();}
		if($_GET['page'] == $p) {
			echo "
			".$res[$i][id].". <a href=\"$_SERVER[SCRIPT_NAME]?id=".$res[$i][id]."\">".$res[$i][name]."</a><br>"; 
			}
		if($i == $u) { break; }
		}
	$u = $u + 5;
	$a = $a + 5;
	}
?>
<p>
<form method="POST" action="<? echo $_SERVER[SCRIPT_NAME];?>">
<input type="text" name="search">
<input type="submit" value="Найти">
</form>
</p>
<?
$search = $_POST['search'];
if(!empty($search)) {
	$search = mysql_query("SELECT * FROM black WHERE name='$search'");
	$search = mysql_fetch_assoc($search);
	if($search[id] == 0) { echo "Нет такого"; die(); }
	echo "<b> Имя: ".$search[name]." <br> ICQ: ".$search[icq]; }
?>
И вдруг понял, что я занимаюсь херней и данный код будет работать очень медленно.... Объясните как можно его оптимизировать, и вообще как дальше быть :/
p.s. на счет безопасности кода, точнее его не безопасности говорить не надо, так как для меня в этом коде это не принципиально.

SELECT * FROM
выбирайте конкретные поля
обработайте все входные переменные....типа...
$id = isset($_POST['id']) ? intval($_POST['id']) : NULL;

if($search[id] == 0) { echo "Нет такого"; die(); }
if(!$search) die('Нет такого....');

value=\"'. htmlspecialchars($res[$i][icq]).'\"><br/>

определите переменные....
if(empty($u)) { $u = 4; }
$u = empty($u) ? 4 : NULL ;

Ну и т.д и т.п....
 
  • Автор темы
  • Заблокирован
  • #4
а что косается $_GET можно ли как нибудь посиматичнее это сделать в классе например?
 
а что косается $_GET можно ли как нибудь посиматичнее это сделать в классе например?
Это как?
И главное, зачем?
 
зачем? просто для красоты
Лучшее - враг хорошего :D
Приведи конкретный пример, где тебе хочется красивее, в той каше наверху копаться нет никакого вдохновления.
 
  • Автор темы
  • Заблокирован
  • #7
вот вот, в точку!!11
как мне сделать из этой каши, удобочитаемый срипт, на условии что мне не охото его разбивать по разным файлам
 
Запросы из базы попробуй по другому перебирать:
PHP:
$res=mysql_query('SELECT * FROM table');
while($t=mysql_fetch_assoc($res)){
 echo $t['id'].' - '.$t['title'];
}
где $t['id'] - id это название колонки в таблице. Это очень удобно использовать.

Что касается читабельности это большая культура, которая приходит со временем. Я кстати заметил когда пишешь очень большие куски кода но структурированые, давольно все элегантно и просто получается.
 
вот вот, в точку!!11
как мне сделать из этой каши, удобочитаемый срипт, на условии что мне не охото его разбивать по разным файлам

Могу посоветовать использовать шаблонизатор. В Вашем случае, как я разобрался, достаточно будет пассивных шаблонов {:)} Да-да, бывают и активные. Это где свой несложный язык, возможность, например, вставлять в шаблоне циклы. Типа свой язык описания шаблонов.
А пассивный шаблон несложно реализовать самому. Сначала в вашем скрипте завести переменные пхп, присвоить им что нужно. Данные взять из субд, формы и т.п. Создать файлик pat.php, который фактически будет содержать html, разработать в нем диз. А в тем местах где нужно подставлять значения, вставить <?=$var;?>, где $var - переменная скрипта. Затем в конце Вашего скрипта добавить include "pat.php"
Идея понятна?
 
PHP:
$res=mysql_query('SELECT * FROM table');
while($t=mysql_fetch_assoc($res)){
 echo $t['id'].' - '.$t['title'];
}
где $t['id'] - id это название колонки в таблице. Это очень удобно использовать.

удобнее и практичнее этого:
PHP:
$res=mysql_query('SELECT * FROM table');
while($t=mysql_fetch_assoc($res)){
 echo "<pre>",print_r($t),"</pre>";
}
нет ничего!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху