Принципиальная разница между 2-мя кодами
Всем здравствуйте!
В чём принципиальная (именно ПРИНЦИПИАЛЬНАЯ, так как это 2 разных учебных CRUD-проекта и с каждого из них я подключаюсь к разным таблицам) разница между 2-мя следующими кодами: Код № 1, работающий с товарами: <!doctype html> <html lang="ru"> <head> <title>Админ-панель</title> </head> <body> <?php $host = 'localhost'; // Хост, у нас все локально $user = 'root'; // Имя созданного вами пользователя $pass = ''; // Установленный вами пароль пользователю $db_name = 'new_23'; // Имя базы данных $link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой // Ругаемся, если соединение установить не удалось if (!$link) { echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error(); exit; } ?> <?php if (isset($_POST["title"])) { //Если это запрос на обновление, то обновляем if (isset($_GET['red_id'])) { $sql = mysqli_query($link, "UPDATE `lessons` SET `title` = '{$_POST['title']}', `description` = '{$_POST['description']}', `author` = '{$_POST['author']}' WHERE `ID`={$_GET['red_id']}"); } else { //Иначе вставляем данные, подставляя их в запрос $sql = mysqli_query($link, "INSERT INTO `lessons` (`title`, `description`, `author`) VALUES ('{$_POST['title']}', '{$_POST['description']}'), '{$_POST['author']}'"); } //Если вставка прошла успешно if ($sql) { echo '<p>Успешно!</p>'; } else { echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>'; } } if (isset($_GET['del_id'])) { //проверяем, есть ли переменная //удаляем строку из таблицы $sql = mysqli_query($link, "DELETE FROM `lessons` WHERE `id` = {$_GET['del_id']}"); if ($sql) { echo "<p>Товар удалён!</p>"; } else { echo '<p>Произошла ошибка: ' . mysqli_error($link) . '!</p>'; } } if (isset($_GET['red_id'])) { $sql = mysqli_query($link, "SELECT `id`, `title`, `description`, `author` FROM `lessons` WHERE `id`={$_GET['red_id']}"); $product = mysqli_fetch_array($sql); } ?> <form action="" method="post"> <table> <tr> <td>Название:</td> <td><input type="text" name="title" value="<?= isset($_GET['red_id']) ? $product['title'] : ''; ?>"></td> </tr> <tr> <td>Описание:</td> <td><input type="text" name="description" value="<?= isset($_GET['red_id']) ? $product['description'] : ''; ?>"></td> </tr> <tr> <td>Автор:</td> <td><input type="text" name="author" value="<?= isset($_GET['red_id']) ? $product['author'] : ''; ?>"></td> </tr> <tr> <td colspan="2"><input type="submit" value="OK"></td> </tr> </table> </form> <table border='1'> <tr> <td>Название</td> <td>Описание</td> <td>Автор</td> <td>Удаление</td> <td>Редактирование</td> </tr> <?php $sql = mysqli_query($link, 'SELECT `id`, `title`, `description` FROM `lessons`'); while ($result = mysqli_fetch_array($sql)) { echo '<tr>'. "<td>{$result['title']}</td>". "<td>{$result['description']}</td>". "<td>{$result['author']}</td>". "<td><a href='?del_id={$result['id']}'>Удалить</a></td>". "<td><a href='?red_id={$result['id']}'>Изменить</a></td>". '</tr>'; } ?> </table> <p><a href="?add=new">Добавить новую запись</a></p> </body> </html> Код № 2, работающий с данными людей и содержащий в себе изображения (которые фактически расположены в папке, а ссылки на каждый из них берутся из БД-таблицы): <!doctype html> <html lang="ru"> <head> <title>Админ-панель</title> </head> <body> <?php $host = 'localhost'; // Хост, у нас все локально $user = 'root'; // Имя созданного вами пользователя $pass = ''; // Установленный вами пароль пользователю $db_name = 'new_23'; // Имя базы данных $link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой // Ругаемся, если соединение установить не удалось if (!$link) { echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error(); exit; } ?> <?php if (isset($_POST["title"])) { //Если это запрос на обновление, то обновляем if (isset($_GET['red_id'])) { $sql = mysqli_query($link, "UPDATE `information` SET `num` = '{$_POST['num']}', `surname` = '{$_POST['surname']}', `name` = '{$_POST['called']}', `patronymic` = '{$_POST['patronymic']}', `address` = '{$_POST['address']}', `img` = '{$_POST['img']}' WHERE `ID`={$_GET['red_id']}"); } else { //Иначе вставляем данные, подставляя их в запрос $sql = mysqli_query($link, "INSERT INTO `information` (`num`, `surname`, `name`, `patronymic`, `address`, `img`) VALUES ('{$_POST['num']}', '{$_POST['surname']}'), '{$_POST['called']}', '{$_POST['patronymic']}', '{$_POST['address']}', '{$_POST['img']}'"); } //Если вставка прошла успешно if ($sql) { echo '<p>Успешно!</p>'; } else { echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>'; } } if (isset($_GET['del_id'])) { //проверяем, есть ли переменная //удаляем строку из таблицы $sql = mysqli_query($link, "DELETE FROM `information` WHERE `id` = {$_GET['del_id']}"); if ($sql) { echo "<p>Запись удалена!</p>"; } else { echo '<p>Произошла ошибка: ' . mysqli_error($link) . '!</p>'; } } if (isset($_GET['red_id'])) { $sql = mysqli_query($link, "SELECT `num`, `surname`, `name`, `patronymic`, `address`, `img` FROM `information` WHERE `id`={$_GET['red_id']}"); $properties = mysqli_fetch_assoc($sql); } ?> <form action="" method="post"> <table> <tr> <td>Номер (не "ID"):</td> <td><input type="text" name="num" value="<?= isset($_GET['red_id']) ? $properties['num'] : ''; ?>"></td> </tr> <tr> <td>Фамилия:</td> <td><input type="text" name="surname" value="<?= isset($_GET['red_id']) ? $properties['surname'] : ''; ?>"></td> </tr> <tr> <td>Имя:</td> <td><input type="text" name="called" value="<?= isset($_GET['red_id']) ? $properties['name'] : ''; ?>"></td> </tr> <tr> <td>Отчество:</td> <td><input type="text" name="patronymic" value="<?= isset($_GET['red_id']) ? $properties['patronymic'] : ''; ?>"></td> </tr> <tr> <td>Адрес:</td> <td><input type="text" name="address" value="<?= isset($_GET['red_id']) ? $properties['address'] : ''; ?>"></td> </tr> <tr> <td>Изображение:</td> <td><img width="300" height="300" name="img" src="<?= isset($_GET['red_id']) ? $properties['img'] : ''; ?>"></td> </tr> <tr> <td colspan="2"><input type="submit" value="OK"></td> </tr> </table> </form> <table border='1'> <tr> <td>Номер (не "ID")</td> <td>Фамилия</td> <td>Имя</td> <td>Отчество</td> <td>Адрес</td> <td>Изображение</td> </tr> <?php $sql = mysqli_query($link, 'SELECT `num`, `surname`, `name`, `patronymic`, `address`, `img` FROM `information`'); while ($result = mysqli_fetch_assoc($sql)) { echo '<tr>'. "<td>{$result['num']}</td>". "<td>{$result['surname']}</td>". "<td>{$result['name']}</td>". "<td>{$result['patronymic']}</td>". "<td>{$result['address']}</td>". "<td>{$result['img']}</td>". "<td><a href='?del_id={$result['id']}'>Удалить</a></td>". "<td><a href='?red_id={$result['id']}'>Изменить</a></td>". '</tr>'; } ?> </table> <p><a href="?add=new">Добавить новую запись</a></p> </body> </html> Интересуюсь, так как 1-й проект - это образец, который я взял в качестве образца с какого-то сайта. В нём всё превосходно работает! 2-й проект - моя переделка "по образу и подобию". Вопросы: 1. Почему 1-й код (образец) работает, а 2-й код - нет?; 2. Как исправить данную ситуацию? |
Цитата:
Вы можете что-то не знать, делать ошибки в коде, это все поправимо, что-то лечится временем, что-то навыками. Но нельзя изначально писать дырявый код. Сервер просто обязан проверять данные извне, прежде чем поставлять их в запросы к базе. Данные должны соответствовать ожидаемым типам, данные, которые обязательные, должны быть заполнены. А подстановка их в запрос, это приведение к ожидаемым типам и экранирование, и это обязательно. |
В продолжение диалога......
Здравствуйте, профессор!
А как бы Вы составили этот код? |
Цитата:
|
В продолжение диалога......
Я читал эту книгу по Вашей ссылке! Абсолютно никаких идей мне в голову не пришло :-(
|
Цитата:
|
Часовой пояс GMT +3, время: 02:09. |