2014-02-13 75 views
-1

我不断收到执行该代码时出现以下错误信息:
注:试图获得非对象的属性在C:\ WAMP \ WWW \ HoneysProject \ function.php上线1178PHP投掷奇数错误

1178行是指以下代码行:
$ number_photos = $ photo_exists-> num_rows;

不确定它为什么抛出这个错误,因为它是我在这个项目上频繁使用的一行代码的重复。自从我继续输出成功后,似乎对运行完成的代码没有任何实际影响。会像错误信息停止弹出。

以下是源代码,在它的全部内容:

function create_album() 
{ 
    try 
    { 
     if(isset($_SESSION['session_id']) && $_SESSION['permissions'] == 0 ) 
     { 
      if(isset($_POST['album_name']) && (file_exists($_FILES['cover_photo']['tmp_name']) || is_uploaded_file($_FILES['cover_photo']['tmp_name']))) 
      { 
       $db = honneyconnect() ; 
       if(mysqli_connect_error()) 
       { 
        throw new Exception("Could not connect to the database") ; 
       } 
       else 
       { 
        $unique = false ; 
        while($unique == false) 
        { 
         $key = rand() ; 
         $query = "select * from albums where album_id = '".$key."'"; 
         $album_exists = $db->query($query) ; 
         $number_albums = $album_exists->num_rows ; 
         if($number_albums == 0) 
         { 
          $unique = true ; 
         } 
        } 
       if(!mkdir("c:\\wamp\\www\\honeysproject\\".$_POST['album_name'] )) 
       { 
        throw new Exception("Failed to create the album. Please try again.") ; 
       } 
       else 
       { 
        $file_name = $_FILES["cover_photo"]["name"] ; 
        if(!move_uploaded_file($_FILES["cover_photo"]["tmp_name"], "C:/wamp/www/HoneysProject/".$_POST['album_name']."/" . $_FILES["cover_photo"]["name"])) 
        { 
         throw new Exception("There was a problem uploading the file") ; 
        } 
        else 
        { 
         $query = 'insert into albums values ("'.$key.'","'.$_POST['album_name'].'", "'.$_FILES['cover_photo']['name'].'")'; 
         $album = $db->query($query) ; 
         if(!$album) 
         { 
          throw new Exception("Failed to create the ".$_POST['album_name']." album. Please check your input and try again.") ; 
         } 
         else 
         { 
          $unique = false ; 
          while($unique == false) 
          { 
           $picture_key = rand(); 
           $query = "select * from photos where photo_id = '".$picture_key."'" ; 
           $photo_exists = $db->query($query) ; 
           $number_photos = $photo_exists->num_rows ; 
           if($number_photos == 0) 
           { 
            $unique = true ; 
           } 


          } 
          $query = "insert into photos values ('".$key."', '".$picture_key."', '".$file_name."')" ; 
          $picture_query = $db->query($query) ; 
          if(!$picture_query) 
          { 

           throw new Exception("Failed to add photo to the photos table. Please check your syntax and try again.") ; 

          } 
          else 
          { 
           echo "<table><tr><td><img src='/HoneysProject/".$_POST['album_name']."/".$_FILES['cover_photo']['name']."'></td><td><a class ='button' href='/HoneysProject/uploadphotos.php?album_id=".$key."'>Upload Photos</a><br><a class='button' href='/HoneysProject/albumedit.php?album_id=".$key."'>Edit Album</a></td></tr></table>" ; 
          } 
         } 
        } 

       } 


      } 
     } 
     else 
     { 
      echo '<div class="data_entry"> 
         <form id="new_album" method="post" action="createalbum.php" enctype="multipart/form-data" /> 
         <input type="hidden" name="MAX_FILE_SIZE" value="50000000" /> 
         <table> 
         <tr><td>Album Name:</td><td><input type="text" size="10" name="album_name" /></td></tr> 
         <tr><td>Choose a Default Photo:</td><td><input type="file" name="cover_photo" id="photo" /></td></tr> 
         <tr><td><input type="submit" value="Submit Data" /></td></tr> 
         </table> 

         </form></div>' ; 
     } 
    } 
} 
catch(Exception $error) 
{ 
    echo "<div class='error'>".$error."</div>" ; 
    echo '<div class="data_entry"> 
         <form id="new_album" method="post" action="createalbum.php" enctype="multipart/form-data" /> 
         <input type="hidden" name="MAX_FILE_SIZE" value="50000000" /> 
         <table> 
         <tr><td>Album Name:</td><td><input type="text" size="10" name="album_name" value="'.$_POST['album_name'].'"/></td></tr> 
         <tr><td>Choose a Default Photo:</td><td><input type="file" name="cover_photo" id="photo" /></td></tr> 
         <tr><td><input type="submit" value="Submit Data" /></td></tr> 
         </table> 

         </form></div>' ; 

} 
} 
+3

呃......是'$ photo_exist'对象? –

+0

当你var_dump($ number_photos)时会发生什么,它实际上是一个对象吗? –

+0

这并不奇怪 – Ryan

回答

1

错误是由于查询失败。

我想知道为什么你要手动生成实体键?你的数据库管理系统不支持自动增加的键或序列吗?

+0

我目前使用phpMyAdmin,我不知道如何将我的密钥设置为自动增量或自动生成唯一密钥。所以我一直在尝试自己手动执行任务。 – NoobWebDev

+0

在phpMyAdmin for sql表格中,自动增量非常容易。这只是您创建时可以在列上设置的属性。您必须先将其设置为主键,然后该选项可用于自动增量,我相信(它是一个默认为空的下拉菜单)。 < - 从我的phpmyadmin版本 – TheOneWhoPrograms

0

显然查询失败,$photo_exists不是一个对象它要么nullfalse。根据文档mysqli::query

  • 失败时返回FALSE。对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询,mysqli_query()将返回一个mysqli_result对象。对于其他成功的查询,mysqli_query()将返回TRUE。

在尝试使用由mysqli函数返回的对象之前,您应该检查错误。

$photo_exists = $db->query($query) ; 
if($number_photos) { 
    $number_photos = $photo_exists->num_rows ; 
} 

甚至:

if($photo_exists = $db->query($query)) { 
    $number_photos = $photo_exists->num_rows ; 
} 
0

$ photo_exists不是一个对象,是最有可能无效。仔细检查你的初始化位置,以确保大小写和拼写正确。

此外,您应该添加一些调试打印语句来检查$ photo_exists的状态,然后再尝试使用它,您很可能会惊讶于它不包含您想要的内容。

您可以使用var_dump($ photo_exists)尝试帮助您输出对象。

+0

所以出于好奇,为什么$ album_exists在代码的开头,我为专辑生成关键字返回一个对象?这应该是抛出相同的错误,但它不假设我生成一个唯一的密钥。 – NoobWebDev

+1

如果您输出的是对数据库执行的查询并复制粘贴输出并在PHPMYADMIN上尝试,它会返回错误还是成功返回?您可能需要仔细检查SQL语句格式。如果你不明白我的意思,我可以尝试换句话,只需要问:) – TheOneWhoPrograms

+0

非常感谢你 – NoobWebDev