Modifica Cancella Record tramite Form PHP Mysql

freddie24

Utente Attivo
21 Ott 2011
56
0
0
Ciao a tutti,

sto costruendo un area riservata per un sito, e di PHP e MySql ne mastico poco.

Quest'area riservata deve soltanto fare 3 cose:

1) inserisci evento.
2) modifica evento.
3) cancella evento.

Ho creato un database con una tabella "eventi" con PhpMyAdmin.

Le colonne sono: data , evento, luogo.

Ho già fatto la parte di inserimento evento (data , evento, luogo) e funziona alla perfezione.

Ma non so come creare un form in cui visualizzo i record della tabella, e tramite checkbox o link posso modificare / cancellare gli eventi .

Mi aiutate / consigliate come posso risolvere?

Ringrazio in anticipo.
 
L'ho chiamato ID ed è autoincrement Immagine.png
 
ciao
come promesso.
io utilizzo due sistemi, uno usando dei link l'altro usando un form (qui ti ho messo che intrambi puntano ad una pag chiamata modifica_cancella.php), entrambi si basano comunque trasmettendo l'id da modificare alla pagina che poi esegue.

coi link
PHP:
<?php
//dati di connessione al db
$q="SELECT * FROM event"; //qui ti converrebbe mettere un order by
$ris=mysql_query($q);
//e un controllo se ci sono eventi
echo "clicca su MODIFICA o su ELIMINA<br>";
while($riga=mysql_fetch_array($ris)){
	//ti metto tutti i dati a te scegliere quali usare
	$id=$riga['ID'];//questo è l'unico indispensabile
	$data=$riga['data'];//in che modo inserisci la data? io usalmente uso il timestamp
	$evento=$riga['evento'];
	$luogo=$riga['luogo'];
	echo "evento: $evento del $data - luogo: $luogo ";
	echo "<a href=\"modifica_cancella.php?mod=$id\">MODIFICA</a> <a href=\"modifica_cancella.php?del=$id\" onclick=\"return(confirm('stai eliminando $evento'))\" >ELIMINA</a>" 
	
}
?>
cliccando su mod o su eli vieni rimandato alla pag che esegue l'operazione, in caso di elimina hai un alert che richiede la conferma


col form
PHP:
<?php
//dati di connessione al db
$q="SELECT * FROM event"; //qui ti converrebbe mettere un order by
$ris=mysql_query($q);
//e un controllo se ci sono eventi
?>
<form name="form1" method="post" action="modifica_cancella.php">
<?php
while($riga=mysql_fetch_array($ris)){
	$id=$riga['ID'];//come sopra
	$data=$riga['data'];
	$evento=$riga['evento'];
	$luogo=$riga['luogo'];
	echo "evento: $evento del $data - luogo: $luogo ";
	echo "modifica <input name=\"mod\" type=\"radio\" value=\"$id\"> ";
	echo "elimina <input name=\"del\" type=\"radio\" value=\"$id\"> ";
	echo "conferma elimina <input name=\"con_del\" type=\"radio\" value=\"$id\"><br>";
}
?>
  <input type="submit" name="esegui" value="esegui">
</form>
ti appare un form con vari radio button
selezioni un radio corrispondente all'evento:
quello di modifica e poi il submit
quello di elimina + quello di conferma + submit (cioe se decidi di eliminare devi selezionare il radio di eliminazione e il corrispondente di conferma)

guarda quale secondo te è più vicino alle tue esigenze in quanto la pag modifica_cancella.php (o come la chiamerai) è diversa nei due casi.
fammi sapere che ti do le informazioni come fare la pagina che modifica o cancella.
con quanto sopra (link o form) puoi eseguire solo un'operazione alla volta, eventualmente c'è la possibilità di selezionare più eventi (per elimina non lo consiglierei)
 
Ciao,
Ti ringrazio per il tuo aiuto!

Ma purtroppo non mi elimina o modifica gli eventi.

Per "aiutarti ad aiutarmi" metto a disposizione i miei codici :

config.php
Codice:
<?php
$DB_host     = 'localhost';
$DB_user     = 'root';
$DB_password = '';
$DB_name     = 'pqs_db';
?>

connect.php
Codice:
<?php
$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
	die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
	die ("Errore nella selezione del database: " . mysql_error());
}
?>

inserisci_evento.php
Codice:
<?php

include ("config.php");
include ("connect.php");


