PHP — Как создавать динамические URL-адреса?

#php #mysql #url #dynamic

#php #mysql #url #динамический

Вопрос:

Я искал в Интернете учебное пособие по этой простой задаче, но безрезультатно. И поэтому я обращаюсь к вам, полезные товарищи. Вот что мне нужно сделать:

У меня есть база данных MySQL с таблицей событий. Мне нужно создать веб-страницу на PHP со списком названий событий, и каждый заголовок должен быть ссылкой на полную информацию о Событии. Но я хочу избежать необходимости создавать статическую страницу для каждого события, в первую очередь потому, что я не хочу, чтобы добровольцу ввода данных приходилось создавать эти новые страницы. (Да, я понимаю, что статические страницы более удобны для SEO, но в данном случае мне нужно отказаться от этого ради эффективности.)

Я видел синтаксис PHP url с чем-то вроде этого:

 pagename.php?id=20
  

но я не знаю, как заставить это работать.

Любая и любая помощь очень ценится.

Спасибо!

Кип

Комментарии:

1. Статические страницы не более оптимизированы для SEO. Google не волнует, как появилась страница, это всего лишь текст на странице. Вы могли бы сделать свою «динамическую» страницу похожей на статическую, переписав URL-адреса на что-то вроде page-20.html .

Ответ №1:

Это базовый php. Вы бы просто запросили у БД сведения о событии перед тем, как будут написаны заголовки страниц, и соответствующим образом записали html.

Первое, что я хотел бы спросить вас, знаете ли вы, как подключиться к вашей базе данных. Оттуда вы выполняете запрос на основе значения $ _GET [‘id’] и используете результаты для заполнения вашего html.

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

Кроме того, вы можете переписать свои динамические URL-адреса, чтобы они выглядели как статические, используя mod_rewrite от apache. Это, вероятно, для начинающих, если вас интересуют «красивые» URL-адреса.

ИЗМЕНЕННЫЙ ОТВЕТ:

В вашем цикле вы будете использовать идентификатор из результата запроса (при условии, что ваш первичный ключ — id)…

 while($field = mysql_fetch_array($result)) { 
    echo "<p class='date'>";
    echo $field['month']." ".$field['day'].", ".$field['year'];
    echo "</p>";
    echo "<h3>";
    echo '<a href="/somepage.php?id='.$field['id'].'">'.$field['event_name'].'</a>';
    echo "</h3>"; 
}
  

Затем на somepage.php вы бы использовали get var id для получения соответствующей информации…

 $result = mysql_query("SELECT * FROM `calendar` WHERE `id` = '".mysql_real_escape_string($_GET['id'])."');
  

не забудьте заглянуть в mysql_real_escape_string() для очистки записей.

Комментарии:

1. о .. я думаю, мой комментарий был спорным. вы рассмотрели все основы. слава. 1

2. Ты не грубиян — я новичок. Это то, что я получил до сих пор: $result = mysql_query(«ВЫБЕРИТЕ * ИЗ календаря, ГДЕ sort_month=’04’ И published= ‘1’ ПОРЯДОК ПО дням 0»); в то время как ($field = mysql_fetch_array($result)) { echo «<p class=’date’>».$field[‘месяц’].» «.$field[‘день’].», «.$field[‘год’].»</p> <h3>».$field[‘имя_события’] .»</h3> » ; } Я хотел бы поместить динамическую ссылку вокруг строки <h3> выше, которая будет ссылаться на динамически создаваемую страницу. Как мне использовать $_GET[‘id’] для достижения этой цели? Кип

3. Извините за неформатный вид моего комментария выше. Все еще новичок на этом форуме.

Ответ №2:

При использовании переменных целесообразно проявлять особую осторожность $_GET , поскольку они могут быть легко изменены злоумышленником.

Следуя примеру, вы могли бы сделать:

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

Итак, мы принудительно преобразуем переменную в целое число, чтобы быть уверенными в характере данных, это обычно используется, чтобы избежать SQL-инъекций.

Комментарии:

1. mysql_real_escape_string() также поможет

Ответ №3:

допустим, у вас есть файл php test.php

 <?php
$conn = mysql_connect("localhost", "root", "");
mysql_select_db("db", $conn);
$id = $_GET['id'];
$sql = "select * from table where id = $id";
$result = mysql_query($sql, $conn);

if ($result){
    $row = mysql_fetch_row($result);
    $title = $row[0];
    $content = $row[1];
    }
?>

<html>
    <head>
    <title><?php echo $title ?></title>
    </head>
    <body>
        <h1><?php echo $title ?></h1>
        <p><?php echo $content ?></p>
    </body>
</html>
  

динамическая страница была бы чем-то вроде этого..

Комментарии:

1. очевидно, что вы бы избежали значения $ _GET[‘id’], используя методы, найденные в наших ответах и комментариях.

2. Будет ли ссылка на это test.php страница в каждом из моих названий событий должна быть, например, test.php?id=20 , с идентификационным номером, соответствующим этому конкретному событию? И в строке 5 вашего кода table единственное слово, которое нужно заменить — на фактическое имя таблицы — правильное? И кроме слов, которые необходимо заменить в первых трех строках, есть ли в файле какие-либо другие? Спасибо!

3. это верно.. ну, это зависит от того, как вы хотите, чтобы ваша страница выглядела, хе-хе. это всего лишь упрощенный пример

4. resultado ?? У меня возникли проблемы с последними четырьмя строками php, которые начинаются с. if Я перешел resultado на result , но я все еще получаю сообщение об ошибке. Когда я закомментирую четыре строки и заменю их простым echo hello world, ошибка исчезнет.

5. вы правы, его результат вместо результата. и на . if только что отредактировал answear…

Ответ №4:

Вот соответствующий код для извлечения списка событий в ноябре из таблицы с именем calendar, при этом каждое событие имеет ссылку на страницу с именем event.php и с полем идентификатора события, добавленным в конец URL-адреса:

 $result = mysql_query("SELECT * FROM calendar WHERE sort_month='11'");  
while($row = mysql_fetch_array($result))  
{echo  
"<a href='event.php?id=".$row['id']."'>".$row['event_name']."</a>"  
;}  
  

И вот соответствующий код на event.php страница. Обратите внимание, что номера строк в скобках зависят от их размещения в вашей таблице, помня, что первая строка (поле) будет иметь номер 0 внутри скобок:

 $id = $_GET['id'];  
$sql = "select * from calendar where id = $id";  
$result = mysql_query($sql, $con);  
if ($result){  
$row = mysql_fetch_row($result);  
$title = $row[12];  
$content = $row[7];  
}  
?>  

<html>  
<head>  
<title><?php echo $title ?></title>  
</head>  
<body>  
<h1><?php echo $title ?></h1>  
<p><?php echo $content ?></p>  
</body>  
</html>  
  

Это работает для меня, благодаря помощи вышеперечисленных.

Ответ №5:

 $foo=$_GET['id'];
  

в вашем примере $foo would = 20