forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   Рекурсия (http://forum.boolean.name/showthread.php?t=12536)

Reizel 21.05.2010 20:01

Рекурсия
 
В общем сделал-таки закачку файлов на сервер. После закачки нужно переадресовать броузер на предыдущую страницу, с этим проблем не возникло. Но вот странное дело - Программа закачки файл закачала, переадресовала броузер....А тот даже не успев отрисовать страницу опять переадресовал ее на закачку!!! ВОзможно какие то поля формы "вспоминают" что на них нажали...и опять срабатывают?? Но это ж маразм...В общем, жду советов :)


ЗЫЖ вот код:
В общем вот код программы загрузки файлов:
<?
* include("checkuser.php");
* $typ=$_POST["group"];
* $current=rawurldecode($_POST["current"]);
* switch($typ)
* {
* *case "file":
* *//phpinfo();
* *$file=$_FILES["file_x"];
* *$name=$current."/".$file["name"];
* *copy($file["tmp_name"],"$name");
* *break;
* *case "catalog":
* * *$name=$_POST["cat_x"];
* * *mkdir("$current/$name",0777);;
* *break;
* }
* $current=rawurlencode($current);

*echo("<meta http-equiv=refresh content=0 ;url=files.php?current=$current>");
?>

Это вполне просто, ничего сложного, НО!!! Почему то возникает рекурсия. Вот кусок из файла files.php:

if ($ADMINISTRATOR)
* * * * * * * * * * * * * * * * * * {?>
* * * * * * * * * * * * * * * * * <table style="background:<?echo($BODY_BACK);?>" width="100%" height="10%" border="2pt">
* * * * * * * * * * * * * <tr align="center">
* * * * * * * * * * * * * <td class="title">
* * * * * * * * * * * * * Добавить
* * * * * * * * * * * * * </td>
* * * * * * * * * * * * * </tr>
* * * * * * * * * * * * * <tr align=center>
* * * * * * * * * * * * * <td class="winrect" height="50">
* * * * * * * * * * * * * <form enctype="multipart/form-data" action="addfile.php" method="POST">
* * * * * * * * * * * * * <input type=radio checked value="file" name="group"><font>Файл:</font><br><input type=file name="file_x"><br>
* * * * * * * * * * * * * <input type=radio value="catalog" name="group"><font>Каталог:</font><br><input type=text size=30 name="cat_x"><br><hr>
* * * * * * * * * * * * * <input type="submit" value="Добавить!">
* * * * * * * * * * * * * <input type=hidden value=<?echo(rawurlencode($dir));?> name="current">
* * * * * * * * * * * * * <input type="hidden" value=1000000000000 name=MAX_FILE_SIZE>
* * * * * * * * * * * * * </form>
* * * * * * * * * * * * * </td>
* * * * * * * * * * * * * </tr>
* * * * * * * * * * * * * </table>
* * * * * * * * * * * * * * * * * *<?}

Nord 29.05.2010 01:18

Ответ: Рекурсия
 
Нееет, мои глаза! :-D

Как этот код можно разобрать вообще, звездочки какие-то, и в редакторе есть специальный BB тег для PHP кода.

Во первых:
PHP код:

mkdir("$current/$name",0777);; //лишняя точка с запятой. 

Во второых:
PHP код:

echo("<meta http-equiv=refresh content=0 ;url=files.php?current=$current>"

Синтаксис мета-тега неправильный, надо так:
PHP код:

echo "<meta http-equiv=\"refresh\" content=\"0;url=files.php?current=".$current."\">"

Но проще сделать так:
PHP код:

Header("Location:files.php?current=".$current); 

Также необходимо сделать дополнительные проверки:
PHP код:

switch($typ) {
    case 
"file":
        if(
$_FILES["file_x"]["name"]!='') {
            
$file=$_FILES["file_x"];
            
$name=$current."/".$file["name"];
            
copy($file["tmp_name"],"$name");
        }
    break;
    case 
"catalog":
        if(!
file_exists($current."/".$_POST["cat_x"])) {
            
$name=$_POST["cat_x"];
            
mkdir("$current/$name",0777);
        }
    break;




Часовой пояс GMT +4, время: 10:44.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot