Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.02.2019, 23:19
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Принципиальная разница между 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. Как исправить данную ситуацию?
Ответить с цитированием
  #2 (permalink)  
Старый 28.02.2019, 04:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от garrip91
В чём принципиальная разница между 2-мя следующими кодами
Принципиально никакой - первый дырявый как старые валенки, второй повторяет эти же самые грабли.

Вы можете что-то не знать, делать ошибки в коде, это все поправимо, что-то лечится временем, что-то навыками. Но нельзя изначально писать дырявый код. Сервер просто обязан проверять данные извне, прежде чем поставлять их в запросы к базе. Данные должны соответствовать ожидаемым типам, данные, которые обязательные, должны быть заполнены. А подстановка их в запрос, это приведение к ожидаемым типам и экранирование, и это обязательно.
Ответить с цитированием
  #3 (permalink)  
Старый 01.03.2019, 00:55
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

В продолжение диалога......
Здравствуйте, профессор!

А как бы Вы составили этот код?
Ответить с цитированием
  #4 (permalink)  
Старый 01.03.2019, 12:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от garrip91
А как бы Вы составили этот код?
Как и положено, и что для этого требуется делать, и где почитать, я вам давал ссылку на руководство MySQL. Просто садитесь и изучайте.
Ответить с цитированием
  #5 (permalink)  
Старый 01.03.2019, 12:43
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

В продолжение диалога......
Я читал эту книгу по Вашей ссылке! Абсолютно никаких идей мне в голову не пришло :-(
Ответить с цитированием
  #6 (permalink)  
Старый 01.03.2019, 12:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от garrip91
Абсолютно никаких идей мне в голову не пришло :-(
Увы, даже при всем желании поместить или насильно вбить в вашу голову идеи я не в силах.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между .click() и .on("click", "", function()) Булат Азат улы Общие вопросы Javascript 3 06.09.2017 16:12
Express: разница между app.locals и app.set(), app.get() khusamov Node.JS 8 28.06.2016 17:35
Разница между переменной с var и без, которые в глобальной области zhurchik Общие вопросы Javascript 20 15.03.2015 05:30
Разница между my_id и document.getElementById('my_id') js_explorer Events/DOM/Window 6 03.04.2013 17:53
Какая разница между определениями функций Nadine Общие вопросы Javascript 1 07.03.2012 16:07