Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: ajax e php

  1. #1

    ajax e php

    Ciao a tutti,
    sono giorni che sto impazzendo con un problema che sicuramente alla fine si rivelerà una banalità, e mi trovo a chiedervi aiuto
    in pratica ho 2 file php dal file A faccio l'upload su server tramite lo script nel file B che è gestito da uno script Javascript. Quindi rimango sempre sulla pagina A il resto viene eseguito in background. Ora devo intercettare il nome del file che ho appena caricato tramite il file B e rimandarlo alla pagina A, senza fare il refresh della pagina A.
    Stavo provando a mandarlo con Ajax con questo script che è nel file B che gestisce l'upload:

    codice:
    var imgThumb = "<?php echo $immThumb ?>";
    	$.ajax({
    		type: "POST",
    		url:"nuovopost.php"      	
          	data: {'image': imgThumb},
    		success: data
    	});
    ma ovviamente nella pagina php non si vede a meno che non faccia il refresh. Cosi pensavo di fare un listener? ma sto impazzendo non funziona niente di qullo che trovo.

    Qualcuno puo aiutarmi?

    GRAZIEEEEE

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Se questa varabile php "<?php echo $immThumb ?>"; la generi quando fai l'upload è ovvio che funzioni solo al refresh perché il browser non è aggiornato essendo una variabile server
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Recupera il nome del file dall'input type="file" subito prima dell'invio.

    codice:
    var fileName=$('input[type=file]').val();
    alert(fileName);
    fileName conterrà cose diverse a seconda del browser in uso e dovrai eliminare la path.

  4. #4
    Originariamente inviato da cavicchiandrea
    Se questa varabile php "<?php echo $immThumb ?>"; la generi quando fai l'upload è ovvio che funzioni solo al refresh perché il browser non è aggiornato essendo una variabile server
    si la variabile viene creata dal fil php che la carica all'interno di una cartella nella root del sito. ma attraverso lo script che gestisce questo file questo poi viene appeso all'interno della textarea, quindi in qualche modo parte della pagina viene refreshato.

    @lucavizzi: il nome lo riesco a recuperare perche lo genero nel file php e lo inserisco all'interno di una variabile, il problema è che non riesco a passarlo nell'altra pagina php.

    Comunque sto usando l'editor nicEdit, non so se lo conoscete.
    Vi allego il link cosi magari si riesce a vedere quello che fa.

    http://nicedit.com/demos.php

    già dalla prima demo se provate a fare l'upload di una foto questa viene appesa all'interno della text area... e questo lo fa anche a me senza fare il refresh della pagina, ora io avrei la necessita di inserire la stessa immagine ridimensionata in un altro DIV in modo che poi alla selezione di una delle varie foto caricate, tramite un radio button recuperare il nome e spedirlo al db.

    grazie Claudio

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Per quanto mi riguarda il fatto che l'editor non funzioni con IE8 mi infastidisce, oltretutto modificare/implemetare un editor non è cosa semplice.
    Ma ti lascio in ottime mai Luca è bravissimo e molto preparato troverà sicuramente (forse) una soluzione
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Originariamente inviato da cavicchiandrea
    Per quanto mi riguarda il fatto che l'editor non funzioni con IE8 mi infastidisce, oltretutto modificare/implemetare un editor non è cosa semplice.
    Ma ti lascio in ottime mai Luca è bravissimo e molto preparato troverà sicuramente (forse) una soluzione
    Grazie, sono commosso...
    (Forse??!!! )

    @traverso
    Non puoi inviare dati dalla pagina che riceve il form alla pagina che lo invia.
    Nel tuo primo post hai parlato di un invio "...in background...", usi forse un iframe nascosto?
    Se è così, ti basta aggiungere in fondo alla pagina che elabora il form il comando per aggiornare la finestra "madre".
    codice:
    <?php
    ....
    $nomeDelFile='stringaColNome';
    
    ?>
    
    <script type="text/javascript">
    parent.document.getElementById('idTagDaAggiornare').innerHTML='<?php echo($nomeDelFile); ?>';
    //nota il parent, serve per riferirsi alla pagina "principale"
    </script>
    </body>
    </html>
    Se vuoi alternative, posta il metodo di invio del form.

    Ciao

  7. #7
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da lucavizzi
    Grazie, sono commosso...
    (Forse??!!! )
    ...
    Il forse è perché per mia natura non do (quasi) mai certezze, non alla tua preparazione
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  8. #8
    Originariamente inviato da lucavizzi
    Grazie, sono commosso...
    (Forse??!!! )

    @traverso
    Non puoi inviare dati dalla pagina che riceve il form alla pagina che lo invia.
    Nel tuo primo post hai parlato di un invio "...in background...", usi forse un iframe nascosto?
    Se è così, ti basta aggiungere in fondo alla pagina che elabora il form il comando per aggiornare la finestra "madre".
    codice:
    <?php
    ....
    $nomeDelFile='stringaColNome';
    
    ?>
    
    <script type="text/javascript">
    parent.document.getElementById('idTagDaAggiornare').innerHTML='<?php echo($nomeDelFile); ?>';
    //nota il parent, serve per riferirsi alla pagina "principale"
    </script>
    </body>
    </html>
    Se vuoi alternative, posta il metodo di invio del form.

    Ciao

    non non uso alcun frame... scusa mi sono spiegato male io con il background... allora il form è questo:
    codice:
    <div id="newpost">
            	<script src="../js/nicEdit.js"></script>
    			<script type="text/javascript">
                    bkLib.onDomLoaded(function() {
                        new nicEditor({
    						buttonList : ['fontSize','bold','italic','underline','strikeThrough','image','upload'], 
    						uploadURI : 'fotoUpload.php'
    					}).panelInstance('new_cont_post');
                    });
                </script>
            	<h4>Titolo</h4>
                <form id="invio_post" method="post" action="newpost.php" enctype="multipart/form-data">
                    
    
    <input type="text" name="new_title" placeholder="Titolo del post" /></p>
                    <div id="new_cont">
                    	<div id="new_cont_post_cont">
                        	<textarea id="new_cont_post" name="new_cont_post" rows="16"></textarea>
                        </div>
                    </div>
                    <div id="cover_selector">
    					<?php
    						//Prova recupero dati passati con ajax
    						var_dump($_POST['image']);
    						/*$imgThumb = $_POST['image'];*/
    						
    						//-------------------------------------------------------//
    						if(isset($imgThumb) && !(empty($imgThumb))){
    							$imm = $imgThumb;
    							//var_dump($imm);
    							$single_immage = explode(" - ", $imm);
    							//var_dump($single_immage);
    							for($t = 0; $t < count($single_immage); $t++){
    								echo '<div class="thumb_cont">[img]../fotoUpload/'.$single_immage[$t].'[/img]<input type="radio" class="radio_selector" name="'.$single_immage[$t].'"/></div>';
    							}
    							
    						}else{echo "Non è stata caricata ancora nessuna foto nel tuo post";}
    						
    						
    					?>	
                    </div>
                    <p class="cb"></p>
                	<button type="submit" name="nuovopost" id="btn_newpost">
                    	<i class="icon-thumbs-up icon-2x">[/i]
                    	
    
    inserisci</p>
                    </button>
                    <button type="button" name="select_cover" id="select_cover" title="Seleziona l'immagine di copertina"><i class="icon-picture icon-2x">[/i]</button>
                    <input type="hidden" name="cover" value="<?php //foto selezionata con il radio button ?>"/>
                </form>
                <p class="cb"></p>
            </div>
    mentre il file php che gestisce l'upload della foto (che non è richiamato dall'action del form) ma gestito dal file JS dell'editor è questo
    codice:
    <?php
    session_start();
    /* NicEdit - Micro Inline WYSIWYG
     * Copyright 2007-2009 Brian Kirchoff
     *
     * NicEdit is distributed under the terms of the MIT license
     * For more information visit http://nicedit.com/
     * Do not remove this copyright message
     *
     * nicUpload Reciever Script PHP Edition
     * @description: Save images uploaded for a users computer to a directory, and
     * return the URL of the image to the client for use in nicEdit
     * @author: Brian Kirchoff <briankircho@gmail.com>
     * @sponsored by: DotConcepts (http://www.dotconcepts.net)
     * @version: 0.9.0
     */
    
    define('NICUPLOAD_PATH', '../fotoUpload'); // Set the path (relative or absolute) to
                                          	   // the directory to save image files
                                          
    define('NICUPLOAD_URI', '../fotoUpload');   // Set the URL (relative or absolute) to
                                         		// the directory defined above
    
    $nicupload_allowed_extensions = array('jpg','jpeg','png','gif','bmp');
    
    // You should not need to modify below this line
    
    $rfc1867 = function_exists('apc_fetch') && ini_get('apc.rfc1867');
    
    if(!function_exists('json_encode')) {
        die('{"error" : "Image upload host does not have the required dependicies (json_encode/decode)"}');
    }
    
    $id = $_POST['APC_UPLOAD_PROGRESS'];
    if(empty($id)) {
        $id = $_GET['id'];
    }
    
    if($_SERVER['REQUEST_METHOD']=='POST') { // Upload is complete
        if(empty($id) || !is_numeric($id)) {
            nicupload_error('Invalid Upload ID');
        }
        if(!is_dir(NICUPLOAD_PATH) || !is_writable(NICUPLOAD_PATH)) {
            nicupload_error('Upload directory '.NICUPLOAD_PATH.' must exist and have write permissions on the server');
        }
        
        $file = $_FILES['nicImage'];
        $image = $file['tmp_name'];
        
        $max_upload_size = ini_max_upload_size();
        if(!$file) {
            nicupload_error('Must be less than '.bytes_to_readable($max_upload_size));
        }
        
        $ext = strtolower(substr(strrchr($file['name'], '.'), 1));
        @$size = getimagesize($image);
        if(!$size || !in_array($ext, $nicupload_allowed_extensions)) {
            nicupload_error('Invalid image file, must be a valid image less than '.bytes_to_readable($max_upload_size));
        }
        
    	//============================================//
    	//Codifica id nome foto
    	$id = substr(md5($id.date("is")), 0, 10);
    	
        $filename = $id.'.'.$ext;
    	
    	if(empty($immThumb)){
    		$immThumb = $filename;
    	}else{
    		$immThumb = $immThumb ." - ". $filename;	
    	}
    	
    	//===========================================//
    	
    	$path = NICUPLOAD_PATH.'/'.$filename;
        
        if(!move_uploaded_file($image, $path)) {
            nicupload_error('Server error, failed to move file');
        }
        
        if($rfc1867) {
            $status = apc_fetch('upload_'.$id);
        }
        if(!$status) {
            $status = array();
        }
        $status['done'] = 1;
        $status['width'] = $size[0];
        $status['url'] = nicupload_file_uri($filename);
        
        if($rfc1867) {
            apc_store('upload_'.$id, $status);
        }
    
        nicupload_output($status, $rfc1867);
        exit;
    } else if(isset($_GET['check'])) { // Upload progress check
        $check = $_GET['check'];
        if(!is_numeric($check)) {
            nicupload_error('Invalid upload progress id');
        }
        
        if($rfc1867) {
            $status = apc_fetch('upload_'.$check);
            
            if($status['total'] > 500000 && $status['current']/$status['total'] < 0.9 ) { // Large file and we are < 90% complete
    		$status['interval'] = 3000;
    	} else if($status['total'] > 200000 && $status['current']/$status['total'] < 0.8 ) { // Is this a largeish file and we are < 80% complete
    		$status['interval'] = 2000;
    	} else {
    		$status['interval'] = 1000;
    	}
            
            nicupload_output($status);
        } else {
            $status = array();
            $status['noprogress'] = true;
            foreach($nicupload_allowed_extensions as $e) {
                if(file_exists(NICUPLOAD_PATH.'/'.$check.'.'.$e)) {
                    $ext = $e;
                    break;
                }
            }
            if($ext) {
                $status['url'] = nicupload_file_uri($check.'.'.$ext);
            }
            nicupload_output($status);
        }
    }
    
    
    // UTILITY FUNCTIONS
    
    function nicupload_error($msg) {
        echo nicupload_output(array('error' => $msg)); 
    }
    
    function nicupload_output($status, $showLoadingMsg = false) {
        $script = '
            try {
                '.(($_SERVER['REQUEST_METHOD']=='POST') ? 'top.' : '').'nicUploadButton.statusCb('.json_encode($status).');
            } catch(e) { alert(e.message); }
        ';
        
        if($_SERVER['REQUEST_METHOD']=='POST') {
            echo '<script>'.$script.'</script>';
        } else {
            echo $script;
        }
        
        if($_SERVER['REQUEST_METHOD']=='POST' && $showLoadingMsg) {      
    
    echo <<<END
        <html><body>
            <div id="uploadingMessage" style="text-align: center; font-size: 14px;">
                
                Uploading...
    
                Please wait
            </div>
        </body></html>
    END;
    
        }
        
        exit;
    }
    
    function nicupload_file_uri($filename) {
        return NICUPLOAD_URI.'/'.$filename;
    }
    
    function ini_max_upload_size() {
        $post_size = ini_get('post_max_size');
        $upload_size = ini_get('upload_max_filesize');
        if(!$post_size) $post_size = '8M';
        if(!$upload_size) $upload_size = '2M';
        
        return min( ini_bytes_from_string($post_size), ini_bytes_from_string($upload_size) );
    }
    
    function ini_bytes_from_string($val) {
        $val = trim($val);
        $last = strtolower($val[strlen($val)-1]);
        switch($last) {
            // The 'G' modifier is available since PHP 5.1.0
            case 'g':
                $val *= 1024;
            case 'm':
                $val *= 1024;
            case 'k':
                $val *= 1024;
        }
        return $val;
    }
    
    function bytes_to_readable( $bytes ) {
        if ($bytes<=0)
            return '0 Byte';
       
        $convention=1000; //[1000->10^x|1024->2^x]
        $s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB');
        $e=floor(log($bytes,$convention));
        return round($bytes/pow($convention,$e),2).' '.$s[$e];
    }
    
    ?>
    <script src="../js/jquery.js"></script>
    <script>
    	var imgThumb = "<?php echo $immThumb ?>";
    	$.ajax({
    		type: "POST",
    		url:"nuovopost.php"      	
          	data: {'image': imgThumb},
    		success: data
    	});
    </script>
    che è la versione che ho scaricato con l'editor ho solo modificato la codifica del nome e lo script per provare a inviare i dati in Ajax....

  9. #9
    Probabilmente, il nicEditor, crea un iframe nascosto per l'upload (In realtà potrebbe usare usare anche un swf ma, non avendolo mai usato, non lo so...).

    Prova a mettere un alert in fondo alla pagina newpost.php:
    codice:
    <script type="text/javascript">
    alert('News from iframe');
    </script>
    Se l'alert avviene, puoi usare "parent" per fare riferimento al documento principale, come mostrato in precedenza.

  10. #10
    Originariamente inviato da lucavizzi
    Probabilmente, il nicEditor, crea un iframe nascosto per l'upload (In realtà potrebbe usare usare anche un swf ma, non avendolo mai usato, non lo so...).

    Prova a mettere un alert in fondo alla pagina newpost.php:
    codice:
    <script type="text/javascript">
    alert('News from iframe');
    </script>
    Se l'alert avviene, puoi usare "parent" per fare riferimento al documento principale, come mostrato in precedenza.
    no niente iframe....

    se puo essere d'aiuto ti posto tutto il JS che gestice?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.