если кто может подредакируйте мои перлы )).
Защиты пока никакой и на оптимизацию кода не претендую (хотя знаю. что потенциала у скрипта масса) и можно доводить и доводить до совершенства.
Вот например мой поиск. Интерполяется элементов массива не лучшая, но зато читаемая ))
$query="(SELECT * FROM groups WHERE NAME LIKE '%".strtoupper($_POST['iskat'])."%') UNION ALL (SELECT * FROM groups WHERE GENRE LIKE '%".strtoupper($_POST['iskat'])."%') ";
$result = mysql_query($query) or die("Запрос ошибочный");
echo "<h2>Your results of search</h2><br><br>";
echo "<table border=3>";
while ($row = mysql_fetch_assoc($result)) {
echo "<tr>";
echo"
<td><a href='albums/$row[NAME].html'>$row[NAME]</a></td>
<td><a href='style/$row[GENRE].html'>$row[GENRE]</a></td>
<td><a href='history/$row[NAME].html'>ABOUT $row[NAME]</a></td>";
echo "</tr>";
}
echo "</table>";
$n= mysql_num_rows($result);
mysql_free_result($result);
if($n>0)
{
echo "<br><br><h2><a href='index.php'>BACK HOME</a></h2>";
}
else
{
echo "<br><br>Sorry<br><br>";
echo "<h2><a href='index.php'>BACK HOME</a></h2>";
Вот также проста выборка на одной из страниц моего сайта
Код:
$sql = "SELECT * FROM groups WHERE GENRE = '$page'";
$data = mysql_query($sql);
echo "<h1>$page BANDS</h1>";
echo "<table border=3>";
echo "<tr>
<th>CDs & ALBUMS</th><th>HISTORY</th></tr>";
while($row=mysql_fetch_assoc($data)) {
echo "<tr>";
echo "
<td><a href='../albums/$row[NAME].html'>$row[NAME]</a></td>
<td><a href='../history/$row[NAME].html'>HISTORY OF $row[NAME]</a></td>";
echo "</tr>";
}
echo "</table>";
Ну и например добавление
Код:
$NAME=$_POST['NAME'];
$GENRE=$_POST['GENRE'];
$TEXT=$_POST['TEXT'];
$HIDE=$_POST['HIDE'];
/* составить запрос для вставки информации о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES('ID','$NAME','$GENRE', '$TEXT','PRICE', '$HIDE','ABOUT','ATRIKLES')";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());
echo "Информация о вас занесена в базу данных.";
/* Закрыть соединение */
mysql_close();
?>
<br>
<br>
<br>
<a href="add.php">Back Home</a>
Очень прошу ткните во все косяки носом ! Обругайте ! И покажите как правильно ! )
Спустя 9 минут, 16 секунд (1.02.2011 - 12:14) linker написал(а):
1. Самая главная ошибка - не проверяем данные в $_POST и пихаем их как есть в запросы.
2. Значения атрибутов в html-элементах (тэгах) обрамляются в двойные кавычки.
4. В ассоциативном массиве, при доступе к элементу по ключу, название ключа ТРЕБУЕТСЯ заключать в кавычки $row['NAME']
5. $row['NAME'] и $row['name'] будут указывать на разные элементы массива, внимательнее.
6. Много echo там где можно обойтись и одним.
Вкратце.
2. Значения атрибутов в html-элементах (тэгах) обрамляются в двойные кавычки.
<img src="image.jpg"> или <div id="1" class="myclass">3.
echo '<td><a href="../albums/' . $row['NAME'] . '.html">' . $row['NAME'] . '</a></td>';или так
echo '<td><a href="../albums/', $row['NAME'], '.html">', $row['NAME'], '</a></td>';
4. В ассоциативном массиве, при доступе к элементу по ключу, название ключа ТРЕБУЕТСЯ заключать в кавычки $row['NAME']
5. $row['NAME'] и $row['name'] будут указывать на разные элементы массива, внимательнее.
6. Много echo там где можно обойтись и одним.
Вкратце.
Спустя 9 минут, 56 секунд (1.02.2011 - 12:24) alex12060 написал(а):
mysql_real_escape_string() - самое главное при выборке и записи в БД.
Спустя 2 минуты, 31 секунда (1.02.2011 - 12:27) alex12060 написал(а):
$NAME=$_POST['NAME'];
$GENRE=$_POST['GENRE'];
$TEXT=$_POST['TEXT'];
$HIDE=$_POST['HIDE'];
Я туда такого понапихасть могу, ты же йокнишься потом)
Да даже если без взлома, то я могу пошалить вот так:
Вводя имя артиста, напишу:
<script>for(i=1; i<1000; i++) alert('Ты му**к!!!');</script>
И все, кто не зайдет на твой сайт, будет знать, кто он на самом деле)
Спустя 14 минут, 13 секунд (1.02.2011 - 12:41) dima4321 написал(а):
Цитата (linker @ 1.02.2011 - 09:14) |
1. Самая главная ошибка - не проверяем данные в $_POST и пихаем их как есть в запросы. 2. Значения атрибутов в html-элементах (тэгах) обрамляются в двойные кавычки. <img src="image.jpg"> или <div id="1" class="myclass">3. echo '<td><a href="../albums/' . $row['NAME'] . '.html">' . $row['NAME'] . '</a></td>';или так echo '<td><a href="../albums/', $row['NAME'], '.html">', $row['NAME'], '</a></td>'; 4. В ассоциативном массиве, при доступе к элементу по ключу, название ключа ТРЕБУЕТСЯ заключать в кавычки $row['NAME'] 5. $row['NAME'] и $row['name'] будут указывать на разные элементы массива, внимательнее. 6. Много echo там где можно обойтись и одним. Вкратце. |
linker Большое спасибо. Вопросы остались ))
2. Чем криминально обрамлять атрибуты html тегов в ордиарные кавычки.
3. и 4. Твой вывод массива оптимальный. Не спорю. Но ведь в моем случае интерполяции массива в строки четко написано , что кавычки к ключу применять не надо иначе это вызовет ошибку и надо обрамлять фигурными скобками массив. Речь об асоциативных одномерныых которые идут в строке .
6. echo заменю одним )
из перечисленного не будет ли это экономией на спичках ??
Существенно ли возрастет быстродействие.??
Спустя 2 минуты, 55 секунд (1.02.2011 - 12:44) dima4321 написал(а):
Цитата (linker @ 1.02.2011 - 09:14) |
1. Самая главная ошибка - не проверяем данные в $_POST и пихаем их как есть в запросы. |
Чем проверяем ...?)))
Для начала isset и empty а потом слешуем ?? ммм
Спустя 16 минут, 8 секунд (1.02.2011 - 13:00) linker написал(а):
1. Слэшуем, удаляем тэги если нужно.
2. Культура верстки и прочие грабли
3. 4. В твоем случае PHP не поймет, что ты пытаешься тут отдать значение элемента массива, для этого нужно заключать в {}. Но и это мешает чисто визуально определять в строке переменные. Да и быстрее оно работает.
Здесь не только быстродействие, но и стиль.
2. Культура верстки и прочие грабли
3. 4. В твоем случае PHP не поймет, что ты пытаешься тут отдать значение элемента массива, для этого нужно заключать в {}. Но и это мешает чисто визуально определять в строке переменные. Да и быстрее оно работает.
Здесь не только быстродействие, но и стиль.
_____________
Работаю за еду ! __))
И за плюсики !