Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    140

    problema con $post di una data

    codice HTML:
    <form name="upload" method="post" action="end_chiusura.php"> 
    
    <input type="checkbox" name="data_o" value="oggi">Oggi
    
    <label for="start">Oppure indica un altra data:</label>
    
    <input type="date" name="data_d">
    
    <input class="entra" type="submit" name="invia" value="Conferma">
    
    </form>




    end_chiusura.php

    Codice PHP:

    if(isset($_POST['data_o'])){
        
    $data_o $_POST['data_o'];
    }else{
        
    $data_o "";
    }

    $data_x date('d-m-Y');

    $data_d $_POST['data_d'];

    //controlli

    if($data_o == "" && $data_d == ""){
    echo 
    "scegli almeno una data!!";    
    }

    elseif(
    $data_o != "" && $data_d != ""){
    echo 
    "non puoi scegliere oggi e in contemporanea un altra data!!";    
    }

    elseif(
    $data_o == "oggi" && $data_d == ""){
    $data_y $data_x;

    }

    elseif(
    $data_o == "" && $data_d != ""){
    $data_z $data_d;

    }

    else {

    //invio email 

    $to "gino@gmail.com";
    $subject "Chiusura negozio del giorno $data_y $data_z";
    ob_start();
    require(
    "cont_email.php");
    $message ob_get_clean();
    $from "pino@gmail.com";
    $headers "From:" $from;
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

    $finalMessage wordwrap$message75"\n" );
    mail($to,$subject,$finalMessage,$headers);

    echo 
    "EMAIL INVIATA!!";



    praticamente l utente mi deve spuntare il checkbox se la data deve essere quella odierna, oppure lasciare vuoto il checkbox e scegliermi un altra data nell'input date... la data scelta sarà poi nel subject dell'email...

    i controlli mi funzionano, ho messo un echo="data_x" e un echo"data_z" per vedere se magari c'era un problema nel passaggio dei valori, ma arrivano...il problema sta che dopo l'invio del form mi rimane una pagina vuota e non viene inviata alcuna e-mail

    (ho messo
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

    per vedere se ci sono errori ma nulla...una pagina completamente vuota, nessuna email inviata)

    dove sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    58
    Prova senza inviare la data_d e cambia in error_reporting(-1); (dovresti vedere il notice adesso, per verificare l'esistenza si usa isset).
    Un problema comune con le date è anche la diversa rappresentazione con le quali le persone la scrivono meglio utilizzare jquery date picker (il valore di data è sempre YYYY-MM-DD mentre la visualizzazione potrebbe essere diversa) https://developer.mozilla.org/en-US/...ent/input/date
    Il secondo problema il fuso orario coinciderà con quello del server? (Problema molto evidente quando dovrai confrontare due date in base anche all'ora).
    Terzo problema se presente anche millisecondi il cliente e/o il server usano il punto separatore decimale o la virgola?
    Se vuoi fare qualcosa cross browser devi impegnarti di più.
    In php la funzione time() restituisce i secondi attuali da Unix Time Stamp (UTC+0/GMT+0 php UTC non usa leap second di fatto è uguale a GMT) cioè senza alcun fuso orario (anche senza distinzione da ora legale o ora solare e senza variazioni al leap second).
    Io toglierei oggi perché inutile se l'utente non invia alcuna data e oggi di time() php, poi verifica eventualmente se la data inviata dal cliente è oggi (time php conta anche l'orario con minuti e secondi) o una data solo futura altrimenti errore.
    Ultima modifica di darbula; 29-12-2020 a 14:18

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    140
    urca non pensavo che le date potevano dare cosi tanti problemi..

    comunque ho ascoltato il tuo consiglio ho abolito quel checkbox:
    codice HTML:
    <form name="upload" method="post" action="end_chiusura.php"> 
    
    Data di chiusura: <input type="date" name="data">
    
    <input class="entra" type="submit" name="invia" value="Conferma">
    
    </form>
    Codice PHP:
    //risolto problema del YYYY-MM-DD  :D
    $data date('d-m-Y'strtotime($_POST['data']));

    if(!
    strtotime($_POST['data'])){
         echo 
    "Non dimenticare ad inserire una data di chiusura!";    
    }
    else{    


    //invio email
    $to "pino@gmail.com";
    $subject "Chiusura negozio del giorno $data";
    ob_start();
    require(
    "cont_email.php");
    $message ob_get_clean();
    $from "gino@gmail.com";
    $headers "From:" $from;
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

    $finalMessage wordwrap$message75"\n" );
    mail($to,$subject,$finalMessage,$headers);

    echo 
    "EMAIL INVIATA!";



    Adesso mi funziona ...L'unica cosa che mi piacerebbe però fare è che se l utente non mi sceglie una data, allora invece di obbligarlo a scegliere una data, automaticamente mi dà quella odierna..ho provato a fare tipo una cosa del genere ma non funziona

    Codice PHP:
    elseif(!strtotime($_POST['data'])){
      
    $data date (d-m-Y);  


    cioè quel valore $_POST['data'] che mi arriva dal form, posso cambiarlo a mio piacimento sotto una certa condizione? o sono costretto a prendermi quello che mi arriva

    non ho utilizzato time() perchè non voglio orari, minuti e secondi solo la data
    Ultima modifica di Punix; 30-12-2020 a 00:08

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