errore da campi data esplosi che contengono "-"

ciao, ho questo codice per delle date:

$parti_1 = explode('-', $_POST['data_corso_1']);
            $data_corso_1 = $parti_1[2].'-'.$parti_1[1].'-'.$parti_1[0];
            $parti_2 = explode('-', $_POST['data_corso_2']);
            $data_corso_2 = $parti_2[2].'-'.$parti_2[1].'-'.$parti_2[0];
            $parti_3 = explode('-', $_POST['data_corso_3']);
            $data_corso_3 = $parti_3[2].'-'.$parti_3[1].'-'.$parti_3[0];
            $parti_4 = explode('-', $_POST['data_corso_4']);
            $data_corso_4 = $parti_4[2].'-'.$parti_4[1].'-'.$parti_4[0];

ma provando a inserire solo la prima ricevo questo errore dalla seconda:

Incorrect date value: '--' for column 'data_corso_2' at row 1

cosa significa, che mi legge i trattini e quindi non me la accetta? le altre date in teoria possono essere opzionali, ho forse sbagliato a mettere giù il codice? devo dargli degli if per dirgli che se il campo non è riempito non deve prenderlo in considerazione?

grazie

inviato 8 anni fa
gabar-el
X 0 X

Ciao,

sì devi inserire un if che identifichi se i campi opzionali sono null oppure no, altrimenti viene eseguito il compando "explode" più la seguente che ricompone la data e che trovando i valori vuoti inserisce solo '--'.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

ho capito, ok ora lo faccio e verifico. grazie zeta!

risposto 8 anni fa
gabar-el
X 0 X

le metto giù così:

if ($_POST['data_corso_1'])
            {
            $parti_1 = explode('-', $_POST['data_corso_1']);
            $data_corso_1 = $parti_1[2].'-'.$parti_1[1].'-'.$parti_1[0];
            }

ma ricevo un errore:

Incorrect date value: '' for column 'data_corso_1' at row 1
risposto 8 anni fa
gabar-el
X 0 X

Prova sostituirlo con questo codice:

if (isset($_POST['data_corso_1']))
{
$parti_1 = explode('-', $_POST['data_corso_1']);
$data_corso_1 = $parti_1[2].'-'.$parti_1[1].'-'.$parti_1[0];
}

La funzione isset verifica se la variabile ha un valore

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

avevo già provato, ma mi restituisce questo errore:

Incorrect date value: '--' for column 'data_corso_1' at row 1
risposto 8 anni fa
gabar-el
X 0 X

Ciao,

l'unico consiglio che posso darti è di verficare il valore della variabile $_POST['data_corso_1']

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

cavolo la variabile va bene!

ho provato a mettere un else in questa maniera ma mi torna sempre lo stesso errore:

if ($_POST['data_corso_1'])
            {
            $parti_1 = explode('-', $_POST['data_corso_1']);
            $data_corso_1 = $parti_1[2].'-'.$parti_1[1].'-'.$parti_1[0];
            }
            else
            {
               $data_corso_1 = "";
            }
risposto 8 anni fa
gabar-el
X 0 X

Sai dirmi che valore ha la variabile $_POST['data_corso_1']?

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

cosa intendi per valore?

risposto 8 anni fa
gabar-el
X 0 X

mmhhh.... credo di aver combinato dei danni su un codice funzionante, ora non mi prende più nemmeno i campi successivi se non scrivo qualcosa, perchè?

cavolo.... :wallbash:

$titolo = ($_POST['titolo']);
            $titolo = htmlentities($titolo, ENT_QUOTES);
            $descrizione = ($_POST['descrizione']);
            $descrizione = htmlentities($descrizione, ENT_QUOTES);
            echo('<br />');


            if (isset($_FILES['allegato']) && $_FILES['allegato']['size'])
            {
               $allegato = "../circolari/".str_replace(' ', '_', $_FILES['allegato']['name']);
               move_uploaded_file($_FILES['allegato']['tmp_name'], $allegato);
            }
            else
            {
               $allegato = "";
            }
            
            if (isset($_FILES['allegato2']['tmp_name']))
            {
               $allegato2 = "../circolari/".str_replace(' ', '_', $_FILES['allegato2']['name']);
                  if(!move_uploaded_file($_FILES['allegato2']['tmp_name'], $allegato2))
                  {
                     $allegato2 = "";
                  }
            }
            else
            {
               $allegato2 = "";
            }
            
            if (isset($_FILES['allegato3']['tmp_name']))
            {
               $allegato3 = "../circolari/".str_replace(' ', '_', $_FILES['allegato3']['name']);
               if(!move_uploaded_file($_FILES['allegato3']['tmp_name'], $allegato3))
               {
                  $allegato3 = "";
               }
            }
            else
            {
               $allegato3 = "";
            }
            
            $iscrizione_1 = $_POST['iscrizione_1'];
            $iscrizione_1 = htmlentities($iscrizione_1, ENT_QUOTES);
            $iscrizione_2 = $_POST['iscrizione_2'];
            $iscrizione_2 = htmlentities($iscrizione_2, ENT_QUOTES);
            $tema = $_POST['tema'];
            $tema = htmlentities($tema, ENT_QUOTES);
            
            
            if (isset($_POST['data_corso_1']))
            {
            $parti_1 = explode('-', $_POST['data_corso_1']);
            $data_corso_1 = $parti_1[2].'-'.$parti_1[1].'-'.$parti_1[0];
            }
            else
            {
               $data_corso_1 = "";
            }
            if ($_POST['data_corso_2'])
            {
            $parti_2 = explode('-', $_POST['data_corso_2']);
            $data_corso_2 = $parti_2[2].'-'.$parti_2[1].'-'.$parti_2[0];
            }
            if ($_POST['data_corso_3'])
            {
            $parti_3 = explode('-', $_POST['data_corso_3']);
            $data_corso_3 = $parti_3[2].'-'.$parti_3[1].'-'.$parti_3[0];
            }
            if ($_POST['data_corso_4'])
            {
            $parti_4 = explode('-', $_POST['data_corso_4']);
            $data_corso_4 = $parti_4[2].'-'.$parti_4[1].'-'.$parti_4[0];
            }
                        
            $numero_partecipanti = $_POST['numero_partecipanti'] ? trim($_POST['numero_partecipanti']) : null;
            if ($numero_partecipanti) {
               if (!ereg("[0-9]{1,2}", $numero_partecipanti)) {
                  echo "Numero partecipanti non valido!";
                  $numero_partecipanti = null;
               }
            }
            
            $crediti = $_POST['crediti'] ? trim($_POST['crediti']) : null;
            if ($crediti) {
               if (!ereg("[0-9]{1,2}", $crediti)) {
                  echo "Crediti non validi!";
                  $crediti = null;
               }
            }
            
            $quota_iscrizione = $_POST['quota_iscrizione'] ? trim($_POST['quota_iscrizione']) : null;
            if ($quota_iscrizione = str_replace(',', '.', $quota_iscrizione)) {
               if (!ereg("[0-9]{1,3}", $quota_iscrizione)) {
                  echo "Quota iscrizione non valida!";
                  $quota_iscrizione = null;
               }
            }
            
            
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso_1, data_corso_2, data_corso_3, data_corso_4, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) 
                  VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso_1', '$data_corso_2', '$data_corso_3', '$data_corso_4', '$numero_partecipanti', '$crediti', '$quota_iscrizione', NOW())";

ho provato a inserire un isset con un else, ma nulla......

risposto 8 anni fa
gabar-el
X 0 X

Il problema è nella query di inserimento:

[tt]$sql = "INSERT INTO circolari ...[/tt]

infatti la query si aspetta tutte le date:

[tt]'$data_corso_1', '$data_corso_2', '$data_corso_3', '$data_corso_4',[/tt]

ma non è detto che ci siano, per cui dovresti creare la query dinamicamente, ovvero dovresti accodare le date nella query solo se queste sono disponibili.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

cavolo, questa non l'avrei detta!  :o

devo quindi dare dei parametri alla query, o inserire la query all'interno del php che inserisce poi i dati? ok, magari ho detto una minchiata, ma non ho idea di come si crea una query dinamica....

risposto 8 anni fa
gabar-el
X 0 X

Per query dinamica intendo dire di costruire la stringa a pezzi, da comporre a seconda dei dati inseriti dall'utente.

Un altro approccio da seguire potrebbe essere l'uso dei valori NULL da passare alla query al posto delle date mancanti.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

e non posso mettere nella query una cosa tipo seleziona se non è vuota?

io ho provato con un null così, ma niente da fare....

if ($_POST['data_corso_1'])
            {
            $parti_1 = explode('-', $_POST['data_corso_1']);
            $data_corso_1 = $parti_1[2].'-'.$parti_1[1].'-'.$parti_1[0];
            }
            else
            {
               $data_corso_1 = null;
            }
risposto 8 anni fa
gabar-el
X 0 X

non proprio, dovresti fare così:

if ($_POST['data_corso_1'])
{
   $parti_1 = explode('-', $_POST['data_corso_1']);
   $data_corso_1 = "'" . $parti_1[2].'-'.$parti_1[1].'-'.$parti_1[0] . "'";
}
else
{
   $data_corso_1 = 'NULL';
}

Nota l'aggiunta degli apici nella costruzione di $data_corso_1, ma solo quando la data non è vuota. Ovviamente questi apici vanno tolti dalla query che diventa così:

$sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso_1, data_corso_2, data_corso_3, data_corso_4, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) 
VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', $data_corso_1, $data_corso_2, $data_corso_3, $data_corso_4, '$numero_partecipanti', '$crediti', '$quota_iscrizione', NOW())";

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

