【问题标题】:PHP - How to Create Dynamic URLs?PHP - 如何创建动态 URL?
【发布时间】:2011-12-19 23:40:45
【问题描述】:

我在网上搜索了有关此简单任务的教程,但无济于事。所以我求助于你们有帮助的同志。这是我需要做的:

我有一个带有事件表的 MySQL 数据库。我需要创建一个包含事件标题列表的 PHP 网页,并且每个标题都必须是指向事件完整详细信息的链接。但是我想避免必须为每个事件创建一个静态页面,主要是因为我不希望数据输入志愿者必须创建这些新页面。 (是的,我意识到静态页面对 SEO 更友好,但在这种情况下,为了提高效率,我需要放弃这一点。)

我见过这样的 PHP url 语法:

pagename.php?id=20

但我不知道如何让它工作。

非常感谢任何和所有帮助。

谢谢!

基普

【问题讨论】:

  • 静态页面对 SEO 不太友好。谷歌并不关心页面是如何产生的,它只是页面上的文本。您可以通过将 URL 重写为 page-20.html 之类的内容来使您的“动态”页面看起来像静态页面。

标签: php mysql url dynamic


【解决方案1】:

这是基本的 php。您只需在编写页面标题之前查询数据库以获取事件详细信息并相应地编写 html。

我要问你的第一件事是你是否知道如何连接到你的数据库。从那里,您根据 $_GET['id'] 值进行查询并使用结果来填充您的 html。

不要粗鲁,但问题本身表明您是 PHP 新手,对吗?因此,为了提供一个可行的解决方案,我们可能想知道您到底走了多远。

此外,您可以使用 apache 的 mod_rewrite 重写您的动态 url,使其看起来像静态的。如果您对“漂亮”的网址感兴趣,这可能是新手级别的事情。

修改后的答案:

在您的循环中,您将使用查询结果中的 id(假设您的主键是 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
  • 你并不粗鲁——我是新手。这是我到目前为止所得到的: $result = mysql_query("SELECT * FROM calendar WHERE sort_month='04' AND published='1' ORDER BY day+0"); while($field = mysql_fetch_array($result)) { echo "

    ".$field['month']." ".$field['day'].", ".$field[ '年份']。"

    ".$field['event_name']。"

    " ;我想在上面的

    行周围放置一个动态链接,该链接将链接到动态创建的页面。如何使用 $_GET['id'] 来完成此任务?基普

  • 请原谅我上面评论的未格式化外观。这个论坛还是新手。
【解决方案2】:
$foo=$_GET['id'];

在您的示例中,$foo 将 = 20

【讨论】:

    【解决方案3】:

    以下是从名为 calendar 的表中提取 11 月事件列表的相关代码,每个事件都有一个指向名为 event.php 的页面的链接,并且事件的 id 字段附加到 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>  
    

    感谢上面的帮助,这对我有用。

    【讨论】:

      【解决方案4】:

      假设你有 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>
      

      动态页面就是这样的......

      【讨论】:

      • 显然您可以使用我们的答案和 cmets 中的方法来转义 $_GET['id'] 值。
      • 我的每个活动标题上指向此 test.php 页面的链接是否会是,例如,test.php?id=20,ID 号是该特定活动的 ID 号?在代码的第 5 行中,table 是唯一需要替换的词 - 用表的实际名称 - 对吗?除了前三行需要替换的单词之外,文件中还有其他单词吗?谢谢!
      • 没错.. 这取决于您希望您的页面看起来像什么,呵呵。这只是一个简单的例子
      • resultado ??我在使用以if 开头的最后四行 php 时遇到问题。我将resultado 更改为result,但仍然出现错误。当我注释掉这四行并用一个简单的 echo hello world 替换它们时,错误就消失了。
      • 你是对的,它的 result 而不是 resultado。 if 上缺少一个括号。刚刚编辑了答案...
      【解决方案5】:

      在使用$_GETvariables 时要格外小心,因为它们很容易被恶意用户更改。

      按照这个例子,你可以这样做:

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

      所以我们在这里强制将变量强制转换为整数,以便我们确定数据的性质,这通常用于避免SQL injections

      【讨论】:

      • mysql_real_escape_string() 也会有所帮助
      猜你喜欢
      • 2015-02-18
      • 1970-01-01
      • 2011-10-21
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多