PHP - Как создать динамические URL-адреса? - PullRequest
3 голосов
/ 02 ноября 2011

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

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

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

pagename.php?id=20

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

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

Спасибо!

Кип

Ответы [ 5 ]

6 голосов
/ 02 ноября 2011

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

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

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

Кроме того, вы можете переписать ваши динамические URL, чтобы они выглядели как статические, используя apache mod_rewrite. Вероятно, это новичок, если вам интересны "красивые" ссылки.

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

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

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 () для очистки записей.

3 голосов
/ 02 ноября 2011

допустим, у вас есть 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>

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

3 голосов
/ 02 ноября 2011

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

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

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

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

2 голосов
/ 03 ноября 2011

Вот соответствующий код для извлечения списка событий в ноябре из таблицы с именем 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>  

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

0 голосов
/ 02 ноября 2011
$foo=$_GET['id'];

в вашем примере $foo будет = 20

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