За последние 24 часа нас посетили 22615 программистов и 1215 роботов. Сейчас ищут 785 программистов ...

Требуется помощь разобраться с кодом

Тема в разделе "PHP для новичков", создана пользователем Kelebra, 25 май 2017.

  1. Kelebra

    Kelebra Новичок

    С нами с:
    18 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    доброго времени суток всем! Ребята помогите может кто знает, я не профи в php, есть форма написанная на php и взаимодействующая с базой данных mysql, но есть проблемка, в этой форме доступна загрузка файлов на сервер только в архивах расширения rar или zip, требуется сделать так что бы файлы любых расширений подгружались на сервер, и не просто подгружались, а что бы еще были видны, открывались онлайн в браузере без скачивания файла, и сохранялись в отдельных директориях на сервере. Возможно ли такое?
    PHP:
    1. <?php
    2. if  (!preg_match("/index.php/i", $_SERVER['PHP_SELF'])) {die ('Access denied');}
    3.   require_once("include/kz_open.php");
    4.   require_once("include/kz_save.php");
    5. require_once("include/top.php");
    6.   if (!empty($_GET['ac'])) {
    7.      $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    8.         $sqlv = "select namefile from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'";
    9.            $resv = db_query($sqlv,$con);
    10.            $tmasv = db_fetch_array($resv);
    11.            if ($tmasv['namefile'] == 1)   $rash='rar'; else $rash='zip';
    12.            @unlink ($catalogdata . $_SESSION['u18_com_matsel']. "." . $rash);
    13.         $sqlv = "delete from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'";
    14.     $resv = db_query($sqlv,$con);
    15.        echo "<SCRIPT LANGUAGE=\"javascript\">location.href='index.php?apage=18';</SCRIPT>";
    16.             }
    17. if (!empty($_GET['nf'])) {
    18.    $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    19.    $sqlv = "update zo_mat set name='".htmlspecialchars($_GET['nf'],null, 'cp1251')."' where id_mat= '".$_SESSION['u18_com_matsel']."'";
    20.      $resv = db_query($sqlv,$con);
    21.     echo "<SCRIPT LANGUAGE=\"javascript\">location.href='index.php?apage=18';</SCRIPT>";
    22. }
    23.   if ( !empty($_POST['f18_b_view'])) {
    24.   $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    25.                     $sqlv = "select namefile from zo_mat where (id_mat=".$_SESSION['u18_com_matsel'].")";
    26.                     $resv = db_query($sqlv,$con);
    27.                     $tmasv = db_fetch_array($resv);
    28.                     if ($tmasv['namefile'] == 1)   $rash='rar'; else $rash='zip';                  
    29.   echo "<SCRIPT LANGUAGE=\"javascript\">window.open('". $catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash ."','','');  </script>";
    30.   }
    31. if ( !empty($_POST['f18_b_download'])) {
    32. if (empty($_FILES['filename']['name'])) echo  "<SCRIPT LANGUAGE=\"javascript\">alert('Не указан файл');</SCRIPT>";
    33. else {
    34. $filename =$_FILES['filename']['name'];
    35. if ($_FILES["filename"]["size"]<31457280) {
    36. $rash = strtolower(substr($filename,strlen($filename)-3));
    37. if (($rash=="rar") or ($rash=="zip")) {
    38. $ruplan = $_SESSION['u18_com_ruplan'];
    39. $typemat = $_SESSION['u18_com_typematsel'];
    40. $id_prepod= $_SESSION['tek_idprep'];
    41. if ($rash =='rar' )   $namefile=1; else $namefile=2;
    42.   $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    43.      $sqlv = "insert into zo_mat (id_ruplan, id_prepod,id_type,namefile) values ($ruplan,$id_prepod,$typemat,'$namefile')";
    44.      $resv = db_query($sqlv,$con);  
    45.      $sqlv = "select id_mat from zo_mat where (id_ruplan='".$_SESSION['u18_com_ruplan']."') and (id_prepod ='".$_SESSION['tek_idprep']."') and (id_type='".$_SESSION['u18_com_typematsel']."') order by id_mat";
    46.      $resv = db_query($sqlv,$con);
    47.      while($tmasv = db_fetch_array($resv)) {   $_SESSION['u18_com_matsel'] = $tmasv['id_mat'];  }    
    48. if (@move_uploaded_file($_FILES['filename']['tmp_name'],$catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash)) {echo "<SCRIPT LANGUAGE=\"javascript\"> newname=prompt(\"Введите название материала:\",\"name\");location.href='index.php?apage=18&nf='+newname;</SCRIPT>";break;}
    49. else
    50. {
    51. echo  "<SCRIPT LANGUAGE=\"javascript\">alert('Ошибка загрузки файла (Возможно, что размер файла ужасно велик)');</SCRIPT>";
    52.         $sqlv = "delete from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'";
    53.         $resv = db_query($sqlv,$con);
    54. }
    55. }
    56. else {echo  "<SCRIPT LANGUAGE=\"javascript\">alert('Ошибка загрузки файла (Загрузка только zip и rar архивов)');</SCRIPT>";}
    57. }
    58. else {echo  "<SCRIPT LANGUAGE=\"javascript\">alert('Размер файла не должен превышать 25 Мегабайт');</SCRIPT>";}
    59. }
    60. }
    61. if ( !empty($_POST['f18_b_rename'])) {
    62.               $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    63.               $sqlv = "select name from zo_mat where (id_mat='".$_SESSION['u18_com_matsel']."')";
    64.               $resv = db_query($sqlv,$con);
    65.               $tmasv = db_fetch_array($resv);
    66.     ?>
    67.     <SCRIPT LANGUAGE="javascript">
    68.         newname=prompt("Введите новое название материала:", '<?php echo trim($tmasv['name']);?>');
    69.     location.href='index.php?apage=18&nf='+newname;  
    70.      </SCRIPT>
    71. <?php       break; }
    72.   if ( !empty($_POST['f18_b_delete'])) {
    73.   $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    74.                       $sqlv = "select name from zo_mat where (id_mat='".$_SESSION['u18_com_matsel']."')";
    75.                            $resv = db_query($sqlv,$con);
    76.                                     $tmasv = db_fetch_array($resv);                                  
    77.     ?>
    78.     <SCRIPT LANGUAGE="javascript">if (confirm("Вы уверены, что хотите уничтожить материал <?php echo trim($tmasv['name']);?>?") )    {    location.href='index.php?apage=18&ac=del';    }    </SCRIPT>
    79.     <?php
    80.        }
    81. if (empty($_SESSION['u18_com_semsel'])) {
    82.    $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    83.    $sqlv = "select id_semestr from rp_semestr where status=1 order by id_semestr LIMIT 0 , 1";
    84.    $resv = db_query($sqlv,$con);
    85.    $_SESSION['u18_com_semsel'] = db_result($resv, 0, 'id_semestr');}
    86. if (empty($_SESSION['u18_com_kurssel'])) { $_SESSION['u18_com_kurssel']  = 1; }
    87. if (empty($_SESSION['u18_com_specsel'])) { $_SESSION['u18_com_specsel'] = 0; }
    88. if (empty($_SESSION['u18_com_discsel']))  { $_SESSION['u18_com_discsel']  = 0; }
    89. if (empty($_SESSION['u18_com_matsel']))  { $_SESSION['u18_com_matsel']  = 0; }
    90. if (empty($_SESSION['u18_com_typematsel']))  { $_SESSION['u18_com_typematsel']  = 0; }
    91. if (empty($_SESSION['u18_com_ruplan']))  { $_SESSION['u18_com_ruplan']  = 0; }
    92. $iv_kurssel  = $_SESSION['u18_com_kurssel'];
    93. $iv_semsel   = $_SESSION['u18_com_semsel'];
    94. $iv_specsel = $_SESSION['u18_com_specsel'];
    95. $iv_discsel  = $_SESSION['u18_com_discsel'];
    96. $iv_typematsel  = $_SESSION['u18_com_typematsel'];
    97. $iv_matsel  = $_SESSION['u18_com_matsel'];
    98.  
    99. if( !empty($_POST['f18_com_sem']) )    { $_SESSION['u18_com_semsel']   = $_POST['f18_com_sem'];  }
    100. if( !empty($_POST['f18_com_kurs']) )   { $_SESSION['u18_com_kurssel']  = $_POST['f18_com_kurs']; }
    101. if( !empty($_POST['f18_com_spec']) )  { $_SESSION['u18_com_specsel'] = $_POST['f18_com_spec'];}
    102. if( !empty($_POST['f18_com_disc']) )   { $_SESSION['u18_com_discsel']  = $_POST['f18_com_disc']; }
    103. if( !empty($_POST['f18_com_typemat']) )  { $_SESSION['u18_com_typematsel']   = $_POST['f18_com_typemat'];}
    104. if( !empty($_POST['f18_com_mat']) )  { $_SESSION['u18_com_matsel']   = $_POST['f18_com_mat'];}
    105. if ($iv_semsel<>$_SESSION['u18_com_semsel']) {
    106.    $_SESSION['u18_com_specsel'] = 0;
    107.    $_SESSION['u18_com_discsel']  = 0;
    108.    $_SESSION['u18_com_typematsel'] = 0;
    109.    $_SESSION['u18_com_matsel'] = 0;
    110.    $_SESSION['u18_com_ruplan']  = 0;
    111. }
    112. if ($iv_kurssel<>$_SESSION['u18_com_kurssel']) {
    113.    $_SESSION['u18_com_specsel'] = 0;
    114.    $_SESSION['u18_com_discsel']  = 0;
    115.    $_SESSION['u18_com_typematsel'] = 0;
    116.    $_SESSION['u18_com_matsel'] = 0;
    117.    $_SESSION['u18_com_ruplan']  = 0;
    118. }
    119. if ($iv_specsel<>$_SESSION['u18_com_specsel']) {
    120.    $_SESSION['u18_com_discsel']  = 0;
    121.    $_SESSION['u18_com_typematsel'] = 0;
    122.    $_SESSION['u18_com_matsel'] = 0;
    123.    $_SESSION['u18_com_ruplan']  = 0;
    124. }
    125. if ($iv_discsel<>$_SESSION['u18_com_discsel']) {
    126.    $_SESSION['u18_com_typematsel'] = 0;
    127.    $_SESSION['u18_com_matsel'] = 0;
    128.    $_SESSION['u18_com_ruplan']  = 0;
    129. }
    130. if ($iv_typematsel<>$_SESSION['u18_com_typematsel']) {
    131.    $_SESSION['u18_com_matsel'] = 0;
    132.    $_SESSION['u18_com_ruplan']  = 0;
    133. }
    134. ?>
    135. <form name="f18" enctype="multipart/form-data"  action="" method="post">
    136. <input type="hidden" name="MAX_FILE_SIZE" value="31457280"> <! -- здесь  указан размер -->
    137. <div align=center>
    138.   <FIELDSET STYLE="border: 1px solid; padding: 5px; margin-top:10px; width: 700px; background: #ffffff">
    139.   <font color="blue">Выберите семестр, курс, специальность, предмет и тип материала</font><br>
    140.    <TABLE border=0 cellspacing=1 width=100%>
    141.            <TR><TD>Семестр<br>
    142.        <select size=7 style="width: 120px;  border: 1px solid; margin-left=10 margin-right=20;" name="f18_com_sem" onChange="submit()">
    143.           <?php  $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    144.              $sqlv = "select id_semestr, desctext from rp_semestr where status=1 order by id_semestr";
    145.              $resv = db_query($sqlv,$con);
    146.              while($tmasv = db_fetch_array($resv)) {
    147.               $_SESSION['u18_com_semsel'] == $tmasv['id_semestr'] ? $sv = 'selected' : $sv = '';
    148.               echo "<option value=".$tmasv['id_semestr']." $sv> ".$tmasv['desctext']."</option>\n"; }
    149.            ?>
    150.        </select>
    151.                 </TD>
    152.             <TD>Курс<br>
    153.                   <SELECT SIZE=7 style="width: 30px; border: 1px solid;" NAME="f18_com_kurs" onChange="submit()">
     
    #1 Kelebra, 25 май 2017
    Последнее редактирование модератором: 25 май 2017
  2. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    Чтобы загружались любые файлы сделать не сложно, нужно этот кусок

    Код (Text):
    1. if (($rash=="rar") or ($rash=="zip")) {
    2. $ruplan = $_SESSION['u18_com_ruplan'];
    3. $typemat = $_SESSION['u18_com_typematsel'];
    4. $id_prepod= $_SESSION['tek_idprep'];
    5. if ($rash =='rar' )   $namefile=1; else $namefile=2;
    6.   $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    7.      $sqlv = "insert into zo_mat (id_ruplan, id_prepod,id_type,namefile) values ($ruplan,$id_prepod,$typemat,'$namefile')";
    8.      $resv = db_query($sqlv,$con);  
    9.      $sqlv = "select id_mat from zo_mat where (id_ruplan='".$_SESSION['u18_com_ruplan']."') and (id_prepod ='".$_SESSION['tek_idprep']."') and (id_type='".$_SESSION['u18_com_typematsel']."') order by id_mat";
    10.      $resv = db_query($sqlv,$con);
    11.      while($tmasv = db_fetch_array($resv)) {   $_SESSION['u18_com_matsel'] = $tmasv['id_mat'];  }    
    12. if (@move_uploaded_file($_FILES['filename']['tmp_name'],$catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash)) {echo "<SCRIPT LANGUAGE=\"javascript\"> newname=prompt(\"Введите название материала:\",\"name\");location.href='index.php?apage=18&nf='+newname;</SCRIPT>";break;}
    13. else
    14. {
    15. echo  "<SCRIPT LANGUAGE=\"javascript\">alert('Ошибка загрузки файла (Возможно, что размер файла ужасно велик)');</SCRIPT>";
    16.         $sqlv = "delete from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'";
    17.         $resv = db_query($sqlv,$con);
    18. }
    19. }
    заменить на этот

    Код (Text):
    1. //if (($rash=="rar") or ($rash=="zip")) {
    2. $ruplan = $_SESSION['u18_com_ruplan'];
    3. $typemat = $_SESSION['u18_com_typematsel'];
    4. $id_prepod= $_SESSION['tek_idprep'];
    5. if ($rash =='rar' )   $namefile=1; else $namefile=2;
    6.   $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    7.      $sqlv = "insert into zo_mat (id_ruplan, id_prepod,id_type,namefile) values ($ruplan,$id_prepod,$typemat,'$namefile')";
    8.      $resv = db_query($sqlv,$con);  
    9.      $sqlv = "select id_mat from zo_mat where (id_ruplan='".$_SESSION['u18_com_ruplan']."') and (id_prepod ='".$_SESSION['tek_idprep']."') and (id_type='".$_SESSION['u18_com_typematsel']."') order by id_mat";
    10.      $resv = db_query($sqlv,$con);
    11.      while($tmasv = db_fetch_array($resv)) {   $_SESSION['u18_com_matsel'] = $tmasv['id_mat'];  }    
    12. if (@move_uploaded_file($_FILES['filename']['tmp_name'],$catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash)) {echo "<SCRIPT LANGUAGE=\"javascript\"> newname=prompt(\"Введите название материала:\",\"name\");location.href='index.php?apage=18&nf='+newname;</SCRIPT>";break;}
    13. //else
    14. //{
    15. //echo  "<SCRIPT LANGUAGE=\"javascript\">alert('Ошибка загрузки файла (Возможно, что размер файла ужасно велик)');</SCRIPT>";
    16. //        $sqlv = "delete from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'";
    17. //        $resv = db_query($sqlv,$con);
    18. //}
    19. //}
     
    Kelebra нравится это.
  3. Kelebra

    Kelebra Новичок

    С нами с:
    18 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    в принципе сработало, но появились следующие проблемы, с архивами все так же по прежнему, но с другими файлами при скачивании их с сервера он пишет
    Not Found
    The requested URL /data/7493.zip was not found on this server.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Браузер умееет plain text, html, картинки, иногда pdf. Всё остальное браузер не умеет. Google Docs - там куча сложного кода от гугла, который объясняет браузеру, как всякую хрень показывать
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    mp3, mp4, flv, webm!
     
  6. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    В этом скрипте я не вижу, чтобы был код отдающий файл, в коде заливаемый файл дербанится на имя и разрешение и пишется в базу, причем если разрешение не rar то оно пишется как zip, поэтому скорее всего надо весь проект под ваши цели дорабатывать, мелкими правками не обойтись.
     
  7. Kelebra

    Kelebra Новичок

    С нами с:
    18 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    Вот я нашел фрагмент где он отдает файл под определенным разрешением, это вот ZIP, а на сервере файлы загружаются в своем расширении, вот сижу и думаю как сделать так что бы он открывал и отдавал с сервера файлы всех расширений, но в коде стоит условие, вот думаю может выборку через case поставить?
    вот фрагмент кода:
    Код (Text):
    1. if ( !empty($_POST['f18_b_view'])) {
    2.   $con  = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND.");
    3.                     $sqlv = "select namefile from zo_mat where (id_mat=".$_SESSION['u18_com_matsel'].")";
    4.                     $resv = db_query($sqlv,$con);
    5.                     $tmasv = db_fetch_array($resv);
    6.                     if ($tmasv['namefile'] == 1) $rash=''; else $rash='zip';
    7.                    
    8.                            
    9.   echo "<SCRIPT LANGUAGE=\"javascript\">window.open('". $catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash ."','','');  </script>";
    10.  
    11.   }
    --- Добавлено ---
    или может можно как то по другому присвоить переменной $rash значение всех видов расширений?
     
  8. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    Если это строку

    Код (Text):
    1. if ($tmasv['namefile'] == 1) $rash=''; else $rash='zip';
    закомментировать, то должно отдавать файлы как есть
     
  9. Kelebra

    Kelebra Новичок

    С нами с:
    18 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    какое расширение ставлю вместо zip то он и забирает с сервера, но только одно.
    пробовал, выводит следующую страницу:

    Not Found
    The requested URL /data/7459. was not found on this server.
     
  10. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    Честно говоря тут еще и javascript замешан, а его я совсем не знаю. Чтобы разобраться тут нужно смотреть код целиком и переделывать все в комплексе, я тут Вам не помогу.
     
  11. Kelebra

    Kelebra Новичок

    С нами с:
    18 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    еще прикол такой идет, когда я закидываю файл у которого свое расширение состоит более чем из 3 символов то он сохраняет на сервере его с расширением трех последних символов к примеру файл 1.jpeg он сохранится в папке на сервере с расширением 1.peg.
    --- Добавлено ---

    огромное спасибо за то что помогли, я так вообще собирался и базу тоже ковырять, думал в ней причина! А так вы мне указали где и что копать!
     
  12. winmasta

    winmasta Новичок

    С нами с:
    25 май 2017
    Сообщения:
    9
    Симпатии:
    1
    По сути нужно исключить весь код который модифицирует имена файлов при сохранении и отдавать их как есть, хотя не понятно зачем вообще все эти движения, возможно там что-то в логике скриптов на это завязано, в идеале понять для чего все эти скрипты были созданы, правильно ли они отрабатывали поставленную задачу, затем понять как изменилась поставленная задача и исходя из этого доработать скрипты.
     
  13. Kelebra

    Kelebra Новичок

    С нами с:
    18 апр 2017
    Сообщения:
    8
    Симпатии:
    0

    уже огромное спасибо за то что помогли, я так вообще собирался и базу тоже ковырять, думал в ней причина!
    я честно говоря сам не пойму для чего здесь половина скриптов, и для чего менять имя файла при сохранении на сервер, но понял одно что джаваскрипт тут не причем, так как он всеголишь открывает каталог куда сохранить файл с сервера.