我的代码存在一些问题,并且一直遇到同样的错误,我已经检查过以确保我没有打开括号或者没有忘记关闭一行。
下面的代码只是我整个代码的一部分,这是第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行=休息;
感谢您的帮助!
答案 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)
之前你在哪里看过这种语法?
您也无法跳转到任何类型的循环或切换结构。您 可能跳出这些,并且常见的用途是使用goto代替a 多层次休息。
如果你想以你的架构方式做这件事,你需要在那里使用循环。
您是否尝试过使用ORM或框架?这段代码来自哪里?
答案 3 :(得分:0)
代码在很多方面都不正确。因此修复并不简单。我尝试在我的笔记本电脑上分解你的代码,删除每种情况下的代码用echos取代它们,只留下它们。
如果您真的打算使用goto,那么您可以开始执行以下操作来删除错误。
default
,break
等相关的switch语句和控制结构。在每个“case”声明后删除case
,用
a: // do stuff
在每个goto中删除案例并执行goto a;
答案 4 :(得分:0)
Dude,GOTO is Considered Harmful。我只是想弄清楚你想要做什么,我感到很头疼。
尽快重构你的代码。
答案 5 :(得分:-1)
这是一个简单的解决方法 - 请勿使用;
代替:
。