2015-09-13 90 views
1

我做在PHP一個簡單的博客,並得到這個錯誤 -PHP/MySQL的偏移誤差

非法串偏移 '名' 在C:\ XAMPP \ htdocs中\上線28簡單\的index.php和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; 
    } 

我的職位表中的下列屬性 -
ID,標題, CAT_ID,內容,date_posted。
對於分類表:
id和名稱。

+1

顯示完整的代碼。根據你的$帖子是不確定的,你應該在第一次得到另一個錯誤,如'無效..somt .. for foreach' – M0rtiis

+0

它看起來像$ post和['name']之間有一個空格,可能會導致問題? –

+0

它沒有解決你的問題。但你肯定會替代'$ posts = $ row;'whith'$ posts [] = $ row;'在最後一個代碼塊 – M0rtiis

回答

2

您的變量$ post可能不是數組。先試試這個:

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

如果你看到它是一個數組,很好!將它用作數組。 $ post很可能是一個字符串。因此,當您嘗試使用$ post ['name']時,PHP會告訴您'name'不是$ post字符串的偏移量。如果你使用$ post [0],那會給你第一個字符,0將是合法的偏移量......但是'name'不會是合法的偏移量。

+0

我試過你的方式,它給了我這個輸出-string( 1)「3」 string(1)「1」 string(5)「first」 string(5)「fdsdf」//表示它的數組 – user43052

+0

不,它不是數組。這4項中的每一項都是一個字符串。 'string(1)'表示長度爲1的字符串。'「first」是長度爲5個字符的字符串,因此它顯示爲'string(5)'。 – zedfoxus