- Home
- Categorie
- Coding e Sistemistica
- PHP
- problema redirect inserimento dati
-
ciao oslino,
ho provato ma non funziona; i campi compliati rimangono, ma non me li inserisce nel db;
grazie per la risposta
buona giornata
-
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.
-
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
-
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).
-
... 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.
-
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
-
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.
-
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
-
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.
-
grazie 1000 oslino,
il tuo aiuto è stato preziosissimo;
grazie davvero
alla prossima