grazie gianni, ma stavo chiedendomi se è una cosa normale agire in questo modo circa le date o è una soluzione per il mio caso che forse è disperato....

risposto 8 anni fa
gabar-el
X 0 X

In generale se un campo non è obbligatorio allora sul DB va messo NULL. Quindi non è un caso particolare il tuo

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

grazie delle info, ma mi sembrava strano quel procedimento circa gli apici.

risposto 8 anni fa
gabar-el
X 0 X

 tengo a precisare che sul db io ho dato null come default, non posso sfruttarlo invece di dover mettere un else?

risposto 8 anni fa
gabar-el
X 0 X

Si, puoi evitare di mettere l'else ma in quel caso dovrai far sparire dinamicamente dalla query tutti i riferimenti ai dati non inseriti dall'utente, altrimenti la query fallisce.

Il costo di questa operazione quindi potrebbe essere superiore agli ELSE

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ho capito, ora ho lo stesso problema per i campi che seguono, che sono tutti numeri e sono contraddistinti da un ereg, risolvo allo stesso modo o c'è qualcosa di meglio per questo?

$numero_partecipanti = $_POST['numero_partecipanti'] ? trim($_POST['numero_partecipanti']) : null;
            if ($numero_partecipanti) {
               if (!ereg("[0-9]{1,2}", $numero_partecipanti)) {
                  echo "Numero partecipanti non valido!";
                  $numero_partecipanti = null;
               }
            }

grazie

risposto 8 anni fa
gabar-el
X 0 X

L'istruzione che segue non ti serve a niente, tanto la query non verrà eseguita.

$numero_partecipanti = null;

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

mhhh... al momento faccio fatica anche a ricordarmi a che cavolo serve questo if:

if ($numero_partecipanti) {

che cavolo gli dico con questo? se numero partecipanti..... quindi?

cmq, ho inserito il codice così:

if ($_POST['numero_partecipanti'])
            {
            $numero_partecipanti = $_POST['numero_partecipanti'] ? trim($_POST['numero_partecipanti']) : null;
            }
            if ($numero_partecipanti)
            {
               if (!ereg("[0-9]{1,2}", $numero_partecipanti))
               {
                  echo "Numero partecipanti non valido!";
               }
            }

ma ricevo un errore e non riesco  a capire come sistemarlo, ho provato anche con un else null, ma mi sembra che sia già indicato nel ternario.... no?

errore:

Incorrect integer value: '' for column 'numero_partecipanti' at row 1

grazie

risposto 8 anni fa
gabar-el
X 0 X

Per capire il funzionamento di quei "strani" IF puoi leggere (attentamente!) qui:

http://www.phpnews.it/corsi/corso-php-base/conversione-automatica-dei-tipi-il-cast/

L'errore che ricevi invece è causato dal solito problema di cui abbiamo già parlato:

non proprio, dovresti fare così:

if ($_POST['data_corso_1'])
{
   $parti_1 = explode('-', $_POST['data_corso_1']);
   $data_corso_1 = "'" . $parti_1[2].'-'.$parti_1[1].'-'.$parti_1[0] . "'";
}
else
{
   $data_corso_1 = 'NULL';
}

Nota l'aggiunta degli apici nella costruzione di $data_corso_1, ma solo quando la data non è vuota. Ovviamente questi apici vanno tolti dalla query che diventa così:

$sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso_1, data_corso_2, data_corso_3, data_corso_4, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) 
VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', $data_corso_1, $data_corso_2, $data_corso_3, $data_corso_4, '$numero_partecipanti', '$crediti', '$quota_iscrizione', NOW())";

 :bye:

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

grazie, non collegavo la cosa  :P

ho scritto tutto così:

if ($_POST['numero_partecipanti'])
            {
            $numero_partecipanti = "'".$_POST['numero_partecipanti'] ? trim($_POST['numero_partecipanti']) : null."'";
            }
            if ($numero_partecipanti)
            {
               if (!ereg("[0-9]{1,2}", $numero_partecipanti)){
                  echo "Numero partecipanti non valido!";
               }
            }
            else
            {
               $numero_partecipanti = 'NULL';
            }

mi chiedevo se va bene dove ho inserito le graffe circa questa parte:

if ($_POST['numero_partecipanti'])
            {
            $numero_partecipanti = "'".$_POST['numero_partecipanti'] ? trim($_POST['numero_partecipanti']) : null."'";
            }

la devo chiudere forse alla fine? mi sembra funzioni in tutti e due i modi, ma avrà sicuramente una qualche differenza, o no?

ora do un occhio al link che mi hai passato per vederci più chiaro circa quegli if, grazie

 :bye:

risposto 8 anni fa
gabar-el
X 0 X

ok, ho capito (credo...) non fa altro che dire se numero partecipanti allora esegui i controlli che seguono all'interno delle graffe, che sono poi un altro if che implica a sua volta il not ereg....

thanks!!!

risposto 8 anni fa
gabar-el
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda