form in caso di errore sperzza il codice creando errori di formattazione

ciao, ho un errore un pò particolare, spero di riuscire a farmi capire, se no vedo di caricare un link al file.

ho una pagina di un form che carica vari campi, se tutto va bene non ci sono ovviamente problemi, mentre se mi tornano degli errori il codice (visualizzato da browser) di origine risulta spezzato alla fine dell'errore, manca cioè l'ultima parte di html che non visualizzo e fa si che ci sia qualche piccolo errore a livello di formattazione. Qualcuno sa darmi qualche dritta per quello che magari è un problema noto o posto il codice?

grazie

inviato 8 anni fa
gabar-el
X 0 X

Sì certo che è un problema noto  :) semplicemente il tuo script viene eseguito fino ad un punto dove si verifica l'errore e da lì si blocca.

risposto 8 anni fa
Marco Grazia
X 0 X

scusa, ma questo direi che lo avevamo capito tutti....  :knuppel:

io volevo sapere se possibile come risolvere

grazie

 :bye:

risposto 8 anni fa
gabar-el
X 0 X

E be ma se non dai nessun dato specifico come pensi che ti si possa aiutare?  :tichedoff:

risposto 8 anni fa
Marco Grazia
X 0 X

hai ragione!

http://tinylink.com/?nMNz6zAzmW

qui si può vedere il codice, ma a me sembra tutto ok....

grazie

risposto 8 anni fa
gabar-el
X 0 X

Inizia a togliere le righe vuote dopo ?> e prima della doctype, non ci devono essere!

Poi quando parli di errori spezzati, parli del testo che deve essere formattato dalle classi che hai chamato avvisi? Perché se è così, tieni presente che l'istruzione die del php è simile ad un blocco dello script, cioè interrompe qualsiasi emissione da parte del server, in poche parole mostra ciò che deve mostrare e si ferma lì.

Siccome l'xhtml (e in genere tutto ciò che passa sul protocollo http) arriva al tuo browser come uno streaming di caratteri, dopo il die non arriva nulla se non il segnale di stop, quindi manca tutto il resto della pagina.

Probabilmente ciò blocca anche la formattazione a livello di browser, prova anche con altri browser se non l'hai già fatto per vedere se da lo stesso errore.

Ultima cosa, dai un comando ob_start() per inviare comunque tutto il flusso in streaming così che forse risolvi il problema dei die, oppure più semplicemente cambia tecnica, magari usando un ciclo try {} catch () {}

in try { .... metti le istruzioni da controllare } catch (Exception $e) { ... le istruzioni di controllo dell'errore } poi qui il flusso riparte.

risposto 8 anni fa
Marco Grazia
X 0 X

grazie delle risposte Marcolino,

ho provato con altri browser, ma è uguale, ho tolto le righe vuote e inserito ob_start, ma non camiba nulla. Il mio problema consiste nel fatto che ho un border che fa da cornice al contenitore, ma avendo il codice spezzato mi rimane solo nel header, il resto va bene, ho solo questo problema, che è dato dal fatto che appunto come dici tu c'è un blocco, e la chiusura del div manca, lo vedo visualizzando il codice dal browser....

come cavolo posso risolvere? non è il massimo sta cosa, anche se non è la morte di nessuno, ma principalmente è per capire, credo che imparando a risolvere queste piccolezze, si impari molto, almeno parlo per me che non so tanto....

grazie, ciao

risposto 8 anni fa
gabar-el
X 0 X

Allora la cosa che puoi fare è riprodurre l'errore e guardare l'html così come ti viene fuori e cercare le differenze con la pagina che volevi ottenere. E' un po' come sulla settimana enigmistica, aguzza la vista e cerca le differenze :) davvero non c'è altro da fare per capire dove non funziona.

risposto 8 anni fa
Marco Grazia
X 0 X

stavo provando sbagliano appositamente il numero dei partecipanti e mettendo per es. 333. questo è il mio codice:

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 '<p class="avvisi">Numero partecipanti non valido!</p>';
               }
            }
            else
            {
               $numero_partecipanti = 'NULL';
            }

ma non mi torna numero partecipanti non valido, ma solo il not result di fine form:

if(!$result) {
               die('<p class="avvisi">Inserimento dati non valido, controlla di aver inserito i dati correttamente</p>' . mysql_error());
            }

perchè? che ci sia qualche errore inerente a questo?

grazie

risposto 8 anni fa
gabar-el
X 0 X

Ma questo dato: if ($numero_partecipanti) come è restituito? Se non ricordo male un dato è nullo (false) se 0 e positivo (true) se 1, tutti gli altri valori sono indefiniti. Ma non ti conviene controllare meglio ciò che restituiscono le variabili?

risposto 8 anni fa
Marco Grazia
X 0 X

non ho capito bene cosa mi hai chiesto, ripeto, ho messo mano a php solo da un paio di mesi. Io posso dirti che il form funziona. Ma ora appunto ho veduto che se inserisco un valore non valido in quel campo non ricevo il messaggio di errore che dovrei ricevere, cosa dovrei fare, un echo di quella variabile per vedere che mi da?

grazie

risposto 8 anni fa
gabar-el
X 0 X

E' quello che sto cercando di dirti anche io :) il punto è che lo script si ferma lì dove ho evidenziato per alcuni valori.

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 '<p class="avvisi">Numero partecipanti non valido!</p>';
    }
} else {
    $numero_partecipanti = 'NULL';
}
if(!$result) {
    echo '<p class="avvisi">Inserimento dati non valido, controlla di aver inserito i dati correttamente</p>' . mysql_error());
    halt();
}

$numero_partecipanti non è una funzione booleana e quindi non viene sempre risolta l'espressione.

Inoltre non è corretto nemmeno questo:    $numero_partecipanti = 'NULL'; null va senza apici.

credo che il tuo script per funzionare dovrebbe essere corretto così:

if ($_POST['numero_partecipanti']) {
    $numero_partecipanti = $_POST['numero_partecipanti'] ? "'".trim($_POST['numero_partecipanti'])."'" : null;
} if ($numero_partecipanti > 0) {
    if (!ereg("[0-9]{1,2}", $numero_partecipanti)){
       echo '<p class="avvisi">Numero partecipanti non valido!</p>';
    }
} else {
    $numero_partecipanti = null;
}
if(!$result) {
    echo '<p class="avvisi">Inserimento dati non valido, controlla di aver inserito i dati correttamente</p>' . mysql_error());
    exit;
}
risposto 8 anni fa
Marco Grazia
X 0 X

grazie della risposta marcolino. Come mi hai suggerito però ricevo degli errori che prima non ricevevo, sia che metta un numero di partecipanti altissimo (il campo è tinyint), sia che lo metta corretto. Inoltre non risolvo i problemi di base circa la formattazione. come mai un inserimento exit alla fine? e come mai null invece che NULL?

l'errore che mi torna è questo:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' NULL, NULL, NOW())' at line 2

grazie

risposto 8 anni fa
gabar-el
X 0 X

Come mai null invece che NULL, be non pensavo che inserivi direttamente una variabile proveniente da $_POST dentro una query al database, credevo fosse un valore per il php non per una query, rimettila a posto visto che l'errore che ricevi è SQL.

Perché exit al posto di die (avevo persino scritto halt per errore) non lo so sono equivalenti, forse perché preferisco "uscire" che "morire"  ;)

risposto 8 anni fa
Marco Grazia
X 0 X

ok grazie, ho ripristinato, ma circa il mio errore non sai dirmi niente?

grazie cmq....

risposto 8 anni fa
gabar-el
X 0 X

Francamente a questo punto non capisco se il tuo è un problma di php o di sql

risposto 8 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda