modifica dati in tabella php+sql

Roby293

Nuovo Utente
22 Feb 2013
7
0
0
Salve a tutti!
Ho creato un database in cui posso registrare e visualizzare i dati tramite delle pagine create in php e fin qui va tutto bene ;)
Ora stavo lavorando per consentire la modifica e la cancellazione dei dati, ma non ho idea di come si faccia...
Mi spiego meglio; durante la visualizzazione, ho inserito alla fine di ogni riga il collegamento alle pagine "modifica" ed "elimina";
per esempio:
ID, campo 1, campo 2, modifica, elimina
ID, campo 1, campo 2, modifica, elimina
ID, campo 1, campo 2, modifica, elimina
ecc..

ora la mia idea è: quando si clicca "modifica" si apre la pagina che dovrebbe essere uguale a quella di registrazione, con la differenza che i dati vengono estrapolati dalla tabella per poter essere modificati; quindi se durante la registrazione i campi sono vuoti, nella modifica dovrebbero essere "riempiti" con i dati estratti dalla tabella per quella determinata riga, ma non so come fare a passare quei dati nei box creati con <input type="text">

per l'eliminazione la mia idea sarebbe solo un popup con una domanda e i pulsanti "ok" o "annulla"

spero possiate aiutarmi!
 
ciao
fai la select per l'id che hai trasmesso estraendo i vari valori dei campi schematicamente.

PHP:
<?php
//......immagino che l'id tu lo trasmetta tramite get: $id=_GET['id'];
$q=mysql_query("SELECT * FROM tabella WHERE id=$id");
$riga=mysql_fetch_array($q);
$titolo=$riga['titolo'];
$testo=$riga['titolo'];
?>
<form action="#" method="post">
titolo 
  <input name="titolo" type="text" id="titolo" value="<?php echo $titolo;?>"><br />
testo 
<textarea name="testo" id="testo"><?php echo $testo;?></textarea><br />
<input name="modifica" type="submit" id="modifica" value="modifica">
</form>
<?php
if(isset($_POST['modifica'])){
	//non metto i controlli
	$q=mysql_query("UPDATE tabella SET titolo='".$_POST['titolo']."', testo='".$_POST['testo']."' WHERE id=$id");
}
//....
?>
 
ciao
fai la select per l'id che hai trasmesso estraendo i vari valori dei campi schematicamente.

PHP:
<?php
//......immagino che l'id tu lo trasmetta tramite get: $id=_GET['id'];
$q=mysql_query("SELECT * FROM tabella WHERE id=$id");
$riga=mysql_fetch_array($q);
$titolo=$riga['titolo'];
$testo=$riga['titolo'];
?>
<form action="#" method="post">
titolo 
  <input name="titolo" type="text" id="titolo" value="<?php echo $titolo;?>"><br />
testo 
<textarea name="testo" id="testo"><?php echo $testo;?></textarea><br />
<input name="modifica" type="submit" id="modifica" value="modifica">
</form>
<?php
if(isset($_POST['modifica'])){
	//non metto i controlli
	$q=mysql_query("UPDATE tabella SET titolo='".$_POST['titolo']."', testo='".$_POST['testo']."' WHERE id=$id");
}
//....
?>

ciao e grazie per la risposta!
comunque i dati dalla pagina di registrazione al db li passo tramite POST; con il GET non me li inserisce...
nella pagina di visualizzazione avevo fatto un link in questo modo:
HTML:
<a href='modifica.php?id=<?php echo $id ?>'>Modifica</a>
e poi nella pagina di modifica dove c'è "<input type="text">", l'ho modificato così:
HTML:
<input type="text" name="data" value="<?php echo $data; ?>">
ma nel campo "data" e anche in tutti gli altri campi non mi visualizza ciò che c'è registrato nel db nonostante il "value"....
sempre nella visualizzazione, invece del link ho anche provato con un form in questo modo ma non credo sia corretto:
HTML:
<form action='modifica.php' method='$id=_GET['id'];'><input type='submit' name='modifica' value='Modifica'>
e anche in questo modo nella pagina di modifica non c'è nulla nell'input type=text
 
