Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    problema post form con funzione header

    Ciao a tutti. Stò costruendo per passione una struttura e-commerce in modo tale da affrantare quasi tutte le problematiche del web ... Allora ho questo problema:

    Premessa:
    - stò lavorando sulla parte amministrativa del sito;
    - l'interfaccia è strutturata su tre colonne: menu pricipale, sezione, azioni
    - non utilizzo frame ma solo table e div

    Problema:
    il contenuto centrale (sezioni) viene aggiornato inviando alla pagina index del lato amministrativo il paramentro page:
    Codice PHP:
    <? 
    $p
    ="categorie"//pagina di default per i contenuti centrali
    if(isset($_GET['page']))
        { 
    //pagina passata via parametro
        
    $p=$_GET['page'];
        if(
    $p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists("pages/$p.php"))
            
    $p="errore"//pagina di errore
        
    }
        include(
    "pages/$p.php");
    ?>
    a sua volta le azioni vendono passate sempre all'index con il parametro subpage:
    Codice PHP:
    <? 
    $p
    ="clear"//pagina di default per i contenuti centrali
    if(isset($_GET['subpage']))
        { 
    //pagina passata via parametro
        
    $p=$_GET['subpage'];
        if(
    $p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists("pages/subpages/$p.php"))
            
    $p="errore"//pagina di errore
        
    }
        include(
    "pages/subpages/$p.php");
    ?>
    fino a qui funziona tutto bene ma ho problemi a lavorare con i form. Ho creato una subpage "categoria-add.php" ed ho inserito il codice:

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Aggiungi categoria</title>
    <link href="../../template.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <?php
       
    if($_POST) {
        
    inserisci_record();
    }
    else {
        
    mostra_form();
    }

    function 
    inserisci_record()
    {
        
    // richiamo il file di configurazione
        
    require '../../includes/connect_configure.php';

        
    // richiamo lo script responsabile della connessione a MySQL
        
    require '../../includes/connect_db.php';

        
    // recupero i campi di tipo "stringa"
        
    $titolo     trim($_POST['titolo']);

        
    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
        
    if(get_magic_quotes_gpc())
        {
        
    $titolo stripslashes($titolo);
        }

        
    $titolo mysql_real_escape_string($titolo);

        
    // recupero gli altri campi del form
        
    $ordine      = isset($_POST['ordine']) ? intval($_POST['ordine']) : 0;

        
    // verifico la presenza dei campi obbligatori
        
    if(!$titolo)
        {
            
    $messaggio urlencode("Non hai inserito il titolo");
            
    header('location: '.$_SERVER['PHP_SELF'].'?subpage=categoria-add&msg='.$messaggio);
            exit;
        }

        
    // preparo la query
        
    $query "INSERT INTO categoria (cat_titolo, cat_ordine)
                  VALUES ('
    $titolo',$ordine)";

        
    // invio la query
        
    $result mysql_query($query);

        
    // controllo l'esito
        
    if (!$result) {
            die(
    "Errore nella query $query: " mysql_error());
        }

        
    // recupero l'id autoincrement generato da MySQL per il nuovorecord inserito
        
    $id_inserito mysql_insert_id();

        
    // chiudo la connessione a MySQL
        
    mysql_close();

        
    $messaggio urlencode("Inserimento effettuato con successo (ID=$id_inserito)");
        
    header('location: '.$_SERVER['PHP_SELF'].'?subpage=categoria-add&msg='.$messaggio);
    }

    function 
    mostra_form()
    {
        
    // mostro un eventuale messaggio
        
    if(isset($_GET['msg']))
            echo 
    '[b]'.htmlentities($_GET['msg']).'[/b]

    '
    ;
        
    ?>
        <link href="../../template.css" rel="stylesheet" type="text/css">
    <table width="100%" border="0" cellpadding="0" cellspacing="0" class="actions">
      <tr>
        <td scope="col"><h1>Nuova categoria</h1></td>
      </tr>
      <tr>
        <td><form id="form1" name="form1" method="post" action="pages/subpages/categoria-add.php">
          <label>
          
    Titolo 

          <input type="text" name="titolo" id="titolo" />
            </label>
        
            <label>

            Ordine di visualizzazione 

            <input type="text" name="ordine" id="ordine" />
            

            

            <input type="submit" name="submit" id="submit" value="Conferma" />
            </label>
          
            

            <?php ?>
            

        </form>    </td>
      </tr>
    </table>
    <?php echo $_SERVER['PHP_SELF'].'?subpage=categoria-add&msg=' ?>
    </body>
    </html>
    Quando eseguo lo script mi restituisce l'errore header
    Codice PHP:
    WarningCannot modify header information headers already sent by... 
    però la query viene eseguita.

    Qualche consiglio?

  2. #2
    Per modificare l'header il comando header() deve precedere, nel documento, anche il DOCTYPE: deve stare in cima.
    Questo perchè gli header sono mandati all'inizio dell'invio del documento: non puoi reinviare un header già inviato, nè inviarne un altro.
    Ho notato che vorresti modificare l'header per fare un refresh ad un indirizzo specificato.
    Prova con un altro metodo. Al momento non mi viene nulla in mente...

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    io generalmente faccio così...

    1: stampo un js

    Codice PHP:
    // verifico la presenza dei campi obbligatori
        
    if(!$titolo)
        {
            
    $messaggio urlencode("Non hai inserito il titolo");
     echo 
    "<script>location.href=\"{$_SERVER['PHP_SELF']}?subpage=categoria-add&msg=$messaggio\";</script>";
            exit;
        } 
    oppure

    Codice PHP:
    // verifico la presenza dei campi obbligatori
        
    if(!$titolo)
        {
        
    $_GET['subpage']="categoria-add";
        
    $_GET['msg']="Non hai inserito il titolo";
        include(
    $_SERVER['PHP_SELF']);
        die();
        } 
    a tuo piacimento
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  4. #4
    purtroppo non ho risolto perchè mi rimanda alla pagina dello script (categoria-add) con il primo, mentre con il secondo mi restituisce un errore... per rendere meglio l'idea di ciò che devo fare posto uno screen ... thanks cmq
    Immagini allegate Immagini allegate

  5. #5
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    che ti rimanda alla pagina di inserimento è normale, perchè tu gli passi un $_SERVER['PHP_SELF']...

    io ho solo utilizzato il parametro che tu avevi impostato nello script iniziale, poi dove deve andare lo decidi te! magari un apagina di errore e un link che riporta al form di inserimento

    codice tuo
    Codice PHP:
        // verifico la presenza dei campi obbligatori
        
    if(!$titolo)
        {
            
    $messaggio urlencode("Non hai inserito il titolo");
            
    header('location: '.$_SERVER['PHP_SELF'].'?subpage=categoria-add&msg='.$messaggio);
            exit;
        } 
    codice mio (hai scelto js)
    Codice PHP:
    // verifico la presenza dei campi obbligatori
        
    if(!$titolo)
        {
            
    $messaggio urlencode("Non hai inserito il titolo");
    echo 
    "<script>location.href=\"{$_SERVER['PHP_SELF']}?subpage=categoria-add&msg=$messaggio\";</script>";
            exit;
        } 
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

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