【问题标题】:Passing variables using PHP/PDO使用 PHP/PDO 传递变量
【发布时间】:2016-02-26 06:41:23
【问题描述】:

不确定我是否在标题中正确描述了我的问题,但是...

我想获得以下方面的帮助。我在这方面工作的时间比我想说的要长。我正在将一个网站从 MySql 转换为 PDO。 我现在有一个页面,其中包含几个“消息”(视频),当按下“查看”​​按钮时,它会打开一个新页面并应该播放选定的视频。

一切正常,除了我遇到的问题是,当打开新页面时,我没有加载正确的文件。它正在加载我数据库中的最后一个文件。该 URL 表明正确的“id”号被传递到新页面,即 /webpage.php?id=1、2 3 等。

我花了很长时间才打开页面并实际加载可播放的视频。我已经尝试了很多很多我在这里和其他网站看到的不同选项,但我错过了一些东西。这可能是一个简单的解决方案。 (我承认我只为我的继子维护了这个站点,并且它在 mysql 上运行良好,但我知道我需要更新它,并且根据我所阅读的内容,我应该使用 PDO)。

在您选择要观看的视频的页面上,我有:

    public function dataview($query)
 {
     $stmt = $this->db->prepare($query);
     $stmt->execute();

     if($stmt->rowCount()>0)
     {
            while($row=$stmt->fetch(PDO::FETCH_ASSOC))
            {
               ?>
               <tr>
               <td><button onClick="popUpVid(1024,620,1,'messages.php?id=<?php echo ($row['id'])?>')">View</button></td>
               <td><?php echo $row['date']; ?></td>
               <td><?php echo $row['description']; ?></td>
               </tr>
               <?php
            }
     }
     else
     {
            ?>
            <tr>
            <td>Nothing here...</td>

注意:此页面有“分页(PDO)”,一切正常—— 并在 URL 中传递正确的“id”。

这是我遇到问题的页面: (这里显示了整个页面的代码)

    <?php require_once ('connections/myDB.php'); 

    if (($sermonID = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))         !== false && $id > 0) {
// id was passed and it's a valid integer
    } else {
        // I have nothing here yet, recommendations appraciated)
        // evil request, die die
    }

    try {
$conn = new PDO("mysql:host=$db_host;dbname=$db_name;charset=$charset", $db_name, $db_pass );

    foreach ($conn->query('Select * From messages ')as $row){
    $row['sermonID'];}

    } 

    catch (PDOException $pe) {
die("Could not connect to the database $dbname :" . $pe->getMessage());
    }
    ?>

    <!DOCTYPE html>
    <html>
    <head> 

    </head>
    <body>




     <video width="640" height="480" poster="images/myImage.jpg" controls="controls" preload="none">

     <source type="video/mp4" src='<?php echo $row['fName']; ?>' /></video>
     <p><?php echo $row['date']; ?></p>
     <p><?php echo $row['description'];?></p><br>

     <p>Video files are large. Depending on your connection, they may take a few moments to begin.</p> 

<p><button class="w3-btn w3-round-xxlarge w3-white" onClick="window.close()">Close Window</button>
    </body>
    </html>
    <script>
    function closeWindow()
    { 
    // Close the current window
    window.close();
    }
    </script>

如上所述,页面按预期加载,正确的“id”显示在 URL 中(myWebSite.com/messages.php?id=4 或 ?id=5、6 等)

但是,视频(以及随之而来的其他信息)始终是数据库中的最后一个条目,而不是数据库中的数字 1、2 或 3 等。

有人可以指导我正确的方向吗?我敢肯定这是我忽略的简单事情,但我已经解决这个问题一个多星期了,我受够了自己,束手无策。我已经尝试过 foreach, while, for 和其他一切都无济于事。

我和我的继子非常感谢任何帮助或为我指明正确的方向。我想我已经提供了足够的信息(代码)并试图尽可能清楚。请回复所需的任何其他信息。

谢谢。

【问题讨论】:

  • 您过早关闭 foreach 循环,只留下最后一行显示。另外,我强烈建议您阅读我的PDO tutorial,因为您使用它的方式完全错误。
  • @2-cents tim 很抱歉延迟回来并感谢您的建议(暴风雨袭来并试图将教堂倒塌)。我尝试了上述方法,但现在我收到“警告:为 foreach() 提供的参数无效......一些可能会产生影响的附加信息:host = godaddy, PHP version = 5.2.17 (将升级到5.3 一旦我启动并运行)。mysql API 和 PDO 版本 = 5.0.77。我应该使用准备好的 Stmt 并像我在 YCS 的教程中读到的那样获取列吗?

标签: variables mysqli pdo parameter-passing


【解决方案1】:

这次测试了。 .在 sql 语句中添加了 WHERE 子句。

    function pdo_connect() {
    $dbh = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
    return $dbh;
    }


    $id = $_GET['id'];
if (($sermonID = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)) !== false && $id > 0) {
    // id was passed and it's a valid integer
} else {
    // I have nothing here yet, recommendations appraciated)
    // evil request, die die
}

try {
    $conn = pdo_connect();

foreach ($conn->query("Select * From messages WHERE sermonID = $sermonID")as $row)
    {
$row['sermonID'];}

} 

catch (PDOException $pe) {
    die("Could not connect to the database $dbname :" . $pe->getMessage());
}
?>

<!DOCTYPE html>
<html>
<head> 

</head>
<body>



        <!-- skip the video 
 <video width="640" height="480" poster="images/myImage.jpg" controls="controls" preload="none">

 <source type="video/mp4" src='<?php echo $row['fName']; ?>' /></video>
 <p><?php echo $row['date']; ?></p>
 <p><?php echo $row['description'];?></p><br>

     -->

     <p><?php echo $row['fName']; ?></p>
     <p><?php echo $row['description'];?></p>
 <p>Video files are large. Depending on your connection, they may take a few moments to begin.</p> 

    <p><button class="w3-btn w3-round-xxlarge w3-white" onClick="window.close()">Close Window</button>
</body>
</html>

【讨论】:

  • 感谢您的快速回复,提姆 2 美分。我刚刚尝试了你的两个建议。但是,我仍然像以前一样获得数据库中的最后一个条目。每页显示的页数设置为三,但现在它只显示第一页的数据库中的第一个条目,第二页的数据库中的第二个条目和第三页的第三个条目。到目前为止,我总共有 9 页(每页 3 页)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2014-12-15
  • 2012-11-20
相关资源
最近更新 更多