Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    23

    Exit() ha altri effetti oltre a bloccare l'esecuzione di un file incluso?

    Qui c'è un semplice esercizio dove vengono mostrati a video i dati dal database in una tabellina HTML.
    Ogni riga ha anche un pulsante Modifica ed uno Elimina, che rintracciano l'ID di riferimento.
    C'è anche un link per inserire un nuovo elemento.
    Funziona tutto correttamente, tranne Modifica.

    Codice PHP:
    //Ometto connessione e inclusioni varie

    //Modifica//
    if(isset($_POST['action']) and $_POST['action']=='Modifica')
    {
     include 
    'formadd.html.php';
     exit();
     include 
    'modifica.php';
     
    header('Location: .');
     exit();
    }

    //Elimina//
    if(isset($_POST['action']) and $_POST['action']=='Elimina')
    {
     include 
    'elimina.php';
     
    header('Location: .');
     exit();
    }

    //inserimento nuovo annuncio//
    if(isset($_GET['add']))
    {
     include 
    'formadd.html.php';
     exit();

     if(isset(
    $_POST['descr']))
     {
     include 
    'inserimento.php';
     
    header('Location: .');
     exit();
     }
    }

    //Ometto Visualizzazione risultati. 
    La cosa che mi lascia perplesso è che l'eliminazione funziona, ed utilizza la stessa ID di POST che utilizzerebbe la modifica. Il codice di 'modifica.php' è questo:

    try
    {
    $sql='UPDATE avvist SET descriz=:descriz WHERE id=:id';
    $s=$pdo->prepare($sql);
    $s->bindValue(':descr', $_POST['descr']);
    $s->bindValue(':id', $_POST['id']);
    $s->execute();
    }
    // catch ecc

    Ho provato anche a modificare manualmente sia la id che la descriz con valori discreti e togliendo quindi sia variabili post che prepare/bindvalue ed utilizzando il metodo exec();. Niente. Non considera proprio i valori, insomma ne deduco che se neanche funziona con valori discreti non includa a prescindere 'modifica.php'. Il file è nella stessa cartella e nominato correttamente anche per l'estensione.


    Non so che altro pensare se non ad altre funzionalità di exit() che non conosco, anche perchè non esegue neanche header location (fatto prove con istruzioni in un blocco successivo che usassero variabili POST, che sarebbero state cancellate se header location fosse stato eseguito, invece le istruzioni provate funzionavano, facendo emergere la non esecuzione di header location).

    Cos'ha che non va?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    Codice PHP:
    //Ometto connessione e inclusioni varie

    //Modifica//
    if(isset($_POST['action']) and $_POST['action']=='Modifica')
    {
     include 
    'formadd.html.php';
     
    //exit();
     
    include 'modifica.php';
     
    header('Location: .');
     exit();
    }

    //Elimina//
    if(isset($_POST['action']) and $_POST['action']=='Elimina')
    {
     include 
    'elimina.php';
     
    header('Location: .');
     exit();
    }

    //inserimento nuovo annuncio//
    if(isset($_GET['add']))
    {
     include 
    'formadd.html.php';
     
    //exit();

     
    if(isset($_POST['descr']))
     {
     include 
    'inserimento.php';
     
    header('Location: .');
     
    //exit();
     
    }
    exit();
    }

    //Ometto Visualizzazione risultati.  

    eXvision

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    23
    Quote Originariamente inviata da brodik Visualizza il messaggio
    Codice PHP:
    //Ometto connessione e inclusioni varie

    //Modifica//
    if(isset($_POST['action']) and $_POST['action']=='Modifica')
    {
     include 
    'formadd.html.php';
     
    //exit();
     
    include 'modifica.php';
     
    header('Location: .');
     exit();
    }

    //Elimina//
    if(isset($_POST['action']) and $_POST['action']=='Elimina')
    {
     include 
    'elimina.php';
     
    header('Location: .');
     exit();
    }

    //inserimento nuovo annuncio//
    if(isset($_GET['add']))
    {
     include 
    'formadd.html.php';
     
    //exit();

     
    if(isset($_POST['descr']))
     {
     include 
    'inserimento.php';
     
    header('Location: .');
     
    //exit();
     
    }
    exit();
    }

    //Ometto Visualizzazione risultati.  

    Huh? Ti ringrazio ma, puoi fornirmi una spiegazione? Se no non capisco come mai e indubbiamente sbaglierei di nuovo in seguito, grazie!

  4. #4
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    Come riporta il manuale su php.net:

    exit() terminates execution of the script. Shutdown functions and object destructors will always be executed even if exit is called.

    Per cui se lo utilizzi prima di terminare l'esecuzione della porzione di codice php che ti interessa, non otterrai il risultato sperato.

    Per esempio nel caso del codice:
    Codice PHP:
    if(isset($_POST['action']) and $_POST['action']=='Modifica')
    {
     include 
    'formadd.html.php';
     exit();
     include 
    'modifica.php';
     
    header('Location: .');
     exit();

    il compilatore, una volta entrato nel ciclo if dell'azione modifica, include il file formadd.html.php e poi termina l'esecuzione (ossia puoi cancellare le 3 righe che vengono dopo in quanto non verranno mai eseguite).
    Pertanto inserisci l'exit() sono quando sai che devi fare finire l'esecuzione dello script.
    eXvision

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    23
    Quote Originariamente inviata da brodik Visualizza il messaggio
    Come riporta il manuale su php.net:

    exit() terminates execution of the script. Shutdown functions and object destructors will always be executed even if exit is called.

    Per cui se lo utilizzi prima di terminare l'esecuzione della porzione di codice php che ti interessa, non otterrai il risultato sperato.

    Per esempio nel caso del codice:
    Codice PHP:
    if(isset($_POST['action']) and $_POST['action']=='Modifica')
    {
     include 
    'formadd.html.php';
     exit();
     include 
    'modifica.php';
     
    header('Location: .');
     exit();

    il compilatore, una volta entrato nel ciclo if dell'azione modifica, include il file formadd.html.php e poi termina l'esecuzione (ossia puoi cancellare le 3 righe che vengono dopo in quanto non verranno mai eseguite).
    Pertanto inserisci l'exit() sono quando sai che devi fare finire l'esecuzione dello script.
    Grazie mille! Pensavo che exit facesse solo uscire dagli include e andasse dopo header, non che facesse uscire dai costrutti logici if, for ecc. Grazie

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da Yurij_89 Visualizza il messaggio
    Grazie mille! Pensavo che exit facesse solo uscire dagli include e andasse dopo header, non che facesse uscire dai costrutti logici if, for ecc. Grazie
    Exit non fa uscire dai costrutti logici. Termina lo script. Tutto il codice posto dopo non verrà mai eseguito.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Quote Originariamente inviata da Yurij_89 Visualizza il messaggio
    Grazie mille! Pensavo che exit facesse solo uscire dagli include e andasse dopo header, non che facesse uscire dai costrutti logici if, for ecc. Grazie
    Il manuale...questo sconosciuto!

    exit()
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    23
    Per ora vi ringrazio ed ho compreso l'utilizzo di exit().

    Il programmino così paro paro non funziona perchè esegue blocchi di codice che necessitano input dal precedente, quindi l'ho arrangiato diversamente con i blocchi if e sorge un altro problema che ormai è offtopic, e che mi fa sorgere un dubbio: avendo già presenti delle variabili POST, all'invio di un nuovo form che comunque non sovrascrive gli stessi nomi delle variabili, quelle precedenti vengono cancellate comunque?
    Perchè nel blocco sql della modifica, la quale passa prima da un form di inserimento per modificare il testo, mi dice che c'è "id" come undefined index di POST mentre fa il bindvalue con pdo.
    Mentre invece, non da problemi con il blocco sql dell'eliminazione, che non passa attraverso alcun form ed ha un codice molto simile, utilizzando la stessa 'id'.
    Non vi sono neanche header locations '.' nel percorso che questa POST id farebbe, tale da magari svuotarla. Non capisco. Errori grammaticali non ce ne sono, ho controllato molto bene e non c'è tanto codice... Non posso che pensare a quello!

  9. #9
    Quote Originariamente inviata da Yurij_89 Visualizza il messaggio
    avendo già presenti delle variabili POST, all'invio di un nuovo form che comunque non sovrascrive gli stessi nomi delle variabili, quelle precedenti vengono cancellate comunque?
    Ovviamente.
    Se non vuoi perdere tali valori devi passarli come hidden oppure metterli in sessione.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    23
    Quote Originariamente inviata da satifal Visualizza il messaggio
    Ovviamente.
    Se non vuoi perdere tali valori devi passarli come hidden oppure metterli in sessione.
    Ah! Perfetto grazie infinite.

Tag per questa discussione

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