параметры URL php - PullRequest
       13

параметры URL php

0 голосов
/ 19 ноября 2008

Я работаю над своим веб-сайтом и пытаюсь получить параметр URL "page", который представляет собой целое число, указывающее, какую запись нужно прочитать в базе данных MySQL, в которой содержится HTML для всех страниц. Вот мой код, имя пользователя и пароль MySQL которого удалены из соображений безопасности:

  if ($_GET["page"]) {
  $con = mysql_connect("localhost","username","password");
  if (!$con)
  {
    die('Could not connect: ' . mysql_error());
  }
  mysql_select_db("jmurano_pages", $con);
  $title=mysql_query("SELECT title FROM pageContent WHERE pageID=" . $_GET['page']);
  echo "<title>" . $title . "</title>\n";
  echo "</head>\n";
  echo "<body>\n";
  $content = mysql_query("SELECT content FROM pageContent WHERE pageID=" . $_GET['page']);
  echo $content;
  echo "\n</body>\n</html>";
}

Это помещает заголовок как "Resource id # 2", а содержимое как "Resource id # 3". Я не могу думать о том, что я, возможно, сделал неправильно.


Я все еще в замешательстве. Я полный новичок в PHP. Что именно мне нужно сделать, чтобы получить доступ к содержанию и заголовку?

Ответы [ 7 ]

3 голосов
/ 19 ноября 2008

Помимо уязвимости внедрения (см. Ответ Джона), вы должны получить заголовок из mysql_query, используя

 $res = mysql_query("SELECT title FROM pageContent WHERE pageID=" . $escapedpage);
 $title = mysql_fetch_assoc($res);
 $title = $title['title']
 $res2 = mysql_query("SELECT content FROM pageContent WHERE pageID=" . $escapedpage);
 $content = mysql_fetch_assoc($res2);
 $content = $content['content'];

Однако я думаю, что было бы разумно, если бы вы следовали онлайн-руководству по MySQL PHP.

EDIT
еще лучше было бы просто использовать 1 mysql_query так:

$res = mysql_query("SELECT title, content FROM pageContent WHERE pageID=" . $escapedpage);
$row = mysql_fetch_assoc($res);
$title = $row['title'];
$content = $row['content'];

Это сэкономит ваше время и ресурсы вашего скрипта, так как нужен только один запрос mysql.
Этот урок довольно хорош: http://www.freewebmasterhelp.com/tutorials/phpmysql

2 голосов
/ 19 ноября 2008

Вам, очевидно, нужно многому научиться (нам всем нужно было с чего-то начать!) , поэтому один ответ на вопрос SO не сможет научить вас всему, но вот стартер:

Когда вы запускаете mysql_query для запроса SELECT, он возвращает одну из двух вещей:

  • если в вашем запросе произошла ошибка, он вернет false .
    • Подробная информация об этой ошибке доступна по телефону mysql_error()
  • если запрос в порядке, он вернет ресурс
    • Используя этот ресурс, вы можете вызывать другие функции mysql, чтобы узнать информацию о наборе данных, который вы только что создали с помощью SELECT.
    • mysql_fetch_assoc() вернет ассоциативный массив ОДНОЙ строки из вашего запроса.
      • Сделайте это, чтобы увидеть: $row = mysql_fetch_assoc($resource); print_r($row);
    • Вызовите его снова, чтобы получить следующий ряд.
    • Если строк больше нет, mysql_fetch_assoc() вернет false.
      • Поэтому вы можете писать циклы так:
        while ($row = mysql_fetch_assoc($resource)) { // do stuff }
1 голос
/ 19 ноября 2008

Вы должны получить оба поля в одном запросе, поскольку это, вероятно, будет быстрее. Также, предполагая, что pageID всегда является целым числом, вы должны сначала привести его к целому числу, чтобы предотвратить внедрение SQL. Я бы использовал что-то вроде:

<?php
if (isset($_GET["page"])) {
    $con = mysql_connect("localhost","username","password");
    if (!$con) {
        die('Could not connect: ' . mysql_error());
    }
    mysql_select_db("jmurano_pages", $con);

    $pageId = (int) $_GET['page'];

    $result = mysql_query('SELECT title, content FROM pageContent WHERE pageID= ' . $pageId);

    if (!$result) {
        die(mysql_error());
    }

    $row = mysql_fetch_assoc($result);

    if (!$row) {
        die('page not found');
    }

    echo "<title>" . $row['title'] . "</title>\n";
    echo "</head>\n";
    echo "<body>\n";
    echo $row['content'];
    echo "\n</body>\n</html>";

} else{ 
    //what are you going to do if page is not passed?
}
?>

Обратите внимание, что

  • Возможно, вы захотите поместить свой код подключения к базе данных в отдельное место, поэтому вам не нужно копировать его на несколько страниц
  • Вероятно, вам следует прочитать о внедрении SQL и некоторых методах разделения HTML и PHP (представления и логики), в противном случае вы можете получить очень грязный код
1 голос
/ 19 ноября 2008

Вот некоторый код псевдо.

$result = mysql_query($sql);

//for each row in the result, do stuff with it...
while ($row = mysql_fetch_array($result)){
  $title = $row["title"];
  $content = $row["content"];

  //this will show you the row data visually
  //var_dump($row);
}

Будучи новичком в PHP, научитесь отлаживать (при необходимости используйте var_dump), читайте документацию и читайте учебники.

Кроме того, в интернете огромное количество учебников по php + mysql ... google "php and mysql"

Удачи!

0 голосов
/ 19 ноября 2008

Еще одна вещь ... вы можете выбрать заголовок и содержание в одном запросе:

ВЫБРАТЬ заголовок, содержимое ОТ ....

0 голосов
/ 19 ноября 2008

Кроме того, у вас есть уязвимость SQL-инъекции ... никогда не помещайте $ _GET, $ _POST или другие предоставленные пользователем переменные непосредственно в запросы.

Вы должны сделать:

$page = $_GET["page"];
$escaped_page = mysql_real_escape_string($page);

и вставьте $ escaped_page в ваш запрос.

0 голосов
/ 19 ноября 2008

Вы должны прочитать руководство http://de.php.net/mysql_query

Возвращаемые значения

Для SELECT, SHOW, DESCRIBE, EXPLAIN и другие операторы, возвращающие набор результатов, mysql_query() возвращает ресурс в случае успеха, или FALSE при ошибке.

Для других типов операторов SQL: INSERT, UPDATE, DELETE, DROP и т. Д., mysql_query() возвращает TRUE в случае успеха или FALSE в случае ошибки.

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

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