$data_ = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['data'])))));
 if ( !empty ($data_)) { $data = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['data'])))));}
 elseif (empty ($data_)){die ( "<p style=\" font-weight:bold; text-align:center;\">Errore nella compilazione dei dati. <br />Non hai indicato la data.<br /><br />
<a href=\"javascript:history.go(-1)\" title=\"Torna indietro\">Torna indietro.</a></p>");}
 

$evento_ = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['evento'])))));
 if ( !empty ($evento_)) { $evento = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['evento'])))));}
 elseif (empty ($evento_)){die ( "<p style=\"font-weight:bold; text-align:center;\">Errore nella compilazione dei dati. <br />Non hai indicato l'evento.<br /><br />
<a href=\"javascript:history.go(-1)\" title=\"Torna indietro\">Torna indietro.</a></p>");}  


$luogo_ = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['luogo'])))));
 if ( !empty ($luogo_)) { $luogo = addslashes(ltrim(rtrim(strip_tags(stripslashes($_POST['luogo'])))));
 
 
 }
 elseif (empty ($luogo_)){die ( "<p style=\"font-weight:bold; text-align:center;\">Errore nella compilazione dei dati. <br />Non hai indicato il luogo.<br /><br />
<a href=\"javascript:history.go(-1)\" title=\"Torna indietro\">Torna indietro.</a></p>");}
   
 
   
   
htmlentities ( $data, $evento, $luogo,   ENT_NOQUOTES );
 
$strsql = "INSERT INTO eventi (data, evento, luogo) VALUES ('$data', '$evento', '$luogo')";
$rs=@mysql_query ("$strsql") or die ("Errore di Connessione" .mysql_error());
header("location: form.html");  



?>

<?php
   header("location: http://www.miosito.it/index.php"); 
?>

modifica_cancella.php
Codice:
<?php 



//dati di connessione al db
include ("config.php");
include ("connect.php");

 
$q="SELECT * FROM eventi ORDER BY data DESC"; //qui ti converrebbe mettere un order by 
$ris=mysql_query($q); 
//e un controllo se ci sono eventi 
echo "clicca su MODIFICA o su ELIMINA<br>"; 
while($riga=mysql_fetch_array($ris))

{ 
    //ti metto tutti i dati a te scegliere quali usare 
    $id=$riga['ID'];//questo è l'unico indispensabile 
    $data=$riga['data'];//in che modo inserisci la data? io usalmente uso il timestamp 
    $evento=$riga['evento']; 
    $luogo=$riga['luogo']; 
    echo "evento: $evento del $data - luogo: $luogo \n" ; 
    echo "<a href=\"modifica_cancella.php?mod=$id\">MODIFICA</a> <a href=\"modifica_cancella.php?del=$id\" onclick=\"return(confirm('stai eliminando $evento'))\" >ELIMINA</a>" ; 
     
} 

?>


Vorrei che la pagina di modifica_cancella.php mi stampasse a video gli eventi in ordine di data dell'evento...


Grazie ancora per la disponibilità!
 
ciao
prima per la data, poi ti mando la pag. per modificare o cancellare, usando la pag coi link
avendo messo ORDER BY data DESC" ti ordina e visualizza i link per data, però stai attento a come è formattata la data nel db.
perche se è formattata in italiano (es.) 12.01.2012 risulta minore di 24.10.2009 che è un assurdo
 
ciao
questa potrebbe essere la pagina che alabora l'eliminazione o la modifica del record

PHP:
<?php 
include ("config.php");
include ("connect.php");
if(isset($_POST['modifica'])){//se hai premuto il submit del form modifica
	$id=$_POST['id'];
	$data=$_POST['data'];
	$evento=$_POST['evento'];
	$luogo=$_POST['luogo'];
	$q="UPDATE eventi SET data='$data', evento='$evento', luogo='$luogo' WHERE id='$id'";
	$ris=mysql_query($q);
	echo "aggiornato il record $id";
	//qui il ritorno automatico alla pagina in cui visualizzi l'elenco, potresti usare il tag meta
	echo "<meta http-equiv='Refresh' content='3; URL=nome_pagina_a_cui_tornare.php'>";
}
//***********
if(isset($_get['mod'])){//hai cliccato su MODIFICA
	$id=$_get['mod'];//leggo l'id trasmesso, dovresti mettere dei controlli, es. è un numero intero?
	$q="SELECT * FROM eventi  WHERE id='$id'";
	$ris=mysql_query($q);
	$riga=mysql_fetch_array($ris);
	$data=$riga['data'];//in che modo inserisci la data? io usalmente uso il timestamp 
    $evento=$riga['evento']; 
    $luogo=$riga['luogo'];
	//e qui il form di modifica (entro e esco da php ma poi se vuoi puoi renderlo tutto php)
	//nei campi di input si visualizza il valore originale
?>
<!-- form modifica -->
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="modifica">
  <p>
    <input name="id" type="hidden" id="id" value="<?php echo $id;?>">
    <br>
    <input name="data" type="text" id="data" value="<?php echo $data;?>">
    <br>
    <input name="evento" type="text" id="evento" value="<?php echo $evento;?>">
    <br>
    <input name="luogo" type="text" id="luogo" value="<?php echo $luogo;?>">
  </p>
  <p>
    <input name="modifica" type="submit" id="modifica" value="modifica">
</p>
</form>
<?php
}elseif(isset($_get['del'])){//hai cliccato su ELIMINA
	$id=$_get['del'];//leggo l'id trasmesso, dovresti mettere dei controlli, es. è un numero intero?
	$q="DELETE FROM eventi WHERE id='$id'";
	$ris=mysql_query($q);
	echo "eliminato il record $id";
	//qui il ritorno automatico alla pagina in cui visualizzi l'elenco, potresti usare il tag meta
	echo "<meta http-equiv='Refresh' content='3; URL=nome_pagina_a_cui_tornare.php'>";
}
?>
potresti mettere tutto in una pagina unica (elenco+elaborazione).
se metti tutto in una pagina devi modificare i link dell'elenco in questa maniera
PHP:
<?php
//....
echo "<a href=\"#?mod=$id\">MODIFICA</a> <a href=\"#?del=$id\" onclick=\"return(confirm('stai eliminando $evento'))\" >ELIMINA</a>" ; 
//....
?>
e i ritorni con il tag meta
PHP:
<?php
//...
echo "<meta http-equiv='Refresh' content='3; URL=".$_SERVER['PHP_SELF']."'>";
//...
?>
comunque guarda che è schematico, dovresti mettere i vari controlli sui get ed i post, vedere se ti serve addslashes....
e verifica che non abbia fatto qualche errore di battitura sui nomi variabili e/o campi
 
Non appare niente quando apro il file modifica_cancella.php (utilizzo wampserver per il php in locale).

Ho sostituito il codice del file modifica_cancella.php con :

Codice:
<?php  
include ("config.php"); 
include ("connect.php"); 
if(isset($_POST['modifica'])){//se hai premuto il submit del form modifica 
    $id=$_POST['id']; 
    $data=$_POST['data']; 
    $evento=$_POST['evento']; 
    $luogo=$_POST['luogo']; 
    $q="UPDATE eventi SET data='$data', evento='$evento', luogo='$luogo' WHERE id='$id'"; 
    $ris=mysql_query($q); 
    echo "aggiornato il record $id"; 
    //qui il ritorno automatico alla pagina in cui visualizzi l'elenco, potresti usare il tag meta 
    echo "<meta http-equiv='Refresh' content='3; URL=nome_pagina_a_cui_tornare.php'>"; 
} 
//*********** 
if(isset($_get['mod'])){//hai cliccato su MODIFICA 
    $id=$_get['mod'];//leggo l'id trasmesso, dovresti mettere dei controlli, es. è un numero intero? 
    $q="SELECT * FROM eventi  WHERE id='$id'"; 
    $ris=mysql_query($q); 
    $riga=mysql_fetch_array($ris); 
    $data=$riga['data'];//in che modo inserisci la data? io usalmente uso il timestamp  
    $evento=$riga['evento'];  
    $luogo=$riga['luogo']; 
    //e qui il form di modifica (entro e esco da php ma poi se vuoi puoi renderlo tutto php) 
    //nei campi di input si visualizza il valore originale 
?> 
<!-- form modifica --> 
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="modifica"> 
  <p> 
    <input name="id" type="hidden" id="id" value="<?php echo $id;?>"> 
    <br> 
    <input name="data" type="text" id="data" value="<?php echo $data;?>"> 
    <br> 
    <input name="evento" type="text" id="evento" value="<?php echo $evento;?>"> 
    <br> 
    <input name="luogo" type="text" id="luogo" value="<?php echo $luogo;?>"> 
  </p> 
  <p> 
    <input name="modifica" type="submit" id="modifica" value="modifica"> 
</p> 
</form> 
<?php 
}elseif(isset($_get['del'])){//hai cliccato su ELIMINA 
    $id=$_get['del'];//leggo l'id trasmesso, dovresti mettere dei controlli, es. è un numero intero? 
    $q="DELETE FROM eventi WHERE id='$id'"; 
    $ris=mysql_query($q); 
    echo "eliminato il record $id"; 
    //qui il ritorno automatico alla pagina in cui visualizzi l'elenco, potresti usare il tag meta 
    echo "<meta http-equiv='Refresh' content='3; URL=nome_pagina_a_cui_tornare.php'>"; 
} 
?>
 
