【问题标题】:echo database data to html php pdo将数据库数据回显到 html php pdo
【发布时间】:2014-08-27 06:34:42
【问题描述】:

我在选择语句上加载 html 时有一个数据库选择,我以降序选择最后五个,或者这里是代码

加载事件.php

<?php 
function LoadEvent(){
    global $dbh;
    $stmt = $dbh->prepare("SELECT * FROM events ORDER by event_id DESC LIMIT 5") ;
    //$stmt->bindValue(1,$eventwhat);
    $stmt->execute();
    while($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $_SESSION['searchresultwhat'] = $selected_row['event_what'];
        $_SESSION['searchresultwhere'] = $selected_row['event_where'];
        $_SESSION['searchresultwhen'] = $selected_row['event_when'];
        $_SESSION['searchresultwho'] = $selected_row['event_who'];
        $event = array($_SESSION['searchresultwhat'] => $selected_row['event_what'], $_SESSION['searchresultwhere'] =>$selected_row['event_where'], $_SESSION['searchresultwhen'] =>$selected_row['event_when'],$_SESSION['searchresultwho'] =>$selected_row['event_who']);
        $_SESSION['arr'] = $event;

        foreach ($_SESSION['arr'] as $_SESSION['searchresultwhat'] => $selected_row['event_what']){
            echo $_SESSION['searchresultwhat'];
            echo "<br/>\n";
        }
    }

}       
?>

我在首页的html中写了

index.php

<?php include_once("include/loadevent.php");
    LoadEvent();?>

在html中我的代码是

<?php
    foreach ($_SESSION['arr'] as $_SESSION['searchresultwhat'] => $selected_row['event_what']){
        echo $_SESSION['searchresultwhat'];
        echo "<br/>\n";
    }
?>

当我从 loadevent.php 执行回显时,我按降序获得最后五个,但在索引中,我得到的只是第一个事件,仅此而已,为什么这样任何人都可以看到我的错误在哪里?

【问题讨论】:

  • 为什么要在会话中保存,而循环 $_SESSION['searchresultwhat'] 会覆盖其值。最后一个循环值仅存储在 $_SESSION['searchresultwhat'] 中。我认为这就是为什么只返回一个值。
  • $selected_row['event_what'] 在 HTML 代码中将只有您从数据库中获取的最后一个值,因为它在 while 语句之外使用。
  • 你真的,真的在这里滥用 $_SESSION 变量。我有一个代码示例即将推出。

标签: php html pdo


【解决方案1】:

您正在使用 $_SESSION 变量做一些非常奇怪的事情,据我所知,根本没有理由。试试这个:

<?php

    function LoadEvent()
    {
        global $dbh;

        $stmt = $dbh->prepare("SELECT * FROM events ORDER by event_id DESC LIMIT 5") ;
        $stmt->execute();

        $events = array();

        while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC))
        {
            $events[] = array(
                'searchresultwhat'  => $selected_row['event_what'],
                'searchresultwhere' => $selected_row['event_where'],
                'searchresultwhen'  => $selected_row['event_when'],
                'searchresultwho'   => $selected_row['event_who']
            );
        }

        // Is this just for testing? Or should it be echoing stuff all the time?
        // foreach ($events as $key => $value)
        // {
        //     echo $value['searchresultwhat'];
        //     echo "<br/>\n";
        // }

        // This is completely optional and should be removed if you don't
        // use the $_SESSION method later on in your HTML 
        $_SESSION['arr'] = $events;

        return $events;
    }
?>

...然后在您的 HTML 中执行以下操作:

<?php

    foreach ($_SESSION['arr'] as $value)
    {
        echo $value['searchresultwhat'];
        echo "<br/>\n";
    }

?>

或者,更好在你的 index.php 中这样做:

<?php

    include_once("include/loadevent.php");

?>

然后在您的 HTML 中,您可以一起避免 $_SESSION:

<?php

    foreach (LoadEvent() as $value)
    {
        echo $value['searchresultwhat'];
        echo "<br/>\n";
    }

?>

【讨论】:

  • 真的很神奇的一个问题请...我使用会话的原因是因为当我不使用会话时,我使用的变量将没有价值,如果我不使用会话,我的意思是它总是给我未定义的索引怎么做请你解释一下
  • 很可能是因为我最初设置了$events = array();(一个空数组)。这样可以确保即使 SQL 查询没有返回任何内容,也至少有一些东西可以让 foreach() 循环开始。如果没有至少一个空数组,您将得到未定义的索引错误。
  • 所以如果我想在 html 中访问它,基本上我不需要将所有变量放在会话中?
  • 如果您需要在页面加载之间保持(坚持)数据,您只需将数据存储在 $_SESSION 变量中。如果您只是包含具有功能的文件等,则根本不需要它。
  • 是的,例如我在数据库中搜索数据并在 html 中显示我需要使用会话吗?
【解决方案2】:

简单的解决方案是将$_SESSION['arr'] = $event; 替换为$_SESSION['arr'][] = $event; AND

foreach ($_SESSION['arr'] as $_SESSION['searchresultwhat'] => $selected_row['event_what']){
    echo $_SESSION['searchresultwhat'];
    echo "<br/>\n";
}

foreach ($_SESSION['arr'] as $value){
    echo $value[$_SESSION['searchresultwhat']];
    echo "<br/>\n";
}

【讨论】:

    【解决方案3】:

    在您的“while”循环中,您会覆盖 $_SESSION superglobal 中的值:

    while($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)){
        //it is overwritten each time you are in while loop
        $_SESSION['searchresultwhat'] = $selected_row['event_what'];
        (...)
    
        foreach ($_SESSION['arr'] as $_SESSION['searchresultwhat'] => $selected_row['event_what']){
            //in this place when you echo it, it echoes current loop iteration so it is executed 5 times
            echo $_SESSION['searchresultwhat'];
            echo "<br/>\n";
        }
    }
    

    在 index.php 中,您只能从 while 循环中回显最后一个值。

    【讨论】:

    • 怎么会因为你在index,php中调用了LoadEvent()函数就让while()循环突然消失了?每次迭代仍然应该是echo $_SESSION['searchresultwhat'];
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2018-04-25
    相关资源
    最近更新 更多