PDA

Visualizza versione completa : [PHP] Catturare messaggi mysql


Alhazred
23-03-2009, 13.51.20
Ho un form sul quale si pu inserire una data tramite 3 menu <select> (giorno, mese, anno), dovrei fare controlli in javascript per vedere se la data immessa coerente o no, ad esempio che non si inserisca 30 Febbraio (semplice), o che si inserisca 29 Febbraio per un anno non bisestile (pi rognoso).

Dal momento che mysql lo fa di suo questo controllo all'inserimento, pensavo di catturare il messaggio d'errore ritornato, far leggere questo a PHP e vedere da qui se il problema stata la data.
Non so per come leggere i messaggi d'errore generati da mysql, c' una funzione che pu aiutarmi?

LoryOne
23-03-2009, 14.51.22
Se l'anno modulo 4 da come risultato 0, vuol dire che l'anno bisesto (anno funesto). Infatti, vi un anno bisetile ogni 4.
Prova. il 1972 era bisestile, cos come il 1976, il 2000, ecc

Alhazred
23-03-2009, 15.21.19
Ho risolto con la funzione mysql_error() e poi una ricerca all'interno della stringa ottenuta per vedere se c' contenuta la frase "Incorrect date value".
Funziona :)

Gergio
23-03-2009, 15.21.58
In realta' c'e' un'eccezione per gli anni "secolari" (quelli che finiscono con 00):
Un anno bisestile se il suo numero divisibile per 4, con l'eccezione che gli anni secolari (quelli divisibili per 100) sono bisestili solo se divisibili per 400

=> o verifichi anche questa condizione, oppure puoi crearti una funzione che ti restituisca, dato l'anno, il numero di giorni di febbraio: se sono 29, l'anno e' bisestile ;)
$giorni=cal_days_in_month(CAL_GREGORIAN,2,$anno);

Alhazred
23-03-2009, 20.18.10
A fare tutti i controlli sulla data ci pensa mysql quando faccio l'insert o l'update sulla tabella, per verificare che in caso di errore la causa sia stata o no la data mi basta leggere il messaggio d'errore che genera mysql, se pu interessare controllo cos:

if(!mysql_query($query,$db)) { //non avvenuto l'inserimento
$data_errata = "Incorrect date value"; // parte del messaggio che genera mysql in caso di data errata

//controllo se il messsaggio di errore di mysql contiene la stringa $data_errata
if (strlen(stristr(mysql_error($db),$data_errata))>0) {
print "La data inserita non e' corretta";
}
}