2016-10-31 2 views
1

Я строю простую систему CMS и столкнулся с проблемой в моем коде, и я не могу понять, что не так.Что не так с моей инструкцией PHP?

Это должно быть простым решением для опытного разработчика PHP. Строка PHP в HTML-документе не выполняется.

Вот строка кода, которая выходит из строя (и некоторые окружающие код):

<?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] общественности 'QueryString' => строка 'SELECT ID, название, тело со страниц' (длина = 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

свое призвание 'getPages()' с аргументом, но функция не принимает один – nogad

+0

с учетом большего количества большой открытым исходным им CMS не уверен, что есть много смысла, создавая свой собственный больше – nogad

+0

@nogad его личная кривая обучения мой друг, я изучаю php, возможно, некоторым людям может быть проще просто скачать чужую тяжелую работу и использовать ее, но для меня это то, что я могу сделать. вы никогда не знаете, может быть, в fe w лет плохо поставил wordpress и и joomla и такой позор ?! –

ответ

0

Ниже приведена небольшая справка по вашему запросу, и я не помещаю ее сюда, но УБЕДИТЕСЬ, что вы проверяете переменную $ _GET ['id'] перед ее использованием в запросе. Сначала обновить функцию следующим образом:

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; 
} 
} 
+0

Почему '$ pid = $ id;'? просто используйте '$ id'. – chris85

+0

Правда, у меня было $ id = $ _ GET ['id'] там, где я редактировал. Good Catch отредактирует –

+0

эй, извините, micheal. Я даже не понял, что вы ответили:/ваше высказывание, я должен удалить содержимое всей функции и заменить ее кодом? –

2

Вашей функция getPages возвращает объект PDOStatement, и вы пытаетесь использовать это как массив: $ страница [ «ID»], который является недействительным синтаксисом. Это вызывает фатальную ошибку, которую вы, возможно, не видите, что останавливает выполнение скрипта. Итак, во-первых, вы, вероятно, захотите включить отчет об ошибках, если сможете.

Во-вторых, объект PDOStatement имеет функции, которые фактически возвращают строки базы данных из вашего запроса.

В getPages, вы хотите вернуть:

$result->fetch(PDO::FETCH_ASSOC) 

Имейте в виду, что это будет возвращать только первую строку из запроса, который ищет для всех страниц.

Вы также передаете переменную getPages, но не используете ее. Из вашего кода я не могу сказать, что вы пытаетесь сделать. Кажется, вы передаете переменную «id» GET в функцию, затем запрашиваете базу данных для того же «id» ...

См

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

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

+0

во-первых, почему 'php -l' не распознает' $ page ["id" 'как недопустимый синтаксис? Могу ли я вставить bin для вас, чтобы вы могли посмотреть и помочь? –

+0

В вашем существующем коде '$ page' является объектом, а не массивом. Вы можете обращаться к элементам массива только с помощью синтаксиса '[" key "]'. Для объектов вы должны использовать свойство $ object->. В вашем конкретном случае объект не имеет свойства «id», так что это тоже не сработает. Вам нужно использовать 'fetch()' – Kayson

+0

'$ page = getPages (fetch (" id "));' вы имеете в виду, что я должен называть 'getPages()' вроде этого? –

Смежные вопросы