2014-09-21 5 views
0

Я относительно новичок в php. У меня есть функция, чтобы получить все предметы с помощью tableName. У меня также есть функция, в которой я пытаюсь получить все страницы, где subject_id (из таблицы страниц) соответствует идентификатору тематических таблиц.Таблица соответствия и таблица соответствия PHP

Вот ошибка и вывод:

PDOStatement Объект ([QueryString] => SELECT * FROM предметов ORDER BY идентификатора ASC)

Array ([0] => Array ([ID] => 1 [0] => 1 [menu_name] => О нас [1] => О нас [позиция] => 1 [2] => 1 [видимо] => 1 [3] => 1) [1] = > Array ([id] => 2 [0] => 2 [menu_name] => Продукты [1] => Продукты [позиция] => 2 и т. Д. И т.д. ...

Примечание: Неопределенный индекс: id in/Пользователи/aaronhappe/Сайты/php/CMS/includes/db.php в строке 39

Фатальная ошибка: Вызов функции члена ROWCOUNT() на не-объект в /Users/aaronhappe/Sites/php/CMS/includes/db.php на линии 41

А вот код:

<?php 

// controller file 

include '../admin-head-includes.php'; 

$subjects = getAll('subjects', $conn); 

$subjectId = $subjects->fetchAll(); 

print_r($subjects); 
echo "<br>"; 
echo "<br>"; 
print_r($subjectId); 

$pages = getAllLinkedId('pages', $subjectId, $conn); 

view('manage-content', array(
    'subjects' => $subjects, 
    'pages' => $pages, 
)); 

// from my db functions file 

function getAllLinkedId($tableName, $tableName2, $conn) { 

try { 
$result = $conn->query("SELECT * FROM $tableName WHERE subject_id = {$tableName2['id']} ORDER BY id ASC"); 

    return ($result->rowCount() > 0) 
    ? $result 
    : false; 

} catch (Exception $e) { 
    return false; 
} 

<!-- standard functions file --> 

<?php function view($path, $data = null) { 
    if ($data) { 
     extract($data); 
    } 
    $path = $path . '.views.php'; 
    include "views/$path"; 
}?> 

Если я передаю $ subject [0] в мою функцию getAllLinkedId, это решает проблему переноса массива на другие массивы. Однако то, что я хочу, это выплевывать для каждого предмета соответствующую страницу. Не только страницы, которые соответствуют одному предмету, но отвечают всем тем.

Это мое мнение:

<div class="subjects"> 
    <ul> 
<?php 

foreach ($subjects as $subject) {?> 
<li> 
<?=$subject['menu_name'];?> 
</li> 
    <ul> 
    <?php foreach ($pages as $page) {?> 
     <?=$page['menu_name']?> 
    <?php }?> 
    </ul> 

<?php }?> 
</ul> 

</div> 
+0

Независимо от '$ conn-> query()' is, он не возвратил объект с этим методом. Я предполагаю, что это потому, что '$ subjectId' ссылается на массив массивов, а не на целое число, так что есть либо синтаксическая ошибка запроса (по-видимому, указана надписью прямо над ней), либо нет результата. –

+0

Если вы внимательно посмотрите на свой массив '$ subjectId', вы увидите, что это массив массивов и только числовые ключи. Вероятно, вы хотите использовать одно значение '$ subjectId', например' $ subjectId [0] '. – VMai

+0

VMai - Да, это близко к тому, что я хочу. Только я хочу, чтобы «[0]» был dymanic (что-то вроде $ subject [i]), так что, на мой взгляд, я могу выплюнуть каждую страницу, соответствующую каждому предмету. Передача в $ subject [0] будет выплевывать страницы, принадлежащие $ subject [0]. – AaronHappe

ответ

0

Я был далеко базы на этом. Но я понял это. Я отправляю свое решение, чтобы закрыть это.

<?php 

// controller file 

include '../admin-head-includes.php'; 

$subjects = getAll('subjects', $conn); 
$pages = getAll('pages', $conn); 

$subjects = $subjects->fetchAll(); 
$pages = $pages->fetchAll(); 

view('manage-content', array(
    'subjects' => $subjects, 
    'pages' => $pages, 
)); 

<!-- what my view function does --> 

<?php function view($path, $data = null) { 
if ($data) { 
    extract($data); 
} 
$path = $path . '.views.php'; 
include "views/$path"; 
}?> 

<!-- view --> 
<div class="subjects"> 
<ul> 
<?php 

foreach ($subjects as $subject) {?> 
<li> 
<?=$subject['menu_name'];?> 
<ul> 
<li> 
<?php foreach ($pages as $page) {?> 
<ul> 
    <li> 
<?php 
if ($page['subject_id'] == $subject['id']) { 
    echo $page['menu_name']; 
} 
    ?> 
</li> 
</ul> 
<?php }?> 
</li> 
</ul> 

<?php }?> 
</li> 
</div> 
</ul> 
0

Первая проблема:

Notice: Undefined index: id in ... 

индекс идентификатор в массиве $tableName2 не установлен, проверьте, установлен

Вторая проблема:

Fatal error: Call to a member function rowCount() on a non-object .. 

$conn->query() на не удается вернуть не-объект, проверьте $result является объектом

В коде:

function getAllLinkedId($tableName, $tableName2, $conn) { 

    // check if index id is set 
    if(!isset($tableName2['id'])) 
     return false; 

    try { 
     $result = $conn->query("SELECT * FROM $tableName WHERE subject_id = {$tableName2['id']} ORDER BY id ASC"); 

     // check if $result is object 
     if(!is_object($result)) 
      return false; 

     return ($result->rowCount() > 0) ? $result : false; 

    } catch (Exception $e) { 
     return false; 
    } 
} 
Смежные вопросы