• User Attivo

    Questo è quello che intendevo quando dicevo che la "pagina chiama se stessa".
    Un solo file che fa tutto e ti ritrovi i campi compilati.
    Poi dovrai modificarlo in base alle tue esigenze per fare anche un eventuale update.
    [PHP]
    <?php include("../config.php");
    $nome = FALSE;
    $title = FALSE;
    $description = FALSE;
    $keywords = FALSE;
    $descrizione = FALSE;

    if(isset($_POST['submit'])){
        $nome = $_POST['nome'];
        $title = $_POST['title'];
        $description = $_POST['description'];
        $keywords = $_POST['keywords'];
        $descrizione = $_POST['descrizione'];
        $sql = "INSERT INTO categorie (nome, title, description, keywords, descrizione) VALUES ('$nome','$title','$description','$keywords','$descrizione')";
    }
    

    ?>

    <?php include("../include/header.php"); ?>
    <div id="categoria">
    <form method="post" action="#"> <!-- la pagina richiama se stessa -->
    <p>Nome</p>
    <input name="nome" type="text" class="campi" placeholder="Inserisci il Nome della Categoria" <?php if($nome) echo "value='$nome'"; ?>>
    <p>Title</p>
    <input name="title" type="text" class="campi" placeholder="Inserisci il Title della Categoria" <?php if($title) echo "value='$title'"; ?>>
    <p>Description</p>
    <input name="description" type="text" class="campi" placeholder="Inserisci la Description della Categoria" <?php if($description) echo "value='$description'"; ?>>
    <p>Keywords</p>
    <input name="keywords" type="text" class="campi" placeholder="Inserisci le Keywords della Categoria" <?php if($keywords) echo "value='$keywords'"; ?>>
    <p>Descrizione</p>
    <input name="descrizione" type="text" class="campi" placeholder="Inserisci la Descrizione della Categoria" <?php if($descrizione) echo "value='$descrizione'"; ?>>
    <input name="submit" type="submit" value="invia" id="conferma">
    </form>
    </div>
    <?php include("../include/footer.php"); ?>
    [/PHP]
    Ciao.


  • User Attivo

    ciao oslino,

    ho provato ma non funziona; i campi compliati rimangono, ma non me li inserisce nel db;

    grazie per la risposta
    buona giornata


  • User Attivo

    Il codice che ho postato è parziale, non può funzionare correttamente. E' un esempio di come impostare i campi del form. Come avevo scritto, devi modificarlo in base alle tue esigenze. Manca per esempio la funzione mysqli_query() che effettua l'inserimento. Aggiungilo e vedrai che già funziona. Per fare una cosa fatta bene ci vorrebbe anche la validazione dei campi, la gestione degli errori ecc, ma il codice che ti ho scritto è già funzionale per quel che ti serve.
    [PHP]
    <?php include("../config.php");
    $nome = FALSE;
    $title = FALSE;
    $description = FALSE;
    $keywords = FALSE;
    $descrizione = FALSE;

    if(isset($_POST['submit'])){
        $nome = $_POST['nome'];
        $title = $_POST['title'];
        $description = $_POST['description'];
        $keywords = $_POST['keywords'];
        $descrizione = $_POST['descrizione'];
        $sql = "INSERT INTO categorie (nome, title, description, keywords, descrizione) VALUES ('$nome','$title','$description','$keywords','$descrizione')";
        mysqli_query($connect, $sql); // ***** riga da aggiungere *****
     }
    

    ?>

    <?php include("../include/header.php"); ?>
    <div id="categoria">
    <form method="post" action="#"> <!-- la pagina richiama se stessa -->
    <p>Nome</p>
    <input name="nome" type="text" class="campi" placeholder="Inserisci il Nome della Categoria" <?php if($nome) echo "value='$nome'"; ?>>
    <p>Title</p>
    <input name="title" type="text" class="campi" placeholder="Inserisci il Title della Categoria" <?php if($title) echo "value='$title'"; ?>>
    <p>Description</p>
    <input name="description" type="text" class="campi" placeholder="Inserisci la Description della Categoria" <?php if($description) echo "value='$description'"; ?>>
    <p>Keywords</p>
    <input name="keywords" type="text" class="campi" placeholder="Inserisci le Keywords della Categoria" <?php if($keywords) echo "value='$keywords'"; ?>>
    <p>Descrizione</p>
    <input name="descrizione" type="text" class="campi" placeholder="Inserisci la Descrizione della Categoria" <?php if($descrizione) echo "value='$descrizione'"; ?>>
    <input name="submit" type="submit" value="invia" id="conferma">
    </form>
    </div>
    <?php include("../include/footer.php"); ?>
    [/PHP]
    Ciao.


  • User Attivo

    ciao oslino,

    funziona correttamente grazie 1000!

    l'unica cosa è che se clicco sul submit 2 o 3 volte lui mi inserisce il record 2 o 3 volte,

    se modifico il record che ho inserito me lo inserisce nuovamente;

    io vorrei che una volta cliccato sul submit lui prenda sempre quello, se lo modifico che modifico sempre lo stesso, non che me ne crei di nuovi;

    non so se è fattibile

    grazie 1000 cmq
    ho imparato una cosa nuova
    😄


  • User Attivo

    Come ti ho detto devi modificarlo in base alle tue esigenze per fargli fare un UPDATE. Devi adattarlo in un misto tra il codice dell'amico "Ultima" e il mio, recuperando l'ultimo ID e facendoglielo passare al SUBMIT... Sia il codice INSERT che UPDATE devono stare nello stesso file, separati da un IF... ELSE... (oppure usi Ajax come consigliato dall'amico PietroR).


  • User Attivo

    ... che poi a pensarci bene potresti mettere l'ID un una variabile $_SERVER, magari distruggendola alla fine dello script. Ti semplificheresti di molto le cose e ne guadagneresti da subito in sicurezza.
    Ciao.


  • User Attivo

    Ciao oslino, grazie per la pazienza e la disponibilità; perdona l'ignoranza ma non sono ferrato in materia, mi sono avvicinato da poco al php; cosa intendi dicendo: "mettere l'ID un una variabile $_SERVER, magari distruggendola alla fine dello script. Ti semplificheresti di molto le cose e ne guadagneresti da subito in sicurezza"

    Grazie ancora e buonanotte
    Porta pazienza oslino sto imparando 🙂


  • User Attivo

    PERDONAMI, HO SCRITTO $_SERVER ma volevo dire $_SESSION.

    Detta in soldoni, devi partire dal presupposto che le connessioni alle pagine di un sito sono "stateless" ovvero non hanno memoria delle pagine precedenti. Se definisci una variabile "$a=300" nella pagina page1.php e poi vai nella pagina page2.php, la variabile "$a" non esisterà più perchè era definita solo nella page1.php
    Per trasportarla nella page2.php dovresti indicarla nell'URL "page2.php?a=300"

    $_SESSION è una variabile superglobale (in realtà è un array) che viene definita nella memoria del server stesso ed è visibile sia all'interno che all'esterno delle funzioni **php.net/manual/en/reserved.variables.session.php
    **
    Quindi se tu in page1.php definisci $_SESSION['a'] = 300 e poi vai nella page2.php e scrivi **echo $_SESSION['a'] **ti verrà stampato 300 pur non avendola passata nè in GET nè in POST.
    Essendo nella memoria del server (limitata) e se si ha molto traffico sul server (utenti) è bene distruggerla quando non serve più per liberare la memoria stessa.

    Mentre una variabile passata via GET o POST è facilmente modificabile dal browser, $_SESSION non lo è e ti eviti tante grane di sicurezza.

    Tutte le pagine che fanno uso di $_SESSION devono iniziare con la funzione session_start() per far capire al server che in quello script vuoi utilizzare le variabili di sessione.

    Ciao.


  • User Attivo

    Ciao Oslino,

    grazie del consiglio, conosco le sessioni perchè le ho usate un po';

    cmq ho risolto, funziona!

    ti posto il codice così mi dai un opinione:

    crea_categoria.php
    [php]
    <?php include("../include/header.php"); ?>
    <div id="categoria">
    <form method="post" action="insert.php">
    <p>Nome</p>
    <input name="nome" type="text" class="campi" placeholder="Inserisci il Nome della Categoria">
    <p>Title</p>
    <input name="title" type="text" class="campi" placeholder="Inserisci il Title della Categoria">
    <p>Description</p>
    <input name="description" type="text" class="campi" placeholder="Inserisci la Description della Categoria">
    <p>Keywords</p>
    <input name="keywords" type="text" class="campi" placeholder="Inserisci le Keywords della Categoria">
    <p>Descrizione</p>
    <input name="descrizione" type="text" class="campi" placeholder="Inserisci la Descrizione della Categoria">
    <p>Visibile</p>
    <select name="visibile">
    <option>no</option>
    <option>si</option>
    </select>
    <input name="submit" type="submit" value="invia" id="conferma">
    </form>
    </div>
    <?php include("../include/footer.php"); ?>
    [/php]

    insert.php
    [php]
    <?php include("../config.php"); ?>
    <?php
    $nome = $_POST['nome'];
    $title = $_POST['title'];
    $description = $_POST['description'];
    $keywords = $_POST['keywords'];
    $descrizione = $_POST['descrizione'];
    $visibile = $_POST['visibile'];
    $sql = "INSERT INTO categorie (nome,title,description,keywords,descrizione,visibile) VALUES ('$nome','$title','$description','$keywords','$descrizione','$visibile')";
    $ret = mysqli_query( $db, $sql );

    $sql = "SELECT * FROM categorie ORDER BY categoria_id DESC LIMIT 0, 1;";
    $ret = mysqli_query( $db, $sql );
    while ($row = mysqli_fetch_assoc($ret)){
    header("location:modifica_categoria.php?categoria_id=".$row['categoria_id']."");
    //echo $row['categoria_id'];
    }
    

    ?>
    [/php]

    modifica_categoria.php
    [php]
    <?php include("../include/header.php"); ?>
    <div id="categoria">

        <?php
                        
            $sql = "SELECT * FROM categorie WHERE categoria_id = '".$_GET['categoria_id']."'";
            $ret = mysqli_query( $db, $sql );
            while ($row = mysqli_fetch_assoc($ret)){
            print "
            <form method='post' action='update.php?categoria_id=".$_GET['categoria_id']."'>
            <p>Nome</p>
            <input name='nome' type='text' value='".$row['nome']."' class='campi'>
            <p>Title</p>
            <input name='title' type='text' value='".$row['title']."' class='campi'>
            <p>Description</p>
            <input name='description' type='text' value='".$row['description']."' class='campi'>
            <p>Keywords</p>
            <input name='keywords' type='text' value='".$row['keywords']."' class='campi'>
            <p>Descrizione</p>
            <input name='descrizione' type='text' value='".$row['descrizione']."' class='campi'>
            <select name='visibile'>
            ";
            
            
                if($row['visibile'] == "si")
                    {
                        echo "
                            <option selected>si</option>
                            <option>no</option>
                        ";
                    }
                else{
                        echo "
                            <option>si</option>
                            <option selected>no</option>
                        ";                    
                }
    
            print "
            </select>
    
            <input name='submit' type='submit' value='invia' id='conferma'>
            </form>
            ";
            }
        ?>
    

    </div>
    <?php include("../include/footer.php"); ?>
    [/php]

    update.php
    [php]
    <?php include("../config.php"); ?>
    <?php
    $categoria_id = $_GET['categoria_id'];
    $nome = $_POST['nome'];
    $title = $_POST['title'];
    $description = $_POST['description'];
    $keywords = $_POST['keywords'];
    $descrizione = $_POST['descrizione'];
    $visibile = $_POST['visibile'];
    $sql = "UPDATE categorie SET nome='$nome',title='$title',description='$description',keywords='$keywords',descrizione='$descrizione',visibile='$visibile' WHERE categoria_id='$categoria_id'";
    $ret = mysqli_query( $db, $sql );
    header("location:modifica_categoria.php?categoria_id=".$_GET['categoria_id']."");
    ?>
    [/php]

    di fatto dopo l'insert dei dati sul db, ho interrogato il db dicendo: estrai l'ultima categoria con id più alto;
    mandami alla view di modifica categoria con id più alto, che di fatto è l'ultima inserita.

    grazie di tutto
    buonanotte
    😄


  • User Attivo

    Non sarà una soluzione da manuale, ma se funziona vuole dire che va bene 🙂 . Col tempo imparerai altri modi per fare le stesse cose con meno codice.
    L'unico suggerimento che ti do è sul modo di estrarre l'ultima categoria. Invece di fare la query puoi utilizzare la funzione mysqli_insert_id() che ritorna l'ultimo ID inserito:

    insert.php
    [PHP]
    <?php include("../config.php"); ?>
    <?php
    $nome = $_POST['nome'];
    $title = $_POST['title'];
    $description = $_POST['description'];
    $keywords = $_POST['keywords'];
    $descrizione = $_POST['descrizione'];
    $visibile = $_POST['visibile'];
    $sql = "INSERT INTO categorie (nome,title,description,keywords,descrizione,visibile) VALUES ('$nome','$title','$description','$keywords','$descrizione','$visibile')";
    $ret = mysqli_query( $db, $sql );
    $ultimoID = mysqli_insert_id($db); // RECUPERA L'ULTIMO ID
    header("location:modifica_categoria.php?categoria_id=". $ultimoID ."");
    ?>
    [/PHP]
    Ti risparmi 4 righe di codice e un'inutile lavoro del database. 🙂
    Ciao.


  • User Attivo

    grazie 1000 oslino,

    il tuo aiuto è stato preziosissimo;

    grazie davvero
    alla prossima