2015-09-13 2 views
1

Я делаю простой блог в PHP и получаю эту ошибку -PHP/Mysql ошибка смещения

Illegal строка смещения 'имя' в C: \ XAMPP \ HTDOCS \ простой \ index.php в строке 28 и 29

<?php 
    foreach ($posts as $post) { 
    if (! category_exists('name', $post ['name'])) { //line 28 
       $post['name'] = 'Uncategorised'; 
       } 
       ?> 

Я знаю строку компенсировано вопросы были здесь задавали много, но все-таки я не мог понять, как исправить это. Пожалуйста помоги.

Вот функция category_exists

function category_exists($field,$value) 
{ 
    $field=mysql_real_escape_string($field); 
    $value=mysql_real_escape_string($value); 

    $query=mysql_query("SELECT COUNT(1) FROM categories WHERE {$field}= '{$value}'"); 
    echo mysql_error(); 

    return (mysql_result($query,0)=='0')? false : true; 


    } 

Эта часть кода, мы надеемся, поможет вам понять $posts переменную:

$posts=get_posts(); 

    function get_posts($id=null,$cat_id=null){ 
    $posts=array(); 
    $query=mysql_query("SELECT posts.id AS post_id, categories.id AS  category_id, title, contents, date_posted, categories.name FROM posts INNER JOIN categories ON categories.id = posts.cat_id ORDER BY post_id DESC"); 
    while($row=mysql_fetch_assoc($query)) 
    { 
    $posts=$row; 
    } 
    return $posts; 
    } 

У меня есть следующие атрибуты таблицы сообщений -
идентификатор, название, cat_id, содержание, date_posted.
Для таблицы категорий:
id и название.

+1

показать полный код. в соответствии с вашими сообщениями $ undefined, и u сначала должен получить еще одну ошибку, например, «invalid ..somt .. for foreach» – M0rtiis

+0

Похоже, что существует пробел между $ post и ['name'], может ли это быть причиной? –

+0

не решит вашу проблему. но вы, безусловно, shoult замените '$ posts = $ row;' whith '$ posts [] = $ row;' в последнем блоке кода – M0rtiis

ответ

2

Ваша переменная $ post, вероятно, не является массивом. Попробуйте это:

foreach ($posts as $post) { 
    var_dump($post); 
} 

Если вы видите, что это массив, отлично! Используйте его как массив. Очень вероятно, что $ post будет строкой. Поэтому, когда вы пытаетесь использовать $ post ['name'], PHP говорит вам, что «имя» не является смещением для строки $ post. Если бы вы использовали $ post [0], это дало бы вам первый символ, а 0 - юридическое смещение ... но «имя» не будет юридическим.

+0

Я пробовал свой путь, и он дает мне этот вывод -string (1) «3» строка (1) «1» строка (5) «первая» строка (5) «fdsdf» // это означает ее массив – user43052

+0

Нет, это не массив. Каждый из этих 4 элементов является строкой. 'string (1)' означает строку длиной 1. '" first "' строка длиной 5 символов, и поэтому она показывает строку (5) '. – zedfoxus

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