Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  1. #1

    non scrive email nel file

    ciao ho fatto questo piccolo script ma non vanno due cose:

    . la email non viene scritta (l ora si)
    . l'ora è indietro di 2 ore dal fuso italia

    dove sbaglio?

    <body>
    <?php
    if(!$_POST){
    header('Content-type: text/html; charset=utf-8');
    ?>


    <form action="index.php" method="post" style="text-align:center">
    <p>
    <input name="email" type="text" size="40" placeholder="email" />
    </p>
    <p>
    <input type="submit" value="Invia dati" onClick="this.disabled=true; this.value='Attendi sto inviando';this.form.submit();" />
    </p>
    </form>
    </p>
    <?php


    // QUESTE RIGHE SALVANO LA EMAIL SU FILE DI TESTO DATI.TXT
    // cosi inserisce email= "$email\n ";
    // cosi inserisce email,ora= $data = "$email, ".date("d/m/Y H.i", time())."\n";


    $email = $_POST['email'];
    $data = "$email, ".date("d/m/Y H.i", time())."\n";
    $fh = fopen("dati.txt", "a");
    fwrite($fh, $data);
    //close the file
    fclose($fh);


    }
    ?>


    </body>

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    La parte dopo il form deve stare fuori dall'if, nel ramo else, altrimenti viene eseguita solo quando NON invii i dati, dunque in quel caso $_POST['email'] ancora non esiste.

    L'ora dipende dalle impostazioni del server che usi.
    Ultima modifica di Alhazred; 15-05-2019 a 20:31

  3. #3
    perdonami ho provato varie volte ma non scrive. la email
    mi puoi dire nel codice dove devo correggere e scrivere il pezzo corretto?
    grazie mille

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Intanto io
    if ( ! $_POST )

    lo sostituirei con
    if ( ! isset($_POST) )

    quindi
    Codice PHP:
    <?php
    // se i dati post non sono ancora stati inviati devi mostrare il form per farlo
    if ( ! isset($_POST) )
    {
    ?>
        <form action="index.php" method="post" style="text-align:center">
        <p>
            <input name="email" type="text" size="40" placeholder="email" />
        </p>
        <p>
            <input type="submit" value="Invia dati" onClick="this.disabled=true; this.value='Attendi sto inviando';this.form.submit();" />
        </p>
        </form>
    <?php
    }
    else
    {
        
    // qui i dati post essitono, quindi li puoi elaborare
        
    $data $_POST['email'] . ' ' date("d/m/Y H.i"time())."\n";
        
    $fh fopen("dati.txt""a");
        
    fwrite($fh$data);
        
    //close the file
        
    fclose($fh);
    }
    ?>

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Non mi fa modificare, aggiungo qui.

    Per come è scritto il form, alla pressione del pulsante submit, la pagina viene ricaricata, quindi il disabled=true che hai messo non avrà l'effetto che speri.
    Il pulsante verrà disabilitato nell'istante della pressione, ma subito dopo la pagina sarà ricaricata e il pulsante sarà di nuovo disponibile.
    Se vuoi fare che il pulsante resti disabilitato c'è da applicare un approccio differente, ovvero inviare tramite AJAX i dati ad uno script PHP che farà il lavoro e in tal caso l'if/else non servirà più.
    Se hai intenzione di fare così, fa una ricerca del tipo "ajax form php" troverai tantissimi tutorial già scritti e ben spiegati, non è una cosa velocissima da riscrivere qui.

    Altra cosa, ma vale solo se non vuoi fare come ti ho spiegato qui sopra, la struttura if/else farà in modo che al submit del form e al conseguente ricaricamento della pagina, il form non comparirà perché sta dentro l'if e dopo il submit l'if è falso e si finirà nell'else che scriverà il file, ma lascerà la pagina bianca.
    Se vuoi che compaia qualcosa, tipo un messaggio di successo, basta mettere un echo dopo la riga con fclose()
    Ultima modifica di Alhazred; 16-05-2019 a 09:33

  6. #6
    intanto grazie del messaggio ma:

    in locale da errore:
    Notice: Undefined index: email in C:\xampp\htdocs\test\dati.php on line 19

    su hosting appena carico la pagina vedo solo bianco.

    cosa succede?

    puoi dirmi altrimenti come farlo in due pagine separate?
    va bene lo stesso
    grazie

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    dati.php che pagina è?
    Nel form di cui hai postato il codice i dati li invii a index.php

    Per farlo in due pagine devi fare così:
    - in una pagina metti solo il codice del form e nell'action metti il nome del file .php dove metterai il codice php che riceverà i dati
    - in un secondo file (col nome che metterai anche nell'action del form) ci metti il codice php che ora sta dentro al ramo else del codice che ti ho postato

  8. #8
    nella stessa pagina non riesco a farlo funzionare. ho risolto facendolo in due pagine.
    ti chiedo ultima cosa.
    dopo l invio form si apre dati.php che scrive su dati.txt
    siccome è vuota la pagina come posso fare un redirect appena dopo sccritto nel file?
    grazie mille

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Alla fine del codice metti
    codice:
    header("Location: http://www.tuosito.tld/la_pagina_che_vuoi.php");
    N.B. prima di questa riga non deve esserci alcun output tipo echo o altro, se così non fosse otterrai un errore "header already sent".

  10. #10
    ora funziona tutto perfettamente. ti ringrazio tantissimo

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