1

我希望我在这里使用的标题是可以理解的......

我有一个包含两列的数据库:ward_id 和ward_name。

我希望为每个病房创建动态页面,并在页面标题中显示 ward_name。我创建了一个包含的 header.php 文件。

我使用 ....?wid={$row['ward_id']} 通过 URL 传递 id,当我创建使用该 id 从数据库获取数据的其他查询时,它工作正常。

但是我遇到的问题是页面拒绝将 ward_name 显示为页面标题。我希望这样的工作:

    $wardid = $_GET['wid'];

    $query = "SELECT ward_name, ward_id FROM wards WHERE ward_id=$wardid";
    $result = mysql_query($query);

    while ($row=mysql_fetch_array($result))
    {
$pagetitle = "$row['ward_name']";
    }

但事实并非如此,我在上面尝试了很多变体,我现在不可能全部记住它们,所以我真的希望有人能帮助我......这是目前的代码:

页眉:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>
    <meta charset="utf-8">
    <title><?php echo $pagetitle; ?></title>
    <link rel="stylesheet" href="style.css">
    </head>

    <body>

        <div class="wholepage">

            <div class="headlinewrapper">
                <div class="headline">
                    <h1></h1>
                    <h2></h2>
                </div>
            </div>

            <div class="headlinesidewrapper">
                <div class="headlineside">
                    <p>shv jsfj sjnsf jnsf nsnf nj njsfn
njfjn sfns njf njnsf njs dgbjn dn jnd njjn dd d d nj njd njnd njd nn djndj njd</p>
                </div>
            </div>

            <div class="topnavigation">
                <ul>
                <li><a href="index.php">Home</a></li>
                <li><a href="boroughs.php">Boroughs</a></li>
                <li><a href="wards.php">Wards</a></li>
                </ul>
            </div>

            <div class="sidebar">

            </div>

            <div class="mainpagewrapper">

动态页面:

<?php

    $pagetitle = "Hello";
    include ('header.php');

    ?>

                <div class="mainpage">
                    <div class="infobox">

                    </div>
    <?php

    require('mysqli_connect.php');

    mysql_select_db('onetwom2_london');


    $wardid = $_GET['wid'];

    $query = "SELECT ward_name, ward_id FROM wards WHERE ward_id=$wardid";
    $result = mysql_query($query);

    while ($row=mysql_fetch_array($result))
    {
    echo "<div class=\"boroughlist\"><p>{$row['ward_name']}</p></div>" ;
    }

    $pagetitle = $result;

    ?>

    <div class="clear">
    </div>      
                </div>
            </div>
        </div>


    </body>

    </html>

所以我只想知道如何/是否可以将通过 URL 传递的 id 与存储在数据库中的 ward_id 相匹配,然后让页面标题显示链接到该 id 的 ward_name。如果这是一个非常简单的问题,我深表歉意,我花了几个小时试图解决这个问题,我完全被难住了!(我上面发布的代码只是 5 个小时的挫折的最终结果,所以请感谢我在向你寻求帮助之前已经努力了 :))

4

3 回答 3

0

首先, 尽量避免使用双引号。请改用单'引号。双引号使 php 在要解析的字符串中查找变量。使用单引号,字符串中的任何变量都将作为纯文本回显,从而提高整体性能。

所以,

代替

$pagetitle = "$row['ward_name']";

你想用

$pagetitle = $row['ward_name'];

和这里一样:

echo "<div class=\"boroughlist\"><p>{$row['ward_name']}</p></div>";

应改为:

echo '<div class="boroughlist"><p>'.$row['ward_name'].'</p></div>';

使用单引号\"也会过时,使代码更具可读性并且更容易编写。

 
为了在 PHP 中使用数据库,我建议您使用 MySQLi 类。看看https://github.com/ajillion/PHP-MySQLi-Database-Class。它易于实施,学习曲线低。

MySQLi是 MySQL 的继任者(现在已弃用)。引入了MySQLi准备好的语句,使包含(用户)输入的查询保存在SQL Injection中。PDO会更好,但它更难使用。

关于 $wardid = $_GET['wid'];:确保该值被解释为整数。所以试试这个:

$wardid = (int) $_GET['wid']; // type cast to integer aka Type Juggling
$query  = 'SELECT ward_name, ward_id FROM wards WHERE ward_id=`'.$wardid.'` LIMIT 1';

注意LIMIT 1. 这将查询限制为一个结果,使其性能更好,因为它在找到结果后立即停止。

祝您在学习更多关于 SQL 和 PHP 的过程中好运 :-)


编辑:

根据提问者的评论,我想添加问题中给出的代码的重写示例:

<?php

    // I'll demonstrate how to use the MySQLi Class
    require_once('mysqlidb.php');

    // Connect to the database
    $db = new Mysqlidb('host', 'username', 'password', 'databaseName');

    // Get the wid from the uri
    $wardid = $_GET['wid'];

    // Fetch the page title from the db
    $result    = $db->where('ward_id', $wardid)->get('wards', 1);
    $pagetitle = $result['ward_name'];

?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title><?php echo $pageTitle; ?></title>
    <link rel="stylesheet" href="style.css">
</head>
<body>

    <!-- A templating engine like smarty would make things easier -->
    <section class="whole-page">
        <div class="headline-wrapper">
            <div class="headline">
                <h1></h1>
                <h2></h2>
            </div>
        </div>
    </section>

    <div class="headline-sidewrapper">
        <div class="headline-side">
            <p>Lorem ipsum...</p>
        </div>
    </div>

    <nav class="top-navigation">
        <ul>
            <li><a href="index.php">Home</a></li>
            <li><a href="boroughs.php">Boroughs</a></li>
            <li><a href="wards.php">Wards</a></li>
        </ul>
    </nav>

    <aside class="sidebar"></aside>

    <section class="mainpage-wrapper">
        <!-- Dynamic page part - I recommend using a separate template that will be included here -->
    </section>

</body>
</html>

这是一个使用 MySQLi 数据库类的基本示例。我建议您使用smarty 之类的模板引擎来简化此类工作。还可以考虑阅读“关注点分离”

于 2013-08-12T20:37:33.490 回答
0

您应该逐步解决问题,看看它在哪里出错了,var-dump $pagetitle 在 while 循环中。如果它显示为 NULL,请查看正在存储的内容,您没有从数据库中检索任何内容,并且任何一个 Query 都存在问题。如果它具有正确的变量,则问题出在您的 PHP 上。var_dump $pagetitle 在你的 header.php 文件中,以确保它得到正确的变量。

让我知道结果,我可以从那里帮助你

<?php
    $wardid = $_GET['wid'];
    $query = "SELECT ward_name, ward_id FROM wards WHERE ward_id=$wardid";
    $result = mysql_query($query);
    while ($row=mysql_fetch_array($result))
    {
        $pagetitle = "$row['ward_name']";
        //Step Through The Problem
        var_dump($pagetitle);
    }
    include ('header.php');
?>
<div class="mainpage">
  <div class="infobox">
   </div>
  <?php
    require('mysqli_connect.php');
    mysql_select_db('onetwom2_london');
    $wardid = $_GET['wid'];
    $query = "SELECT ward_name, ward_id FROM wards WHERE ward_id=$wardid";
    $result = mysql_query($query);
    while ($row=mysql_fetch_array($result))
    {
       echo "<div class=\"boroughlist\"><p>{$row['ward_name']}</p></div>" ;
    }
    $pagetitle = $result;
  ?>
    <div class="clear">
    </div>      
</div>

更新 - 试试这个

<?php
    require('mysqli_connect.php');
    mysql_select_db('onetwom2_london');
    $wardid = $_GET['wid'];
    $query = "SELECT ward_name, ward_id FROM wards WHERE ward_id=$wardid";
    $result = mysql_query($query);
    while ($row=mysql_fetch_array($result))
    {
        $pagetitle = $row['ward_name'];
        //Step Through The Problem
        var_dump($pagetitle);
    }
    include ('header.php');
?>
<div class="mainpage">
  <div class="infobox">
   </div>
  <?php
    $result2 = mysql_query($query);
    while ($row2=mysql_fetch_array($result2))
    {
       echo "<div class=\"boroughlist\"><p>{$row2['ward_name']}</p></div>" ;
    }
  ?>
    <div class="clear">
    </div>      
</div>
于 2013-08-12T20:37:58.470 回答
0

帮自己一个忙,使用一些可以为您提供参数化查询的 ORM 或库。

此代码为您打开了 SQL 注入攻击的大门:

$wardid = $_GET['wid'];

$query = "SELECT ward_name, ward_id FROM wards WHERE ward_id=$wardid";
于 2013-08-12T20:20:20.363 回答