ciao
e questo cosa è?
<form action='modifica.php' method='$id=_GET['id'];'>
non esiste un method del tipo '$id=_GET['id']' o e post o è get, tra l'altro non puoi mescolare così php con l'html
se come hai detto fai
PHP:
<a href='modifica.php?id=<?php echo $id; ?>'>Modifica</a>
(attento le istruzioni php finiscono con il ; )
nella pag modifica.php devi ricevere il get (o usarlo direttamente anche se pericoloso)
PHP:
<?php
//.....
if(!is_int($_GET['id'])){//es di verifica
	//rimandi a dove vuoi
	header("location:pinco_pallo.php");
	exit();
}else{
	$id=$_GET['id'];
	//poi come ti ho gia postato devi estrarre i valori con la select
	//altrimenti da dove saltano fuori i value da mettere negli input del form?
	//e uppi
	//l'unico accorgimento è passare l'id all'uppaggio o con um campo hidden o in sessione
}
//.....
?>
 
Purtroppo non ci sto capendo granché visto che conosco php a livello scolastico e come puoi vedere infatti quel method non va assolutamente bene...
Prima delle tua risposta, nel modifica all'inizio ho provato ad inserire
PHP:
include "visutente.php"; //cioè la pagina di visualizzazione
e in questo modo nei box degli input me li fa vedere, ma purtroppo mi fa vedere anche la pagina di visualizzazione...
ti allego i file magari potresti capire meglio il mio lavoro..
Vedi l'allegato progetto.zip
 
ciao
intanto alcuni errori
PHP:
<?php
		echo "<td><a href='modifica.php?id=<?php echo $id ?>'>Modifica</a></td>";
		echo "<td><a href='cancella.php?id=<?php echo $id ?>'>Elimina</a></td>";
?>
sei gia dentro php quindi correggi in
PHP:
<?php
		echo "<td><a href='modifica.php?id=$id'>Modifica</a></td>";
		echo "<td><a href='cancella.php?id=$id'>Elimina</a></td>";
?>
guarda se non hai fatto lo stesso errore da qualche altra parte
poi i tag html non vanno indentati
es. errore
HTML:
<form ......>
<table>
</form>
</table>
giusto
HTML:
<form ......>
<table>
</table>
</form>
anche qui verifica tutti i tag
poi do un occhio al resto
 
non sapevo fosse un'errore quello...lo correggo subito, ma non credo che ci siano altri del genere...
la parte dell'html l'ho scritta velocemente per questo i tag risultano sbagliati, però se già funziona è meglio

grazie per il tuo aiuto spero potrai schiarirmi le idee sulla mia idea, altrimenti se c'è una via migliore ben venga!
 
ciao
sto dando un occhio al tuo script e per prima cosa ho notato un'incongruenza: parli di uppaggio poi vedo la query di insert.
devi uppare o inserire (io credo uppare)?
poi, secondo me, ci sono diverse cose da mettere a posto.
sempre da quello che ho capito lo script ti serve per lavoro e quindi non credo che tu voglia farti rovinare il db da qualcuno:
1. chi fa l'aggiornamento? l'utente? se lo fa l'utente deve essere loggato altrimenti un pinco pallino qualsiasi può fare le modifiche e altro, quindi la pagina deve essere protetta.
2. uppi (o inserisci?) brutalmente i valori provenienti dal form senza alcun controllo quindi soggetto ad crossinjection e furto dei valori (che mi sembrano dati sensibili : privacy)
senza andare al furto, un semplice utente che si chiami es. D'Avanzo inserendo il suo cognome, cosi come fai tu, ti manda in pallino il db (quell'insignificante apostrofo è fonte di grossi guai se non trattato adeguatamente)

inanto conferma se uppi o vuoi inserire ti metto come va fatto l'uppaggio, ma pensa a quello che devi fare (soprattutto per evitare guai)
 
ti ho mandato il file "modifica" quando ancora lo dovevo modificare per questo vedi la query di insert, ma so bene che ci va l'update perché devo uppare..
si lo script è per lavoro e:
1. l'inserimento, la visualizzazione, l'aggiornamento, lo fa una sola persona.
2. devo uppare

