Visualizzazione risultati 1 fino 13 di 13

Discussione: Form non funzionante (era "Dove sbaglio?")

  1. #1
    Guest

    Predefinito Form non funzionante (era "Dove sbaglio?")

    ciao a tutti, non riescoa capire come mai questo codice prima andava bene, ora non da alcun segno di vita...

    Codice PHP:
    <form enctype="multipart/form-data" method="post" action="aoe2.php">
    <table width="99%" border="1">
    <tr>
    <td width="34%">#Nome_File:</td>
    <td width="66%"><input type="file" name="nomefile"></td>
    </tr>
    <tr>
    <td>#Tipo_File:</td>
    <td><input type="radio" name="radiobutton" value="1">
    Scenario
    <input type="radio" name="radiobutton" value="2">
    Campagna
    <input type="radio" name="radiobutton" value="3">
    Altro</td>
    </tr>
    <tr>
    <td>#Titolo_File:</td>
    <td><input type="text" name="titolo"></td>
    </tr>
    <tr>
    <td>#Mittente:</td>
    <td><input name="text" type="text" nome="mittente"></td>
    </tr>
    </table>
    <p>
    <input type="submit" name="Submit" value="#Invia">
    </p>
    </form>

    <p><font face="Trebuchet MS" color="#FFFFFF" size="4">#Age_of_Empires_2</font></p>
    <p><font color="#FFFFFF"><a href="#" onclick="scambio('modulo'); return false">#Invia file.</a></font></p>

    <?
    $conn
    = mysql_connect("localhost", "UNAME", "PW")
    or die(
    "Connessione non riuscita: " . mysql_error());
    mysql_select_db("my_lsdfreetime",$conn);


    if (
    $_POST['nomefile'] == "") {
    echo
    "Inserisci il file";
    exit();
    }
    if (
    $_POST['radiobutton'] == "") {
    echo
    "Seleziona il tipo di file";
    exit();
    }
    if (
    $_POST['titolo'] == "") {
    echo
    "Inserire il titolo che vuoi visualizzare";
    exit();
    }
    if (
    $_POST['mittente'] == "") {
    echo
    "Inserisci il tuo nome";
    exit();
    }


    $nomefile=$_POST['nomefile'];
    $radiobutton=$_POST['radiobutton'];
    $titolo=$_POST['titolo'];
    $mittente=$_POST['mittente'];
    $uploaddir="/upload/aoe/";
    $query="INSERT INTO aoe (nomefile, tipo, titolo, mittente) VALUES ('$nomefile', '$radiobutton', '$titolo', '$mittente')";
    $set_result=mysql_query($query) or print("<br />Query non eseguita");
    if(!
    set_result)
    die(
    "<br />ERRORE contattare me@altervista.org");
    else {
    echo
    "";
    copy($nomefile,$uploaddir);
    unlink($nomefile);

    $miamaill="me@altervista.org";
    $oggetto="nuovo file inserito";
    mail($miamaill, $oggetto, $nomefile, $mittente);
    }

    mysql_close($conn);


    ?>

  2. #2
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Uhm, l'occhio mi è caduto qui:
    if(!set_result)

    forse è meglio inserire il $ davanti alla variabile
    if(!$set_result)
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  3. #3
    Guest

    Predefinito

    no, non è quello il problema...
    non invia nulla cmq...
    non funziona, non da echo se i campi non vengono compilati, non da errori, non da messaggi di successo, ne invia i files :(

  4. #4
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Ho capito, è cmq una cosa che correggerei no?
    Per il resto.. che dire la gestione è brusca proprio, con quegli exit().. che troncano a metà la pagina html bah..
    Magari dacci il link dove gira così c'è qualche indizio in più..
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  5. #5
    Guest

    Predefinito

    no no l'errore che mi hai corretto tu, l'ho modificato, grazie.
    ma il resto non va :(

    http://lsdfreetime.altervista.org/aoe2.php

  6. #6
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Ok trovato:

    <td><input name="text" type="text" nome="mittente"></td>

    nome, in italiano, ovviamente non ce lo vedo bene come standard per l'HTML
    mentre il name di quella casella risulta il primo che hai dato per errore -al posto di type, name="text"-
    quindi $_POST['mittente'] sarà sempre vuoto e quindi ti fa SEMPRE l'exit -ripeto comunque discutibile la gestione, sarebbe gradevole terminare l'html della pagina chiudendo i tag body e html.

    Insomma, in poche parole correggi in:
    <td><input type="text" name="mittente"></td>
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  7. #7
    Guest

    Predefinito

    intanto grazie per l'aiuto, ma mi chiedo 2 cose:
    1) come mai non ricevo i messaggi di echo
    2) che intendi per chiusura brutale e chiusura dei tag?
    3) lo script ora va ma funziona male.
    ho dedotto che l'exit a valle di ogni controllo forzasse l'uscita dal codice e quindi smettesse l'elborazione.
    commentandolo ho ottenuto che lo script proceda lanciando solo i messaggi di errore invece che interrompersi.
    ora funziona solo che:
    a) i messaggi arrivano subito al caricamento della pagina
    b) se dei campi sono lasciati vuoti da l'errore NON solo sul primo campo lasciato incompleto, ma su tutti
    c) ad ogni errore, invece di mantenere la pagina stessa, l'aggiorna e la ricarica con tutti i campi da reinserire.. se usassi "print()"?
    d) i dati vengono inviati COMUNQUE, anche se vuoti
    quindi la domanda è: non c'è un modo per implementare meglio il codice, magari avviandolo solo al click del pulsante SUBMIT?
    grazie mille per il supporto finìora dato!!!
    Ultima modifica di lsdforum : 03-03-2006 alle ore 21.55.37

  8. #8
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Per tutte le domande, è conveniente cmq che ci riproponi il nuovo codice modificato.

    1) QUALI messaggi di echo? se ti riferisci a quelli sui campi non compilati io li vedo eccome, stanno i cima alla pagina, uno appiccicato all'altro.

    2) beh, la struttura di una pagina html inizia con un tag <html> aperto e questo viene "chiuso" alla fine con </html> e lo stesso per il tag body. Se fai exit() abbandoni lo script ed è quindi impossibile chiuderli. Personalmente non uso MAI exit in uno script, dovresti piuttosto fare un controllo più accurato, per es. cerchi se la size dell'array $_POST è maggiore di 0 allora valuti cosa ti è arrivato, altrimenti vuol dire che nessuno ti ha postato nulla. Come hai scritto ora appena si visita la pagina ti segnala che non hai inserito i campi. Ti consiglio di cercare su google qualche script sulla validazione di un form, ce ne sono a miliardi, cerca "php form validation".

    3) scritto male = funziona male :) segui il consiglio sopra

    a) ovvio, appunto come sopra
    b) non mi sembra, almeno ora che vedo
    c) ma è normale, che i dati vengano inviati allo script stesso non è che mantiene la stessa pagina, il submit invia comunque i dati al server. Se tu nel tuo script ho hai cura di scriverci i dati che ti vengono inviati -anche parziali- è ovvio che ti ritrovi il form vuoto. Spiego se scrivi solo:
    <input type="text" name="titolo">
    senza aggiungerci una cosa tipo value="<?=$valoreCampoInviato?>"
    è normale che vedi tutti i valori vuoti.

    d) eh certo.. se non lo vieti tu il submit a campi vuoti chi dovrebbe farlo? dovresti implementare una funzione javascript che all'evento onsubmit del form
    <form ... onsubmit="return controllavalori()">
    controlla i valori del form, se sono tutti vuoti allora fa
    return false;
    così l'operazione di submit viene abortita.

    Insomma ci sono tecniche molto precise per il submit dei dati, lo script che hai postato non ne possiede alcuna, quindi il consiglio è sempre lo stesso studiati la cosiddetta "form validation", sia client-side (javascript) che server-side (php), alla base di tutte le applicazioni web e interazioni client-server, anche le più semplici. Poi avendo ben capito un esempio le implementi man mano.
    Ciao
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  9. #9
    Guest

    Predefinito

    perfetto, grazie mille.
    è bastato "validation form" per darmi un buon inizio di ricerca.
    quello è il primo script che ho riscrittop da solo, una settimana fa non sapevo neppure come creare un form, il fatto di riuscire ad inviare dei dati ad un db sql è per me già un gran risultato, come pure riuscire a capire quello che mi dici senza aver mai letto nemmeno mezza guida.
    sei stato PREZIOSO, grazie mille.

    PS: ho scovato una golosa funzione php:
    Codice PHP:
    if(empty($xxx) || empty($yyy) || empty($zzz) || empty($ttt)) {
    echo
    "ho trovato la soluzione?"
    che ne dici?

    il codice vorrebbe essere questo, ma così non funziona:
    Codice PHP:
    <?
    $conn
    = mysql_connect("localhost", "lsdfreetime", "******")
    or die(
    "Connessione non riuscita: " . mysql_error());
    mysql_select_db("my_lsdfreetime",$conn);


    $nomefile=$_POST['nomefile'];
    $radiobutton=$_POST['radiobutton'];
    $titolo=$_POST['titolo'];
    $mittente=$_POST['mittente'];
    $uploaddir="membri/lsdfreetime/upload/aoe/";

    //controllo form
    if(empty($nomefile) || empty($radiobutton) || empty($titolo) || empty($mittente)) {
    echo
    "Devi inserire tutti i campi prima di procedere";
    }
    else{
    $query="INSERT INTO aoe (nomefile, tipo, titolo, mittente) VALUES ('$nomefile', '$radiobutton', '$titolo', '$mittente')";
    $set_result=mysql_query($query) or print("<br />Query non eseguita");
    if(!
    $set_result)
    die(
    "<br />ERRORE contattare lsdfreetime@altervista.org");
    else {
    echo
    "File Inviato";
    copy($nomefile,$uploaddir);
    unlink($nomefile);
    $miamaill="lsdtfreetime@altervista.org";
    $oggetto="nuovo file inserito";
    mail($miamaill, $oggetto, $nomefile, $mittente);
    }
    }

    mysql_close($conn);


    ?>


    altrimenti ho trovato una validazione javascript:
    Codice HTML:
    <script language="JavaScript" type="text/javascript">
    <!--
    function controlla ( form )
    {
    
      if (form.nomefile.value == "") {
        alert( "Devi inserire un file." );
        form.nomefile.focus();
        return false ;
      }
       if (form.radiobutton.value == "") {
        alert( "Devi selezionare il tipo di file" );
        return false ;
      }
       if (form.titolo.value == "") {
        alert( "Inserisci un titolo per il tuo file" );
        form.nomefile.focus();
        return false ;
      }
       if (form.mittente.value == "") {
        alert( "Inserisci il tuo nome." );
        form.mittente.focus();
        return false ;
      }
    
      return true ;
    }
    //-->
    </script>
    che funziona...

    c'è solo un gRAVE problema:
    NON copia il file dall'harddisk nel mio spazio web :(
    come posso fare?
    uso il cmonado copy() ma non va :(
    il path è $uploaddir
    Ultima modifica di heracleum : 08-03-2006 alle ore 01.19.18 Motivo: censura dati personali

  10. #10
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Ti manca lo slash / all'inizio della path:
    $uploaddir="membri/lsdfreetime/upload/aoe/"

    modifica in

    $uploaddir="/membri/lsdfreetime/upload/aoe/"
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  11. #11
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da heracleum
    Ti manca lo slash / all'inizio della path:
    $uploaddir="membri/lsdfreetime/upload/aoe/"

    modifica in

    $uploaddir="/membri/lsdfreetime/upload/aoe/"
    E se anche così non funziona basta che aggiungi 2 dopo membri.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  12. #12
    Guest

    Predefinito

    ma l'espressione copy() è scritta bene?
    come mai in altri script la destinazione è atricolata in molteplici stringhe?
    e come mai lo script di controllo non controlla che almeno un radiobutton sia selezionato?
    funziona con tutti tranne che con i radio..

    PS: anchemcon lo slash, NON funziona, non mi copia i files nello spazio :(
    le cartelle sono tutte 777
    Ultima modifica di lsdforum : 07-03-2006 alle ore 20.23.43

  13. #13
    Guest

    Predefinito

    graz9ie hera per la censura ;)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •