Вопрос:Ajax скрипт при загрузке картинок

Тема в разделе "Другие языки", создана пользователем BKK, 25 июн 2010.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. BKK

    BKK

    Регистр.:
    21 окт 2009
    Сообщения:
    161
    Симпатии:
    45
    Привет форумчане! В общем столкнулся с проблемой
    А именно загрузка картинок на ajax
    Облазил пол гугла, но не нашел стоящего ajax скрипта

    PHP:
    <?php
    set_time_limit
    (0);
    define 'ROOT_DIR'dirname __FILE__ ) );
    define 'ENGINE_DIR'ROOT_DIR '/exe' );
    define 'SCRIPT'true );
    if(
    $_GET['send'] == "file")
    {
    header("Content-Type: text/html;charset=windows-1251");
    include 
    ENGINE_DIR '/configuration.php';
      
    $name $_FILES["filename"]["name"];
      if(empty(
    $_FILES["filename"]["name"])) echo "Выбирите картинку(".$name.")<br>";
     if(!empty(
    $_FILES["filename"]["name"]))
     { 
     if(
    $_FILES["filename"]["size"] > 1024*10*1024) echo "Размер файла превышает <b>10 мегабайт</b><br>";
      if(
    $_FILES['userfile']['type'] != "image/gif" || $_FILES['userfile']['type'] != "image/jpg" || $_FILES['userfile']['type'] != "image/png") {
       echo 
    "К загрузке допускаются только GIF,JPG,PNG картинки<br>";
     } 
     }

      
      if(!empty(
    $_FILES['filename']) && $_FILES["filename"]["size"] < 1024*10*1024 && $_FILES['userfile']['type'] == "image/gif" || $_FILES['userfile']['type'] == "image/jpg" || $_FILES['userfile']['type'] == "image/png")
     {
       if(!isset(
    $_COOKIE['files']))
      {
      
    $tmp_name totranslit(trim($_FILES["filename"]["name"]));
      
    $prefix time(); 
      
    $tmp_name "".$prefix."_".$tmp_name."";
      
    $url str_replace("mail.php",'',$_SERVER['PHP_SELF']);
       if(
    copy($_FILES["filename"]["tmp_name"],"".$_SERVER['DOCUMENT_ROOT']."".$url."download/images/".$tmp_name))
        {
       
    //заносим в базу
      
    mysql_query("INSERT INTO " PREFIX "_images SET tmp_name='$tmp_name'");
      echo 
    iconv("UTF-8""WINDOWS-1251"'html');
      
    setcookie("files",md5(time()),time()+30);
      }
      else echo 
    "Возникла ошибка загрузки";
      }
      }
      
      
      }
      
      else
      {
      echo <<<HTML
    <html>
    <head>
    <title>IT WORKS</title>
    <meta http-equiv="content-type" content="text/html;charset=windows-1251">
      <script language="JavaScript">
        
          function createXMLHttp() {
            if(typeof XMLHttpRequest != "undefined") { // для браузеров аля Mozilla

              return new XMLHttpRequest();
            } else if(window.ActiveXObject) { // для Internet Explorer (all versions)
              var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
                       "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp",
                       "Microsoft.XMLHttp"
                       ];
              for (var i = 0; i < aVersions.length; i++) {
                try { //
                  var oXmlHttp = new ActiveXObject(aVersions[i]);

                  return oXmlHttp;
                } catch (oError) { 

                }
              }
              throw new Error("Невозможно создать объект XMLHttp.");
            }
          }
          
          /* Очень важная функция, обратите на неё внимание.
            Формирует строку запроса "name1=value1&name2=value2&name3...".
            Принимает один аргумент - ссылку на форму.
          */
            
          function getRequestBody(oForm) { 
            var aParams = new Array();
            for(var i = 0; i < oForm.elements.length; i++) {
              var sParam = encodeURIComponent(oForm.elements[i].name);
              sParam += "=";
              sParam += encodeURIComponent(oForm.elements[i].value);
              aParams.push(sParam);
            }
            return aParams.join("&");
          }
          
          
          /* В этой ф-ции мы создаём объект XmlHttp, формируем запрос, инициализируем перехватчик состояний
            onreadystatechange, и посылаем наш запрос.
            
            Обратите внимание, что во втором аргументе метода open(..) мы передаём
            ссылку на oForm.action, это сделано как из соображений безопасности, так и ради
            того что-бы сценарий можно-было бы использовать для работы с несколькими страницами.
            
            Так-же, стоит отметить факт отправки дополнительного заголовка: "appilaction/x-www-form-urlencoded"
            Большинство языков (в том числе и PHP), требуют этого, для корректного выполнения
            синтаксического анализа пришедших данных. Этот момент очень важен.
            
          */
          
          function sendRequest() {
            var oForm = document.forms[0];
            var sBody = getRequestBody(oForm);
            var oXmlHttp = createXMLHttp();
            
            oXmlHttp.open("POST",oForm.action, true);
            oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            
            oXmlHttp.onreadystatechange = function() {
              if(oXmlHttp.readyState == 4) {
                if(oXmlHttp.status == 200) {
                  saveResult(oXmlHttp.responseText);
                } else {
                  saveResult("Ошибка: " + oXmlHttp.statusText);
                }
              }
            };
            
            oXmlHttp.send(sBody);
          }
          
          function saveResult(sText) {
            var sElem = document.getElementById("divStatus");
            sElem.innerHTML = sText;
          }
      
          
          </script>  
    </head>
    <body>
     <center>
          <form method="POST" action="mail.php?send=file" OnSubmit="sendRequest(); return false0">
            <pre>
            <p>Выбирите картинку:<br>
    Картинка:   <input type="file" name="filename"><br>
         <input type="submit" value="Загрузить"></p><br>
              </pre>
            </form>
    <pre><div id="divStatus"></div></pre>
        </center>
    </body>
    </html>

    HTML;
      
      }
    ?>
    В общем на выходе получается, что POST данные не отправляется
    В общем знатоки, что не так? Подкиньте нормальный ajax скрипт
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    может добавить тип кодирования для файлов в форме
    <form enctype="multipart/form-data" ...
     
  3. BKK

    BKK

    Регистр.:
    21 окт 2009
    Сообщения:
    161
    Симпатии:
    45
    не помогло:(
     
  4. BKK

    BKK

    Регистр.:
    21 окт 2009
    Сообщения:
    161
    Симпатии:
    45
Статус темы:
Закрыта.