PHP代码意外T_CASE中的解析错误

时间:2011-11-11 14:55:46

标签: php mysql

我的代码存在一些问题,并且一直遇到同样的错误,我已经检查过以确保我没有打开括号或者没有忘记关闭一行。

下面的代码只是我整个代码的一部分,这是第79行的第79-191行错误。

if(isset($id) && isset($_SESSION['user_current'])){

    switch($option) {               
        case 1:
            $query = mysql_query("SELECT * FROM `ebcs_albums` WHERE `id` = '{$_SESSION[user_current][2]}'");
            $result = mysql_fetch_assoc($query);
            $img_ext = array('.jpeg','.jpg','.png','.gif'); 
            function getImages($dir) {
                global $img_path, $img_ext;
                $d = dir($img_path.$dir);  
                while (false !== ($file = $d->read())) {
                    $file_basename = substr($file, 0, strripos($file, '.'));
                    $file_basename = rename($file_basename,strtolower(preg_replace('/[^A-Za-z0-9_-]+/', '-', $file_basename)));
                    $file_ext = substr($file, strripos($file, '.'));
                    $file_ext = rename(strtolower($file_ext));
                    $file = $file_basename.$file_ext;
                    if(in_array($file_ext,$img_ext)) {
                        $images[] = array('file' => $file,'size' => getimagesize($file));
                    }
                }
                $d->close();
                asort($images);         
                return $images;
            }

            $array = getImages($result['Albums_Folder']);
            foreach ($array as $img) {
                mysql_query("INSERT INTO `ebcs_albums_temp` (`id`,`User`,`Image_Name`,`Image_Width`,`Image_Height`) 
                VALUES ('','$user','{$img[file]}','{$img[size][0]}','{$img[size][1]}')");
            }
            goto case 3;
            break;

        case 2:     
            $query = mysql_query("SELECT * FROM `ebcs_albums_temp` WHERE `User` = '{$_SESSION[user_current][0]}'");
            $array = mysql_fetch_array($query);
            foreach ($array as $remove) {
                mysql_query("DELETE FROM `ebcs_albums_temp` WHERE `id` = '{$remove[id]}'");
            }       
            mysql_query("DELETE FROM `ebcs_albums_users` WHERE `IP` = '{$_SESSION[user_current][0]}'");
            $id = $_SESSION['user_current'][2];
            unset($_SESSION['user_current']);   

            $query = mysql_query("SELECT * FROM `ebcs_albums_users` WHERE `Time` > '$inactive'");
            $array = mysql_fetch_array($query);
            foreach ($array as $remove) {
                $last = next($array)===false;
                mysql_query("DELETE FROM `ebcs_albums_users` WHERE `id` = '{$remove[id]}'");
                if(!$last){
                mysql_query("DELETE FROM `ebcs_albums_temp` WHERE `User` = '{$remove[IP]}'");
                }
            }               
            $_SESSION['error'] = 'You have be logged out.';
            echo '<meta http-equiv="refresh" content="0;URL=album.php?id=$id">';
            break;

        case 3:     
            $query = mysql_query("SELECT DISTINCT User FROM `ebcs_albums_temp`");
            $array = mysql_fetch_array($query);
            if(in_array($_SESSION['user_current'][0],$array)) {

                    $query = mysql_query("SELECT Time FROM `ebcs_albums_users` WHERE `User` = '{$_SESSION[user_current][0]}'"); 
                    $mysql_time = mysql_fetch_assoc($query);    

                    $session_life = time() - $_SESSION['user_current'][1];
                    $mysql_life = time() - $mysql_time['Time'];

                    if(($session_life > $inactive) || ($mysql_life > $inactive)){
                        goto case 2;    
                        break;
                    }

                    SmartyPaginate::connect();
                    SmartyPaginate::setLimit(24);
                    $query = sprintf("SELECT SQL_CALC_FOUND_ROWS * FROM `ebcs_albums_temp` WHERE `User` = '$user' ORDER BY `id` LIMIT %d,%d", SmartyPaginate::getCurrentIndex(), SmartyPaginate::getLimit());
                    $results = mysql_query($query);                         
                        while($x = mysql_fetch_assoc($results)) {
                            $images[] = array('file' => $x['Image_Name'],'width' => $x['Image_Width'],'height' => $x['Image_Height']);
                        }
                    $query = "SELECT FOUND_ROWS() as total";
                    $_results = mysql_query($query);
                    $_row = mysql_fetch_assoc($_results);   
                    SmartyPaginate::setTotal($_row['total']);

                    SmartyPaginate::assign($smarty);    

                    $albums = mysql_query("SELECT * FROM `ebcs_albums` WHERE `id` = '{$_SESSION[user_current][2]}'");
                    $albums_arr = array();
                        while($x = mysql_fetch_assoc($albums)) {
                            $albums_arr[] = $x;
                        }

                    $smarty->assign('id',$id);
                    $smarty->assign('images',$images);
                    $smarty->assign('albums_arr',$albums_arr);

                    include ("_header.php");    
                    $smarty->display('album_images.tpl');
                    include ("_footer.php");                
                    break;

            } else {
                goto case 1;    
                break;
            }
        default:    
            break;
    }
} else {                        
    $_SESSION['error'] = 'You are not logged in.';
    echo '<meta http-equiv="refresh" content="0;URL=album.php?id=$id">';
}   

第109行=转到案例3; 第110行=休息;

感谢您的帮助!

6 个答案:

答案 0 :(得分:3)

Goto在循环中使用,而不是在case / switch中使用。你应该使用这个功能。

case 3:
   do_function_3();
   break;

function do_function_3(){
    // put the code here
}

转到文档:http://www.php.net/manual/en/control-structures.goto.php

答案 1 :(得分:1)

问题是您无法在交换机内使用goto。根据{{​​3}}:

  

您也无法跳转到任何类型的循环或切换结构。您   可能跳出这些,并且常见的用途是使用goto代替a   多层次休息。

看起来您的大部分功能都可以通过功能而不是切换来解决。

答案 2 :(得分:0)

之前你在哪里看过这种语法?

您需要使用gotoswitch

  

您也无法跳转到任何类型的循环或切换结构。您   可能跳出这些,并且常见的用途是使用goto代替a   多层次休息。

如果你想以你的架构方式做这件事,你需要在那里使用循环。

您是否尝试过使用ORM或框架?这段代码来自哪里?

答案 3 :(得分:0)

代码在很多方面都不正确。因此修复并不简单。我尝试在我的笔记本电脑上分解你的代码,删除每种情况下的代码用echos取代它们,只留下它们。

如果您真的打算使用goto,那么您可以开始执行以下操作来删除错误。

  1. 首先删除与defaultbreak等相关的switch语句和控制结构。
  2. 在每个“case”声明后删除case,用

    替换它们

    a: // do stuff

  3. 在每个goto中删除案例并执行goto a;

答案 4 :(得分:0)

Dude,GOTO is Considered Harmful。我只是想弄清楚你想要做什么,我感到很头疼。

尽快重构你的代码。

答案 5 :(得分:-1)

这是一个简单的解决方法 - 请勿使用;代替: