Visualizzazione risultati 1 fino 12 di 12

Discussione: die che non fa morire l'html!

  1. #1
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito die che non fa morire l'html!

    Ciao a tutti!
    Scusate la domanda che magari potrà sembrare banale! Però se io ho qualcosa di questo tipo
    Codice:
    Codice html
    Codice php
    Istruzione con die
    Fine codice php
    Codice html
    Ho notato che se si verifica la condizione di die il codice php viene fermato (e questo è bene), ma anche il successivo codice html non viene interpretato (e questo è male)... In alcuni casi si può risolvere applicando un filtro "manuale"... Ma come si può avere la condizione die senza che anche l'html venga sacrificato?
    Grazie!

  2. #2
    Guest

    Predefinito

    Al posto di die metti un echo o print!


    Ciao!

  3. #3
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito

    Ciao! Questo l'avevo già scritto io, ovvero mettere un filtro "manuale"... Però in questo caso non viene interrotto il codice php! O sbaglio?

  4. #4
    Guest

    Predefinito

    Usa un ciclo if/else, e nell'else ci metti il print

  5. #5
    Guest

    Predefinito

    die() è una funzione che stampa un testo e ferma il caricamento della pagina.
    In perl, per esempio, die() stampa un testo a schermo e poi interrompe l'esecuzione dello script. Quindi per forza non si visualizza la pagina. Al posto di die() metti un print e exit. Se vuoi far stampare "Errore" fai così:
    Codice PHP:
    <?php
    echo "Errore";
    exit;
    ?>

  6. #6
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito

    Grazie! Però ripeto, questo lo so fare!
    Ma è un pò artificioso come metodo, senza contare che non sempre (o almeno non facilmente) si può conoscere il risultato di un'istruzione... Ad esempio se uso un'istruzione mail come faccio poi con un if a controllare se è avvenuto correttamente? O una connessione ad un db... Io non so fare... Comunque la mia era solo una curiosità! Cioè volevo sapere se era possibile eseguire in ogni caso l'html anche avendo dei die... Altrimenti spero che non vengano mai visualizzati !

    EDIT:
    Nel frattempo che scrivevo anche gabryhacker ha risposto ! Quel metodo lo uso nei cosiddetti (o almeno così li chiamo io ) filtri! Cioè magari faccio: if(!IsSet)... ecc ecc!
    Però ad esempio come si potrebbe trasformare questo:
    Codice:
                      @mysql_connect($dbhost,$dbuser,$dbpasswd) or die("<center>Impossibile collegarsi al server</center>");
                      @mysql_select_db("$dbname") or die("<center>Impossibile connettersi al database $dbname</center>");
    Andrebbe fatto un if per ogni istruzione e poi non so se funzionerebbe sempre...
    Ultima modifica di Ufobm : 18-01-2009 alle ore 16.19.23

  7. #7
    Guest

    Predefinito

    Ma scusa, se non puoi essere sicuro del risultato o del funzionamento di una funzione o di uno script... tale script è realizzato molto ma molto male e potenzialmente pericoloso!

    Le IF sono strutture di controllo, non cicli.

    Il metodo che adotteresti con if ed echo dovresti averlo già adottato per usare il die; se così non fosse vuol dire che non c'è nessuna condizione che deve essere soddisfatta per far scattare il die, e quindi non c'è bisogno di avere altro codice php dopo il die.

    Non so se mi sono spiegato bene, ti faccio un esempio.

    Se tu usi il die() in ogni caso, cioè senza che debba per forza verificarsi una qualche situazione, vuol dire che quel die() dovrà essere comunque richiamato.
    Se, al contrario, quel die() viene usato solo al verificarsi di una certa condizione, questa condizione devi per forza di cosa controllarla con una struttura IF o simili; e in questo caso, proprio come ho scritto prima, puoi benissimo sostituire il die() con un echo e senza inserire nessun'altro codice dopo di esso.


    Ciao!
    Ultima modifica di debug : 18-01-2009 alle ore 16.30.48

  8. #8
    L'avatar di dapeco
    dapeco non è connesso Community Manager
    Data registrazione
    21-10-2003
    Residenza
    Brusasco (To)
    Messaggi
    4,909

    Predefinito

    Puoi includere nel die () il codice html da stampare in caso di errore. Es. io lo uso nel caso il db mysql sia offline o mi risponda con errori di connessione: nel die () inserisco il codice html da stampare per chiudere in modo valido la pagina e stampare che c'è stato un errore nel collegamento con il db.
    Ho visto cose che voi utenti non potreste immaginare... siti da combattimento irregolari al largo dei bastioni di Orione. E ho visto account balenare nel buio vicino alle porte di Tannhauser. E tutti quei momenti andranno perduti nel tempo come lacrime nella pioggia. È tempo di sospendere...

    ASD Brusasco - C'è altro sport oltre al calcio!

    "Io sono vivo, voi siete morti" (Philip Dick, Ubik)

  9. #9
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Ma scusa, se non puoi essere sicuro del risultato o del funzionamento di una funzione o di uno script... tale script è realizzato molto ma molto male e potenzialmente pericoloso!
    Infatti è una semplice curiosità, non credo di averne bisogno... almeno lo spero ! Però ad esempio mi è capitato una volta che senza accorgermene avevo incluso un codice in cui si poteva verificare il die nel mezzo di una pagina html e in quel caso mi visualizzava solo la parte alta! Poi ho risolto in altro modo all'epoca... Solo che adesso avevo questa curiosità!

    Inoltre, come ha detto Dapeco può esserci un qualsiasi errore in fase di connessione al db, ed è brutto bloccare tutta la pagina per questo! Anche se il codice non deve essere necessariamente fatto male ! Comuque anche io metto nei die il codice html quando questo è corto, ma è impensabile farlo per ogni die...

    Comunque per essere chiari io non cercavo una soluzione alternativa, volevo proprio poter usare il die perché è la cosa più naturale. Però non è compatibile con gli altri linguaggi diciamo!

    Debug, il discorso dell'echo al posto del die è più o meno così?
    Codice:
     @mysql_connect($dbhost,$dbuser,$dbpasswd) or echo("<center>Impossibile collegarsi al server</center>");
    Ma in questo caso si blocca lo script?

  10. #10
    Guest

    Predefinito

    Non hai capito quasi nulla (molto probabilmente colpa mia).

    Io parlavo del fatto che se trovi queste difficoltà, vuol dire che lo script è fatto male e potenzialmente pericoloso!

    Cioè, alla fine potresti anche usare un echo 'codice html' con un die o exit subito dopo, ma non è questo il discorso.

    Per gestire questo tipo di errori devi essere un pochino più parsimonioso.
    Ad esempio, senza complicarci troppo la vita, potresti usare una funzione per la connessione che restituisce un valore booleano e/o un die:

    Codice PHP:
    function conn(){
    if(
    mysql_connect(..., ..., ...)){
    echo
    'ERRORE GRAVE';
    return
    false;
    }
    return
    true;
    }

    .......

    if(
    conn()){
    // tutto lo script che interagisce con il DB
    }

    // tutto l'HTML restante
    In questo esempio stampa un messaggio di errore direttamente nella funzione, altrimenti continua con l'esecuzione dello script.

    Se hai più situazioni simili, e vuoi fare una cosa ancora più gestibile e godibile, potresti fare una funzione apposita per la stampa degli errori, con un die o exit al suo interno (ovviamente se ti serve).


    Ciao!

  11. #11
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito

    !
    Intendevi creare funzioni per gestire errori?!? In effetti non avevo capito :opss: !! Madonna, ma così diventa una cosa complicatissima! Mi ricorda i miei vecchi script in cui usavo cicli if/else uno dentro l'altro per ogni cosa! Era a dir poco ridicolo, a rileggerli mi vergogno ! Però in effetti è stato il primo modo con cui ho risolto il problema del far continuare i tag (anche se non usavo funzioni quindi veniva ancora più pastrocchiato!!!)!
    Comunque grazie per le delucidazioni, sono state utili ! Meglio non approfondire ulteriormente il discorso! Credo che il problema iniziale si possa risolvere solo come facevo già! Io mi aspettavo qualcosa tipo un @die o un tag di inclusione di script particolare ! Decisamente non pensavo che non si potesse risolvere in modo "semplice"... Mi sembrava una cavolata e infatti mi stupiva anche non aver trovato nulla in merito su internet!

    Certo che è un pochino una delusione... Il php non è poi così intelligente come pensavo !

  12. #12
    Guest

    Predefinito

    Bho, continuo a non capire dove trovi difficoltà...
    Cioè, tu dovresti richiamare il @die (come lo intendi tu per capirci) al verificarsi di un qualcosa, giusto?
    Ma come fai a determinare questo 'qualcosa'??
    Devi per forza utilizzare una qualche struttura di controllo, come ad esempio le IF!


    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •