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

    Allegare .zip a una form

    Salve a tutti....Dopo essermi rivoltato il cervello sono riuscito a trovare un compromesso per il funzionamento di un form che avevo creato in html al quale poi ho associato questo codice php per l'invio...tutto sarebbe se non fosse per il fatto che non arriva l'allegato e credo di immaginare che debba modificare il codice inserendo che tipo di file vorrei inviare nel form...a me interesserebbero i file .zip non so se in questo codice si possa impostare pure la dimensione massima di 150kb (giusto per dare un limite)....cosa e dove dovrei modificare il codice per fare che tutto vada a buon fine?

    I fatti sono questi.... se invio senza allegato il messaggio arriva senza problemi mentre se metto l'allegato il file arriva ma in ritardo e senza allegato ovviamente in piu' se l'invio me lo da corretto mi esce il messaggio che e' andato a buon fine mentre provando ad allegare qualcosa mi da questo errore:

    Warning: move_uploaded_file(attachments/) [function.move-uploaded-file]: failed to open stream: No such file or directory in D:\Inetpub\webs\miositocom\invia.php on line 11

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\PHP\upload\php2D81.tmp' to 'attachments/' in D:\Inetpub\webs\miositocom\invia.php on line 11
    Email inoltrata correttamente

    Cosa dovrei fare?

    PS= una cosa importante che mi preme moltissimo e' sapere se possibile, come, una volta premuto il tasto invio del form mi rimanga il messaggio di corretto invio o di errore nella stessa pagina dove si trova il form anziche' passare ad un'altra pagina come fa ora...Questo perche' mi diventa scomodo essendo il form integrato in una pagina chiamata contatti dove appunto nella stessa pagina oltre al form ci sono altre informazioni per cui vorrei che rimanesse ferma com'e' e che mi escano eventuali messaggi sia di errori che no nella stessa pagina...Spero di essermi spiegato in modo comprensibile....

    Grazie per l'eventuale aiuto....

    codice:
    <?php
    //Percorso dove raccoglieremo gli allegati
    $path = "attachments/";
    //Nome e Cognome
    $name = $_POST['name'];
    $surname = $_POST['surname'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    //Upload dell'allegato
    move_uploaded_file($_FILES['attachment']['tmp_name'], $path.$_FILES['attachment']['name']);
    //Messaggio
    $subject = "Questa Email contiene un allegato";
    $bodymail = "Name: ".$name." 
    
    			  Surname: ".$surname." 
    
    			  Phone: ".$phone." 
    
    			  Email: ".$email." 
    
    			  Message: 
     ".$message." 
    ";
    //Inclusione della libreria
    require_once("phpmailer/class.phpmailer.php");
    //Creiamo un oggetto PHPMailer e ne settiamo le variabili
    $mail = new PHPMailer();
    $mail->From = $email;
    $mail->FromName = $name." ".$surname;
    $mail->AddAddress("mia@mail.it");
    $mail->IsHTML(true); 
    $mail->Subject = $subject;
    $mail->Body = $bodymail;
    if($mail->AddAttachment($path.$_FILES['attachment']['name'])){
    	//Inviamo l'email
    	if($mail->Send()){
    		echo "Email inoltrata correttamente";		
    	}else{
    		echo "Errore invio mail";
    	}
    }else{
    	echo "Errore allegato";
    }
    ?>

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    intanto ti consiglierei di effettuare un controllo con is_uploaded_file prima di move_uploaded_file per maggior sicurezza.
    Inoltre se ti aspetti solo un determinato tipo di file potresti aggiungere vari altri controlli.

    Se il codice ti dice che il file non esiste un primo controllo da effettuare sarebbe verificare che nel form esista la proprietà enctype multipart come da esempio

    Codice PHP:
    <form [..] enctype="multipart/form-data"
    Fammi sapere.

    Ciao

  3. #3
    Quello di seguito e' il form e come potrai notare la proprieta' form enctype c'e' poi ho sostituito l'altro comando che mi hai suggerito e ora mi da questo errore:

    Warning: Wrong parameter count for is_uploaded_file() in D:\Inetpub\webs\soncinitraduzionicom\invia.php on line 10
    Email inoltrata correttamente...

    che devo fare?mi si stanno bruciando valangate di neuroni



    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <script language="javascript">
    function verifica(){
    name="";
    phone="";
    email="";
    request="";
    spunta="";
    if(document.TheForm.email.value==""){
    email="Enter your e-mail\n";
    document.TheForm.email.focus();
    }else if(document.TheForm.email.value.lastIndexOf("@")==-1 || document.TheForm.email.value.lastIndexOf(".")==-1){
    email="Insert valid e-mail\n";
    document.TheForm.email.focus();
    }
    if(document.TheForm.request.value==""){
    request="Insert request\n";
    document.TheForm.request.focus();
    }
    if(document.TheForm.name.value==""){
    name="Enter your name\n";
    document.TheForm.name.focus();
    }
    if(document.TheForm.phone.value==""){
    phone="Insert phone\n";
    document.TheForm.phone.focus();
    }
    if(document.TheForm.spunta.checked==false){
    spunta="Check for continue\n";
    }
    error="ERROR MISSING DATA\n";
    if((spunta!="")||(email!="")||(name!="")||(phone!="")||(request!="")){
    alert(error+name+phone+email+request+spunta)
    return false;
    }
    }
    </script>
    </head>
    <html>
    <body>
    <td width="123"></td>
      </tr>
      <tr> 
        <td height="114"></td>
        <td></td>
      </tr>
    </table>
    <table width="289" border="0" cellpadding="0" cellspacing="0">
      
      <tr> 
        <td width="289" height="464" valign="top"> <form method="post" enctype="multipart/form-data" action="invia.php" name="TheForm" id="TheForm" onSubmit="return verifica();">
            
    
    name and surname
    
              <input name="name" type="text" id="name">
              
    
              phone 
    
              <input name="phone" type="text" id="phone">
              
    
              e-mail
    
              <input name="email" type="text" id="email">
              
    
              request
    
              <textarea name="request" rows="3" id="request"></textarea>
              
    
              
    
              attachments
    
              <input type="file" name="file">
              
    
              
    
              privacy 
    
              <textarea name="privacy" id="privacy">testo sulla pryvacy</textarea>
              
    
              
    
              <input name="spunta" type="checkbox" id="spunta" value="tuodato">
              I agree </p>
            
    
     
              <input type="submit" name="Submit" value="send">
            </p>
        </form></td>
      </tr>
    </table>
    </body>
    </html>

  4. #4
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Nel tuo form..

    Codice PHP:
    <input type="file" name="file"
    nel tuo codice

    Codice PHP:
    $_FILES['[B]attachment[/B]']['tmp_name'
    Prova a modificare il nome dell'input file in attachment.

    Ciao

  5. #5
    comincia ad avere un senso ma ancora non funziona...praticamente cambiando quel parametro che mi hai indicato il form fa partire tutto regolarmente senza segnalarmi alcun errore ma in allegato non arriva nulla...Spero col tuo supporto di arrivare a una svolta...

  6. #6
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Prima di comporre l'email inserisci queste linee di codice, effettua un invio del form e posta il risultato

    Codice PHP:

    echo "<pre>";
    var_dump($_FILES);
    echo 
    "</pre>";

    echo 
    "<pre>";
    var_dump($path.$_FILES['attachment']['name']);
    echo 
    "</pre>";

    echo 
    "<pre>";
    var_dump(file_exists($path.$_FILES['attachment']['name']));
    echo 
    "</pre>";

    exit; 
    Ciao

  7. #7
    Ciao....quello che scrivi cerco di interpretarlo al meglio perche' io non mastico per niente questa cosa dei codici per cui io ho messo il codice che tu mi hai mandato come ho decifrato dal tuo messaggio e questo ne e' il risultato:

    codice:
    array(1) {
      ["file"]=>
      array(5) {
        ["name"]=>
        string(8) "mark.jpg"
        ["type"]=>
        string(10) "image/jpeg"
        ["tmp_name"]=>
        string(24) "C:\PHP\upload\php2F0.tmp"
        ["error"]=>
        int(0)
        ["size"]=>
        int(4519)
      }
    }
    string(12) "attachments/"
    bool(true)
    Io ho messo il codice come vedi nel esempio qui sotto...sperando che vada bene li' oppure se ho sbagliato indicami piu' precisamente dove inserire il codice che mi hai mandato...Grazie.

    Codice PHP:
    <?php
    //Percorso dove raccoglieremo gli allegati
    $path "attachments/";
    //Nome e Cognome
    $name $_POST['name'];
    $phone $_POST['phone'];
    $email $_POST['email'];
    $message $_POST['message'];
    //Upload dell'allegato
    move_uploaded_file($_FILES['attachment']['tmp_name'], $path.$_FILES['file']['name']);
    //Messaggio
    $subject "Questa Email contiene un allegato";
    $bodymail "Name: ".$name.

                  Phone: "
    .$phone.

                  Email: "
    .$email.

                  Message: 
     "
    .$request.
    "
    ;
    //Inclusione della libreria
    require_once("phpmailer/class.phpmailer.php");
    //Creiamo un oggetto PHPMailer e ne settiamo le variabili
    $mail = new PHPMailer();
    $mail->From $email;
    $mail->FromName $name." ".$surname;
    $mail->AddAddress("mia@mail.it");
    $mail->IsHTML(true); 
    $mail->Subject $subject;
    echo 
    "<pre>"
    var_dump($_FILES); 
    echo 
    "</pre>"

    echo 
    "<pre>"
    var_dump($path.$_FILES['attachment']['name']); 
    echo 
    "</pre>"

    echo 
    "<pre>"
    var_dump(file_exists($path.$_FILES['attachment']['name'])); 
    echo 
    "</pre>"

    exit;
    $mail->Body $bodymail;
    if(
    $mail->AddAttachment($path.$_FILES['file']['name'])){
        
    //Inviamo l'email
        
    if($mail->Send()){
            echo 
    "Email inoltrata correttamente";        
        }else{
            echo 
    "Errore invio mail";
        }
    }else{
        echo 
    "Errore allegato";
    }
    ?>

  8. #8
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ecco qui il problema

    Codice PHP:
    if($mail->AddAttachment($path.$_FILES['file']['name'])){ 
    Sostituisci 'file' con 'attachment' come hai già fatto col resto.

    Togli pure il codice di controllo che ti avevo suggerito e prova.

    Ciao

  9. #9
    Ciao...il form viene spedito ma purtroppo non arriva alcun allegato nonostante non dia alcun messaggio di errore...una cosa non mi e' chiara anche se ho provato e il risultato e' lo stesso (nessun errore) ma non arriva ugualmente l'allegato con la mail...comunque e' questa riga:

    Codice PHP:
    move_uploaded_file($_FILES['attachment']['tmp_name'], $path.$_FILES['file']['name']); 
    qui non mi hai indicato di mettere "attachment" al posto di file.... devo metterlo pure li oppure no?...Io ho fatto una prova e come ho detto sopra non succede nulla ugualmente per cui l'ho riportato come lo vedi ora nella stringa di codice...

    Ma come e' possibile che tutto parte regolarmente ma alla fine invece non arriva l'allegato...nel caso non partisse dovrebbe avvisare tramite l'errore o no?

  10. #10
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Allora,
    cerco di chiarirti come funziona la questione:

    quando invii un form con upload di file, nel server alla ricezione viene creato un array superglobale $_FILES, contenente i dati degli input type="file".

    Quindi se il tuo input di tipo 'file' ha la proprietà name 'attachment', all'interno di files avrai la chiave 'attachment'.

    Ho notato solo ora rileggendo il dump di poco fa che il tuo $_FILES ha la chiave 'file', ciò indica che nel tuo form html la proprietà name del tuo input di tipo "file" è "file", ovvero

    Codice PHP:
    <input type="file" name="file"
    Correggimi se sbaglio.

    Quindi agisci in questo modo:

    1) decidi il nome (attributo name) del tuo input tipo file, per semplicità lo chiamerei 'attachment', copia come qui di seguito

    Codice PHP:
    <input type="file" name="attachment" /> 
    2) Nel codice php sostituisci le parti

    Codice PHP:
    $_FILES['file'
    con

    Codice PHP:
    $_FILES['attachment'
    Inoltre sarebbe sempre il caso di verificare l'esistenza delle chiavi negli array e l'esistenza dei files che si va a manipolare prima di utilizzarli, non ho sottolineato la questione solo perchè capisco che sei alle prime armi e non volevo complicare ulteriormente la faccenda.

    Prova quindi a seguire i due passaggi di sopra e fammi sapere.

    Ciao

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 © 2025 vBulletin Solutions, Inc. All rights reserved.