PHP and JQuery and AJAX and Upload Files!

1. fhgdfhdfhdf (20.07.2012 / 21:41)
Надеюсь я не сильно надоел с вопросами, но этот вопрос уже более сложный и думаю много кому пригодиться ответ на него. Вопрос следующий, как организовать динамичную загрузку файлов (в моем случае картинок) на сервер, с добавлением к каждому файлу описания.
Нужно чтобы это выглядело примерно так:
- Выбираю раздел (ссылка);
- Выбираю категорию (SELECT);
- Выбираю нужные картинки.
- Картинки загружаются, показываются и на против каждой надстройки для нее типа: описание, обложка или нет.
- После заполнения всего картинки загружаются в выбранную категорию выбранного раздела с описаниями и всеми надстройками, естественно для каждой картинки своя строка в БД.

Возможно у кого есть готовые похожие скрипты которые можно было бы по разбирать, или кто то хоть примерно сможет подсказать как и что.

2. fhgdfhdfhdf (20.07.2012 / 21:45)
Пока что все выглядит так:
	case 'addfoto':
    
    echo('<div id="zagol"><h1>Админ. панель - Выбор раздела для загрузки фото</h1></div><br />');
    
    $result = mysql_query('SELECT * FROM cat');

    while ($row = mysql_fetch_array($result))
    {
        echo '<div id="srazdel">';
        echo '<a href="mpanal.php?act=addfoto2&amp;id='. $row[0] .'">'. $row[1] .'</a>' ;
        echo '</div>';
    }
    
    echo('<br /><hr><div id="optic"><a href="mpanal.php">На главную</a></div>');
    
	break;

	case 'addfoto2':
    
        echo('<form action="go.php" method="post" enctype="multipart/form-data" >');
        echo('<label for="file">Filename:</label><input type="file" name="file" id="file" /><br />');
        echo('<select id="mymenu" name="pcfoto" >');
        
        $result = mysql_query("SELECT id_pcat, pc_name FROM pcat WHERE id_cat='".$_GET[id]."'");
        $count = mysql_num_rows($result);

        for ($i = 0; $i < $count; $i++)
        {
            $row = mysql_fetch_array($result);
            echo '<option value=' . $row['0'] . '>' . $row['1'] . '</option>';

        }
        
        echo('</select><br /><input name="nfoto" type="text"/><br />');
        echo('<textarea cols="25" rows="5" name="ofoto"></textarea><br />');
        echo('<input type="submit" name="submit" value="Submit" /></form>');
    
	break;


3. fhgdfhdfhdf (20.07.2012 / 21:46)
<?php

 require_once('db.php');

// Where the file is going to be placed
$target_path = 'img/';

/* Add the original filename to our target path.
Result is "uploaded_files/filename.extension" */

$target_path = $target_path . basename( $_FILES['file']['name']); 

if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['file']['name']).
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

if($_POST['nfoto']){
   
$result = mysql_query ("INSERT INTO foto (id_pcat, n_foto, o_foto, u_foto, date)
    VALUES ('".$_POST['pcfoto']."', '".$_POST['nfoto']."', '".$_POST['ofoto']."', 'img/".  basename( $_FILES['file']['name'])."', '".date('d/m/Y H:i')."')");

if($result){
    echo('<br>Юппц');
}
else{
    echo('<br> no bich');
}
 }
 else{
    echo('не удача((((');
 }

?>

Все в кучу все не понятно....

4. Артур (20.07.2012 / 21:50)
Эмм.. Хардкорно ) У меня было что то подобное, но найти уже не смогу. Здесь нужен немного другой подход к разработке

5. ramzes (20.07.2012 / 21:53)
есть же готовый аплоад класс на аяксе

6. Артур (20.07.2012 / 21:54)
В JQuery целых 4 метода для Ajax запроса, но тут то еще нужно интерфейс спроектировать

7. fhgdfhdfhdf (20.07.2012 / 22:03)
5. ramzes, что это и где найти?) просто пока что сложности с интернетом, скорости минимальны, поэтому и сижу пока что в основном тут, так как визави уже прогружен и более менее легкий...

8. ramzes (20.07.2012 / 22:06)
http://tfile.info/file/275/

Добавлено через 02:15 сек.
	this._settings = {
		// Location of the server-side upload script
		action: 'upload.php',			
		// File upload name
		name: 'userfile',
		// Additional data to send
		data: {},
		// Submit file as soon as it's selected
		autoSubmit: true,
		// The type of data that you're expecting back from the server.
		// Html and xml are detected automatically.
		// Only useful when you are using json data as a response.
		// Set to "json" in that case. 
		responseType: false,
		// When user selects a file, useful with autoSubmit disabled			
		onChange: function(file, extension){},					
		// Callback to fire before file is uploaded
		// You can return false to cancel upload
		onSubmit: function(file, extension){},
		// Fired when file upload is completed
		// WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
		onComplete: function(file, response) {}
	};
вот тут в нем настройки если что

9. fhgdfhdfhdf (20.07.2012 / 22:16)
спасибо =) буду разбираться =)
если у кого то есть еще какие не то варианты, примеры, предложения просьба написать. =)

10. fhgdfhdfhdf (20.07.2012 / 23:41)
Вопрос не совсем в тему как сделать так что бы имя загружаемой картинки менялась на мое, например на дмгчмс или на произвольное уникальное имя.

11. fhgdfhdfhdf (21.07.2012 / 00:40)
На последний вопрос нашел ответ сам:
// Where the file is going to be placed
$target_path = 'img/';
$ext = preg_replace('/(?:.*)(\.{1}[a-zA-Z]{3,4})$/','$1', $_FILES['file']['name']);
$unic_name  = time().'_'.rand(0,1000).$ext;
/* Add the original filename to our target path.
Result is "uploaded_files/filename.extension" */
$target_path = $target_path . $unic_name; 
if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
    echo "The file ".  $target_path .
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}



if($_POST['nfoto']){
   
$result = mysql_query ("INSERT INTO foto (id_pcat, n_foto, o_foto, u_foto, date)
    VALUES ('".$_POST['pcfoto']."', '".$_POST['nfoto']."', '".$_POST['ofoto']."', '".  $target_path ."', '".date('d/m/Y H:i')."')");

Остальные вопросы пока в силе.

12. Дмитрий (21.07.2012 / 00:57)
Аплоад лучше всего делать во фрейме, с применением легкой JS-магии.

13. fhgdfhdfhdf (21.07.2012 / 01:11)
12. dima.london, он сам не легок за то) скрипт даже на лакалке грузится долго) что же будет в инете))

14. Дмитрий (21.07.2012 / 01:17)
13. 6680, ты сейчас какую-то дикую ерунду говоришь.

15. fhgdfhdfhdf (21.07.2012 / 01:17)
Хотелось бы узнать про Upload, предположим вот мои надстройки скрипта:

<script type="text/javascript">
$(document).ready(function() {
	$("#uploadify").uploadify({
		'uploader'       : 'scripts/uploadify.swf', // Относительный путь к файлу uploadify.swf. По умолчанию uploadify.swf
		'script'         : 'scripts/uploadify.php', // Относительный путь uploadify.php. По умолчанию uploadify.php. Это скрипт - загрузчик. Обязательно посмотрите его
		'cancelImg'      : 'scripts/cancel.png', // Относительный путь до картинки cancel.png. По умолчанию cancel.png
		'folder'         : 'uploads', // Путь к папке, в которой Вы хотите сохранять загружаемые файлы. 
                                      //Эту настройку можно опустить, тогда папку загрузки необходимо определить в uploadify.php
                                      //Помните! На большистве хостингов, папка, в которую Вы пытаетесь загрузить файлы должна быть доступна на запись, не забудьте выставить соответствующие права 
		'queueID'        : 'fileQueue', // ID элемента, в котором будет показываться очередь загрузки
        'queueSizeLimit' : '10', // Лимит очереди (максим. число загруж файлов). По умолчанию 999
		'auto'           : false, // Если истина, загрузка начнется сразу после выбора файлов
		'multi'          : true,  // Если истина, то разрешена загрузка нескольких файлов
        'fileDesc'       : 'только фотографии jpg', // Текст, который будет внизу появляющегося диалогового окна. Без этого параметра будет написано "Все файлы('.')"
        'fileExt'        : '*.jpg; *.jpeg; *.JPG; *.JPE; *.jpe', // разрешенные к загрузке файлы (остальные вдиалолговом окне будути скрыты)
        'sizeLimit'      : 1500000, // Макс. Размер файла для каждой загрузки (в байтах). Если не указываем, ограничено будет только настройками Вашего сервера
        'simUploadLimit' : 1, // Ограничение на кол-во одновременных закачек. По умолчанию 1. Если значение равно 1, то загружаться будет 1 файл, а остальные будут стоять за ним в очереди. Если 2 - два загружаются, остальные ждут их  и т.д
        'buttonText'     : 'File', // Текст на кнопке. По умолчанию BROWSE. К сожалению русскийтекст не поддрживается
        'buttonImg'      : 'scripts/btn.png', // Путь до картинки, которая будет служить кнопкой. Компенсирует недостаток предыдущей. Если эта настройка указана, предыдущая будет проигнорирована
      'width' : 255,
	  'height' : 87,
	  // 'onInit'        : alert('Скрипт готов!'),// Функция, которая срабатывает, когда скрипт будет загружен. По умолчанию обработчик событий скрывает целевой элемент на странице и заменяет его с флэш-файл, затем создает очереди контейнера после него.



16. fhgdfhdfhdf (21.07.2012 / 01:19)
       'onSelect'       : function(event, queueID, fileObj){ // Функция, которая сработает, при выборе каждого файла. Пример:
                            var string =  'Имя фала: '     + fileObj.name  +'\n';
                                string += 'Размер файла: ' + fileObj.size  + 'байт\n';
                                string += 'Тип: '          + fileObj.type  + '\n';  
                                string += 'ID в очереди: ' + queueID       +'\n'; // уникальный ID файла, генерируется скриптом
                            alert(string)
                         },
        'onSelectOnce'  : function(event, data){   //Функция, которая вызывается один раз для каждой операции выбора.
                            var string  = 'Файлов в очереди: '                  + data.fileCount      +'\n';
                                string += 'Было выбрано файлов: '               + data.filesSelected  +'\n';
                                string += 'Заменено файлов в очереди: '         + data.filesReplaced  +'\n';
                                string += 'Итоговый вес файлов в очереди: '    + data.allBytesTotal  +'\n';
                            alert(string); 
        },
        
        'onProgress'    : function(event, queueID, fileObj, data){  // Срабатываети каждый раз в ходе изменений во време загрузки
                          var string   = 'Загружаем: '                             + fileObj.name            +'<br />';
                              string  += 'Размер: '                                + fileObj.size            +'<br />';
                              string  += 'Тип: '                                   + fileObj.type            +'<br />';
                              string  += 'загрузка текущего файла: '               + data.percentage         +'%<br />';
                              string  += 'загружено байт текущего файла: '         + data.bytesLoaded        +'<br />';
                              string  += 'загружено байт всей очереди: '           + data.allBytesLoaded     +'<br />';
                              string  += 'скорость загрузки, KB/s: '               + data.speed              +'<br />';
                              $('#info,#info2').show();
                              $('#info').html(string);
        },
        


17. fhgdfhdfhdf (21.07.2012 / 01:20)
'onComplete'    : function(event, queueID, fileObj, response, data){ // Срабатывает когда файл загружен на сервер. По умолчанию файл удаляется из очереди, но мы можем и добваить свои какие-либо действия
                          var string   = 'Загружен файл: '                         + fileObj.name            +'<br />';
                              string  += 'Путь до файла: '                         + fileObj.filePath        +'<br />';
                              string  += 'Размер, байт: '                          + fileObj.size            +'<br />';
                              string  += 'Тип: '                                   + fileObj.type            +'<br />';
                              string  += 'Пришел ответ от сервера: '               + response                +'<br />';
                              string  += 'Файлов в очереди: '                      + data.fileCount          +'<br />';
                              string  += 'скорость загрузки, KB/s: '               + data.speed              +'<br />'; 
                              
                              $('#info2').append('<br />Фаил ' + fileObj.name + ' загружен!<br />');                       
            
        },
        'onAllComplete' : function(event, data){ // Срабатывает когда все загрузки завершены
                          var string   = 'Загружено файлов: '                      + data.filesUploaded       +'\n';
                              string  += 'Ошибок: '                                + data.errors              +'\n';
                              string  += 'Всего загружено kбайт: '                 + data.allBytesLoaded/1024 +'\n';   
                          
                                $('#info,#info2').fadeOut(5000, function() { $('#info,#info2').html('');}); // Плавно прячем информационные блоки и затем очищаем их           
        }});});</script></head><body>

Добавлено через 03:06 сек.
'auto' : false, // Если истина, загрузка начнется сразу после выбора файлов

Когда стоит лож появляются строки загрузок файлов и ждут, а вот чего они ждут? для продолжения нужно что то сделать, запустить функцию, как это сделать? значение "истина" мне не подходит.

18. fhgdfhdfhdf (21.07.2012 / 01:34)
14. dima.london, Можешь подсказать как запустить дальнейшую загрузку выбранных файлов?

19. fhgdfhdfhdf (21.07.2012 / 14:33)
Вопрос выше отподает!
Кто знает можно ли в скрипте надстройки сделать так что бы файл менял свое имя? чтобы это делать не в PHP а прям в JS при загрузке картинок.

20. fhgdfhdfhdf (24.07.2012 / 02:41)
Уже тоже не надо) тему можно считать закрытой

URL: https://visavi.net/topics/33368