ciao
Non appare niente quando apro il file modifica_cancella.php
la pag. modifica_cancella.php non visualizza nulla se non viene chiamata dalla pagina in cui hai l'elenco dei lik (mettiamo per esempio che tu l'abbia chiamata elenco.php)
sul bw devi digitare
http://localhost:8080/elenco.php (o similare)
se non hai fatto errori dovrebbe apparirti l'elenco degli eventi (es)

evento: Mercatino del 2012.01.15 - luogo: Firenze MODIFICA ELIMINA
evento: Corsa campestre del 2012.01.20 - luogo: Palermo MODIFICA ELIMINA
evento: Palo della cuccagna del 2012.01.31 - luogo: Bolzano MODIFICA ELIMINA
...eccc....

cliccando su MODIFICA (es) per mercatino...firenze viene chiamata la pag modifica_cancella.php con il form riportante i dati vecchi che puoi modificare
mentre (sempre per mercatino firenze) se clicci su ELIMINA ti appare l'alert di conferma, se confermi viene chiamata sempre la modifica_cancella.php che, in questo caso elimina il record

se chiami direttamente
http://localhost:8080/modifica_cancella.php l'unica cosa che ottieni è una pagina bianca
 
Ciao Scusami se non mi sono fatto vivo fino ad ora... ma impegni mi hanno tenuto lontano dal pc!

La pagina degli eventi è questa:

stampa_eventi.php

Codice:
<?php
include ("config.php"); 
include ("connect.php"); 

// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM eventi ORDER BY CAST(data AS DATE)") 
or die(mysql_error());  

echo "<table border='1'>";
echo "<tr> <th>Data</th> <th>Evento</th> <th>Luogo</th> </tr>";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
	// Print out the contents of each row into a table
	echo "<tr><td>"; 
	echo $row['data'];
	echo "</td><td>"; 
	echo $row['evento'];
	echo "</td><td>"; 
	echo $row['luogo'];
	
	echo "</td></tr>"; 
} 

echo "</table>";
?>

Come faccio ad integrare i controlli modifica / Cancella ?
 
ciao
ti conviene fare due pagine
una quella che hai postato (stampa_eventi.php) e a cui ti ho aggiunto i link per modificare o eliminare
ed una (modifica_cancella.php) che in funzione di quale link hai cliccato o ti presenta un form per la modifica o elimina il record

questa e la pag che tu hai chiamato stampa_eventi.php
PHP:
<?php
include_once ("config.php"); 
include_once ("connect.php"); 
// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM eventi ORDER BY CAST(data AS DATE)") 
or die(mysql_error());  
echo "<table border='1'>";
echo "<tr> <th>Data</th> <th>Evento</th> <th>Luogo</th><th>MOD</th><th>DEL</th></tr>";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
	// lettura dell'id è indispensabile
	$id=$row['id'];//ti serve quando dai il modifica o il delete
	// Print out the contents of each row into a table
	//***semplifica***
	echo "<tr><td>".$row['data']."</td><td>".$row['evento']."</td><td>".$row['luogo']."</td>";
	//e qui le ultime due celle con i link per modificare o aliminare
	echo "<td><a href=\"modifica_cancella.php?mod=$id\">[mod]</a></td>";
	echo"<td><a href=\"modifica_cancella.php?del=$id\" onclick=\"return(confirm('stai eliminando evento del ".$row['data']."'))\" >[del]</a></td></tr>";
	//ti ho messo la data nella conferma perche evento può essere pericoloso
	//es se hai evento = l'onomastico di pinco l'apostrofo interferisce e ti fa casino, mentre nelle date non hai mai l'apostrofo
} 
echo "</table>";
?>
e questa è la pag modifica_cancella.php che in funzione di quello che hai cliccato in stampa_eventi.php esegue o la modifica o l'eliminazione

