我的PHP语句有什么问题?

时间:2016-10-31 22:36:52

标签: php html mysql

我正在构建一个简单的CMS系统,并且在我的代码中出现问题,我无法弄清楚出了什么问题。

这应该是经验丰富的PHP开发人员的简单修复。 HTML文档中的一行PHP失败。

以下是失败的代码行(以及一些周围的代码):

<?php $page = getPages($_GET["id"]); ?>
<h2>Edit Page</h2>
<div>
    <?php //echo returnPageError(); ?>
</div>
<form class="" action="/mycms/includes/process_edit.php" method="post">
    <input type="hidden" name="id" value="<?php echo $page['id']; ?>" > <!-- this is the line where my HTML cuts off on output
 <div class="mui-textfield mui-textfield--float-label">
    <input type="text" name="title" id="title" value="<?php echo $page['title']; ?>" >
    <label>Title</label>
 </div>

以下是getPages()功能:

function getPages(){
$pdo = DB::getConnection();
$sql = "SELECT id, title, body FROM pages";
$result = $pdo->query($sql);
return $result;
}  

如果我在<?php var_dump($page); exit(); ?>后执行了<?php $page = getPages($_GET["id"]); ?>,则会提供以下信息:

  

/home/jack/server.files/www/php/mycms/pages/edit.php:5:   对象(PDOStatement对象)[2]     public'queryString'=&gt; string'SELECT id,title,body FROM pages'(length = 33)

如果我在<?php var_dump($page["id"]); exit(); ?>之后<?php $page = getPages($_GET["id"]); ?>做了什么,那就什么都没有!

开发工具中的控制台输出显示它在此处切断了HTML输出:

<form class="" action="/mycms/includes/process_edit.php" method="post">
    <input type="hidden" name="id" value=" 

我试过并尝试解决这个问题,但其中一个问题是我的代码所特有的,所以在线搜索没有解决任何问题,正如我所说,对于经验丰富的PHP开发人员来说,这应该是一个简单的纠正。

2 个答案:

答案 0 :(得分:2)

你的getPages函数正在返回一个PDOStatement对象,你正在尝试将其用作数组:$ page [&#34; id&#34;]这是无效的语法。这是一个致命的错误,你可能没有看到它停止执行脚本。首先,您可能希望启用错误报告,如果您能够这样做。

其次,PDOStatement对象具有实际从查询中返回数据库行的函数。

在getPages中,您想要返回:

$result->fetch(PDO::FETCH_ASSOC)

请记住,这只会返回查询的第一行,即搜索所有页面。

您还将变量传递给getPages,但未使用它。从您的代码中,我无法说明您尝试做什么。您似乎正在通过GET请求&#34; id&#34;变量到函数中,然后查询数据库中的相同&#34; id&#34; ...

http://php.net/manual/en/class.pdostatement.php

http://php.net/manual/en/pdostatement.fetch.php

答案 1 :(得分:0)

以下是您的查询的一些帮助,我不会将其放在此处,但请确保您在查询中使用它之前验证了您的$ _GET [&#39; id&#39;]变量。首先像这样更新你的功能:

function getPages($id){
 $pdo = DB::getConnection();
 $q = $pdo->prepare("SELECT id, title, body FROM pages WHERE id=:id");
 $q->bindValue(':id', $id, PDO::PARAM_INT);
 $q->execute();
 if ($q->rowCount() !=null) { 
     $result = $q->fetch(PDO::FETCH_ASSOC);
     return $result;
 }
}