comunque, ho riprovato tante volte a rifare il file modifica, finché sono riuscito a fare qualcosa..ho pensato di estrarre i dati come nel file di visualizzazione, poi tramite un "echo" ho inserito tutta la parte dell'inserimento e tutto funziona, anche l'update; ho notato però che aggiornando dati con un apostrofo (es. Pinco D'Avanzo) me lo visualizza così: Pinco D; ma non capisco perché.....direi che adesso è questo il problema da risolvere...

l'update l'ho fatto così:
PHP:
$query="UPDATE utente SET data = '$data', soggetto_acquirente = '$soggettoacquirente' WHERE id_utente = '$id'";

ti ringrazio comunque, alcuni pezzi di codice dei messaggi precedenti mi sono serviti!
 
ciao
perche per mysql ' rappresenta fine del valore.
prima di inserire i valori nella tabella ti conviene trattarlo con adslashes, poi quando devi visualizzarli usi stripslashes
addslashes mette una \ davanti all apostrofo e quindi mysql capisce che è un carattere e non la fine di un valore
es. fai questa prova
PHP:
<?php
$a=addslashes("D'amato");
echo "$a<br>";
$a=stripslashes($a);
echo "$a<br>";
?>
poi a tutti i $_POST aggiungi davanti l'addslashes

dimenticavo
anche se lo fa solo una persona alcuni controlli sono necessari.
es se uno digita pinco#pallo.it cioè # al posto di @ (errore di digitazione) poi tu tocca cercare e correggere
 
Ultima modifica:
ciao
Ok il problema dell'apostrofo l'ho risolto in questo modo: durante l'inserimento applico questo codice
PHP:
$soggettoacquirente=addslashes($_POST['soggetto_acquirente']);

durante la visualizzazione questo:
PHP:
$soggettoacquirente=stripslashes($record['soggetto_acquirente']);

mentre quando devo passare i dati dal db ai box di input, li estrapolo allo stesso modo del visualizza, applico questo codice durante l'estrazione in modo da eliminare lo \ :
PHP:
$soggettoacquirente=stripslashes($record['soggetto_acquirente']); //e poi sotto, nel box di input ho eliminato gli apici al "value" in questo modo;
echo "<input type='text' name='soggetto_acquirente' value=$soggettoacquirente>"; //mentre prima era value='$soggettoacquirente';

ora se gentilmente puoi aiutarmi su un ultima cosa; c'è un modo per resettare gli id alla cancellazione di una riga?
ho creato lo script per eliminare così:
PHP:
<form action="<?php echo $_SERVER['PHPSELF'];?>" method='POST'>
<?php
include "config.php";
$selezionedb = mysql_select_db($database, $connessione);
$query = "SELECT * FROM utente WHERE id_utente=$_GET[id_utente]";
$risultato = mysql_query($query);

if ($risultato)
{
	while($record=mysql_fetch_array($risultato))
	{
		$id=$record['id_utente'];
		
		echo "<h2><center>Vuoi davvero eliminare la riga numero $id ?</center></h2>";
		echo "<table align='center'>
			<tr>
			<td><input type='submit' name='si' value='Si'></td>
			<td><input type='submit' name='no' value='No'></td>
			</tr>
			</table>";
		}
}
?>
</form>
<?php
if (isset($_POST['si']))
{
	$yes = mysql_query("DELETE FROM utente WHERE id_utente = '$id'");
	if($yes)
	{
		echo "<h2>Fatto!</h2>"; //qui avevo pensato di fare una cosa del genere ma non ha funzionato: mysql_query("ALTER TABLE utente AUTO_INCREMENT = 1");
		echo "<h2><a href='visutente.php'>Visualizza i dati.</a></h2>";
	}	
}
else if(isset($_POST['no']))
{
	echo "<h2>La riga non è stata eliminata</h2>";
	echo "<h2><a href='visutente.php'>Visualizza i dati.</a></h2>";
	}

mysql_close();	
?>

lo script comunque per eliminare funziona, ma resta solo questo problema degli id, anche perché poi se elimino ad esempio la riga 6, il contatore riparte da 7 e i valori poi sono tutti errati per quanto riguarda gli id!
 
ciao
c'è un modo per resettare gli id alla cancellazione di una riga?
non lo conosco, anche perche non serve in quanto gli id servono solo per icentificare il record
se hai messo es id INT(9) prima di esaururli tutti devi scrivere 999.999.999 record (un miliardo), se non ti basta eventualmente lo aumenti modificando il campo
 
Va bene, al limite se non trovo un modo nasconderò gli id e ordinerò la tabella per nome

Grazie di tutto!
 

Discussioni simili