PHP:
<?php  
include_once ("config.php"); 
include_once ("connect.php"); 
if(isset($_POST['modifica'])){//se hai premuto il submit del form modifica 
    $id=$_POST['id']; 
    $data=$_POST['data']; 
    $evento=$_POST['evento']; 
    $luogo=$_POST['luogo']; 
    $q="UPDATE eventi SET data='$data', evento='$evento', luogo='$luogo' WHERE id='$id'"; 
    $ris=mysql_query($q); 
    echo "aggiornato il record $id"; 
    //qui il ritorno automatico alla pag stampa_eventi.php
    echo "<meta http-equiv='Refresh' content='3; URL=stampa_eventi.php'>"; 
} 
//*********** 
if(isset($_get['mod'])){//hai cliccato su MODIFICA 
    $id=addslashes(htmlspecialchars($_get['mod']));//con un po' di protezione al get
    $q="SELECT * FROM eventi  WHERE id='$id'"; 
    $ris=mysql_query($q); 
    $riga=mysql_fetch_array($ris); 
    $data=$riga['data'];//in che modo inserisci la data? io usalmente uso il timestamp  
    $evento=$riga['evento'];  
    $luogo=$riga['luogo']; 
    //e qui il form di modifica (entro e esco da php ma poi se vuoi puoi renderlo tutto php) 
    //nei campi di input si visualizza il valore originale 
?> 
<!-- form modifica --> 
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="modifica"> 
  <p> 
    <input name="id" type="hidden" id="id" value="<?php echo $id;?>"> 
    <br> 
    <input name="data" type="text" id="data" value="<?php echo $data;?>"> 
    <br> 
    <input name="evento" type="text" id="evento" value="<?php echo $evento;?>"> 
    <br> 
    <input name="luogo" type="text" id="luogo" value="<?php echo $luogo;?>"> 
  </p> 
  <p> 
    <input name="modifica" type="submit" id="modifica" value="modifica"> 
</p> 
</form>
<!--
se vuoi qui puoi mettere un link per uscire senza passare dall'uppaggio
<a href="stampa_eventi.php">[esci]</a>
eventualmente anche qui con una conferma
<a href="stampa_eventi.php" onclick="return(confirm('ATTENZIONE: le eventuali modifiche non verranno salvate'))" >[esci]</a>
--> 
<?php 
}elseif(isset($_get['del'])){//hai cliccato su ELIMINA 
    $id=addslashes(htmlspecialchars($_get['del']));//con un po' di protezione al get
    $q="DELETE FROM eventi WHERE id='$id'"; 
    $ris=mysql_query($q); 
    echo "eliminato il record $id"; 
    //qui il ritorno automatico alla pag stampa_eventi.php
    echo "<meta http-equiv='Refresh' content='3; URL=stampa_eventi.php'>"; 
}else{
	//se accedi direttamente a questa pagina viene riportato subito alla stampa_eventi.php
	echo "<meta http-equiv='Refresh' content='0; URL=stampa_eventi.php'>"; 
}
?>
verifica i nomi delle variabili (salvo errori di battitura il tutto funzia)

p.s.
leggi i commenti
e usa il tag php (non code) ultima iconcina
 
Ciao ... e Grazie 1000 per la disponibilità!

ho provato il tuo codice, e quando apro il file "stampa_eventi.php" da wampserver mi compare il seguente errore :

Notice: Undefined index: id in C:\wamp\www\prova11\stampa_eventi.php on line 12 ,

che sarebbe questa riga qui:

Codice:
$id=$row['id'];//ti serve quando dai il modifica o il delete

Come posso risolvere?

Comunque ancora grazie 1000 per tutti gli aiuti che mi stai dando!
 
ciao
l'errore può essere dovuto:
- il nome dell'id (autoincrement primary key) che hai per il campo della tabella è diverso da quello che hai scritto nell'istruzione
verifica che siano uguali (compreso maiuscole/minuscole)
- e questo sarebbe grave: in tabella non hai un campo id (autoincrement primay key)
 
ciao
l'errore può essere dovuto:
- il nome dell'id (autoincrement primary key) che hai per il campo della tabella è diverso da quello che hai scritto nell'istruzione
verifica che siano uguali (compreso maiuscole/minuscole)
- e questo sarebbe grave: in tabella non hai un campo id (autoincrement primay key)


Ho corretto id in ID e stampa gli eventi....


... ma cliccando su del o mod non me li modifica e non me li cancella.
 
ciao
se il campo in tabella si chiama ID correggi
WHERE id='$id'";
in
WHERE ID='$id'";

in tutte le query di delete selec e uppdate
poi fammi sapere
 

Discussioni simili