php и mysql, лучшие практики - PullRequest
5 голосов
/ 29 июля 2010

Я начал работать с php и mysql сегодня. По сути, у меня есть пустая страница с частями, которые я заполняю при поиске идентификатора в базе данных. Так что на моей домашней странице есть URL, который выглядит так:

<a href="content/display.php?id=id1">

И тогда в моем display.php у меня есть это:

<?php
    include '../includes/header.php';
    $id = $_GET['id'];
    $mysqli = new mysqli('localhost','username','password','dbname');
    if($result = $mysqli->query("SELECT * FROM portfolio WHERE id='".$id."'"))
    {
        while($row = $result->fetch_object())
        {
            $head = $row->head;
            $img1 = $row->img1;
            $img2 = $row->img2;
            $img_url = $row->imgurl;
            $img_thumb = $row->imgthumb;
            $vid = $row->vid;
            $swf = $row->swf;
            $url = $row->url;
            $url_text = $row->urltext;
            $text = $row->text;
        }
    }
    else echo $mysqli->error;
?>

Это разреженная таблица, в которой не все эти поля будут содержать информацию (многие могут быть нулевыми). В основном они содержат имена файлов, а затем в HTML у меня есть код, который выглядит следующим образом:

if(isset($img1))
                    {
                        echo '<img src="images/'.$img1.'" />';
                    }

Пара вопросов,

  1. Это лучший способ сделать это?
  2. Каждый раз, когда я захожу на display.php, я снова открываю соединение с базой данных, верно? Это не может быть хорошо ...
  3. Я решил поместить имена файлов в базу данных, а не полные пути или даже сами файлы, полагая, что, если я изменю имя файла, я могу зайти в базу данных и обновить его файл, который я хочу изменить. Если я изменю путь, я могу просто изменить его один раз в HTML. Это лучшая идея?

Спасибо!

Ответы [ 4 ]

6 голосов
/ 29 июля 2010

1) Нет, хотя это самый простой способ начать. После того, как вы освоитесь с основами, вам следует потратить некоторое время на рассмотрение различных подходов к структуре приложения. Самое важное правило - разделять проблемы. Не смешивайте код базы данных с кодом бизнес-логики с кодом презентации. Но, как я уже сказал, это не то, о чем вам следует беспокоиться в первый день. А пока просто изучите основы.

2) На самом деле другого пути нет. Для веб-приложения каждый запрос от браузера похож на отдельный запуск приложения. Существует возможность использовать так называемые постоянные соединения с базой данных, но, как и в предыдущем пункте, с этим вам не следует сталкиваться в первый день, поскольку они требуют особой конфигурации вашего веб-сервера. Пока просто используйте нормальные соединения.

3) Это довольно разумная идея. Вы также можете определить путь к изображению как константу PHP, так что в случае необходимости изменения вы можете изменить только одну эту константу.

4) То, что говорит САК в своем ответе, очень важно. Читайте о SQL-инъекциях и о том, как их предотвратить.

6 голосов
/ 29 июля 2010

Вы уязвимы для SQL-инъекции , правильно введите приведенные ниже переменные:

$id = (int) $_GET['id'];

Используйте такие функции, как mysql_real_escape_string или даже лучше:

1 голос
/ 29 июля 2010

Похоже, вы хорошо разбираетесь в том, что вы хотите сделать. Я не знаю, какой у вас опыт разработки, но было бы неплохо начать изучать MVC в php, таких как CakePHP, Fuse или даже Zend Framework (bleh !!!). Я сэкономлю ваше время на более надежных приложениях, предварительно определив весь ваш базовый интерфейс БД, обработку шаблонов, обработку сессий, и позволю вам беспокоиться о проблемах более высокого уровня, например о том, что на обед! :)

1 голос
/ 29 июля 2010

SQL-инъекция и подготовленные операторы уже упоминались.Дополнением к этому будет:

else echo $mysqli->error;

Измените это на:

else trigger_error($mysqli->error,E_USER_ERROR);

Почему вы спрашиваете?Поскольку посетители не должны иметь представления о вашей базе данных и не могут исправить ошибку, они просто не должны ее видеть.Таким образом, вы можете безопасно разрабатывать при включенном display_errors, а на работающем сайте display_errors выключен, и вы log_errors в журнале ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...