Оптимизировать код

Renny

Новичок
Оптимизировать код

Может кто подскажет как оптимизировать код ( я недавно начал изучать PHP), первый скрипт данные выдает, а второй принимает и обрабатывает :
PHP:
<FORM ACTION="form1.php" method="get">
<?php
$result=mysql_query("select * from $tab") or die(mysql_error());
while($row=mysql_fetch_row($result)) 
echo '<tr>
<td>'.$row[1].'</td>
<td>'.$row[2].'</td>
<td>'.$row[3].'</td>
<td>'.$row[4].'</td>
<td>'.$row[0].'</td>
<td>'.'<INPUT TYPE="checkbox" NAME="a['.$row[0].']"></td>
	</tr>';
?>
<tr><td colspan="6" align="right"><input type="submit" value="Стереть" onClick="return confirm('Внимание! Выделенные строки будут удалены!')"></td></tr>
</FORM>

<?php
//если переменная такая то существует, то выполнить стирание такой то строки
if (is_array(@$a))
{
	foreach($a as $k=>$v)
	{
	if ($v=="on")
		{
		$result = mysql_query("delete from $tab where id=$k");
		};
	echo 'Строка '."$k".' стерта<br />';	

	}
}
?>
 

SiMM

Новичок
А чего и зачем тут оптимизировать? Разве что удалять одним запросом - 'DELETE FROM '.$tab.' WHERE id IN('.[m]implode[/m](',',[m]array_keys[/m]($a,'on')).')';

До кучи - думать над PHP FAQ: Не передаются переменные!!!, и, ИМХО, гораздо правильнее использовать [m]mysql_fetch_assoc[/m]
 

Renny

Новичок
Да просто это мой первый проект такого уровня, вдруг что то более оптимально сделать можно, а так то все работает.
 

voodoo

Новичок
а $tab откуда берется? а что будет если я скрипт вызову с
a[1 or id>0]=on ?
 

Renny

Новичок
Originally posted by Renny
Да просто это мой первый проект такого уровня, вдруг что то более оптимально сделать можно, а так то все работает.
$tab Подключается include-ом, а по поводу второго ты намекаешь на возможность инъективной атаки?
 

SiMM

Новичок
Автор оригинала: Renny
Да просто это мой первый проект такого уровня
Тогда в обязательном порядке прочесть PHP FAQ и сделать соответствующие выводы (про глобалсы, слэши, кавычки, MySQL ...)
 

Renny

Новичок
Тогда почему вот так работает
PHP:
$x=$_GET['name'];
@$q = "INSERT INTO $tab VALUES('','$x')";$result = mysql_query($q);
, а так не работает скрипт?
PHP:
@$q = "INSERT INTO $tab VALUES('','$_GET['name']')";$result = mysql_query($q);
 

SiMM

Новичок
Renny, ты не умеешь читать? Прочти моё предыдущее сообщение, выполни указанные там инструкции и забудь о существовании символа @ в PHP раз и навсегда - пока ты новичёк - этого символа в PHP нет, удали его к чертям собачьим и никогда больше не используй - PHP сам тебе скажет, почему так не работает.
PS: и вообще делать INSERT подобным образом - ИМХО, ставить "потенциальные" грабли - не ленись указывать названия полей, которые ты INSERT'ишь.
 

Renny

Новичок
Originally posted by SiMM
Renny, ты не умеешь читать? Прочти моё предыдущее сообщение, выполни указанные там инструкции и забудь о существовании символа @ в PHP раз и навсегда - пока ты новичёк - этого символа в PHP нет, удали его к чертям собачьим и никогда больше не используй - PHP сам тебе скажет, почему так не работает.
PS: и вообще делать INSERT подобным образом - ИМХО, ставить "потенциальные" грабли - не ленись указывать названия полей, которые ты INSERT'ишь.
Так в том то и дело что я читал, написал как там сказано. А @ я поставил уже не помню почему, но все же убрал.
А вот пример из Фака:
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";
Чем он от моего отличается?

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in
а вот такую ошибку он выдает.

-~{}~ 19.10.04 18:14:

Насколько я понял он должен вместо $_GET[name], подставить значение переменной, а он в запросе этого не делает, почему?
 

Screjet

Новичок
Не нужно ничего оптимизоровать.
Просто работай, изучай доки, примеры других работ. Опыт придет со временем.
 

Renny

Новичок
Originally posted by Фанат
PHP:
<?
$q = "INSERT INTO $tab VALUES('','".$_GET['name']."')";
$result = mysql_query($q);
?>

Спасибо большое, так я уже пробовал, только про конкатенацию совсем забыл (точками объеденить).
 
Сверху