Modifica dati con PHP

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
36
palermo
salve a tutti, ho creato un database che contiene 3 tabelle, ovvero 'layout'(id_lay, nome_lay), 'box'(id_box,nome_box) e 'sum'(sum_id,sum_id_layout,sum_id_box), quest'ultima è una tabella che contiene gli id delle altre due.
il primo step è stato quello di creare una pagina con 2 select, in cui l'utente poteva scegliere tra i valori 'nome' presenti nelle tabelle 'layout' e 'box' e cliccando su invia, il risultato preso via post veniva inviato alla tabella 'sum' in cui però non venivano inseriti i valori 'nome' bensì gli id corrispondenti.vi mostro il codice:
html:
HTML:
<!DOCTYPE html>
<html>
<head>
<style>
	#sel{width:157px;}
</style>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Form Select</title>
</head>
<body>
	<h1> Scegliere Box e Layout</h1>
		<form action="formSelect_To.php" method="POST">
		<center><table></center>
			<th> <label for="select1"> Posizione Layout </label> </th>
				<td colspan="3"> <select name="layout" id="sel">
					<option value="1" >HEADER</option>
					<option value="2">MAIN</option>
					<option value="3">SIDEBARDX</option>
					<option value="4" >SIDEBARSX</option>
					<option value="5">FOOTER</option>
				    </select>
				</td>
			<tr>
				<th> <label for="select2"> Box da inserire </label> </th>
				<td colspan="3"> <select name="box" id="sel">
					<option value="1" >CONTATTI</option>
					<option value="2">MAPPA</option>
					<option value="3">ARTICOLI</option>
					<option value="4" >RICERCA</option>
				    </select>
				</td>
			</tr>
				<!-- tasto per iviare il form -->
				<td colspan="2"> <center><input type="submit" name="tasto" value="invia"/></center> </td>
			</tr>
		</table>
		</form>
</body>
</html>

php:
PHP:
<?php
include('classes/classeBase.php');
?>

<?php 
 class dati{
 	
 	public $box;
 	public $layout;
 	public $id_layout;
 	public $id_box;
 	
 	public function save(){
 		$query="INSERT INTO sum (sum_id_layout,sum_id_box)
		  VALUES ('".$this->layout."','".$this->box."')";
 		
 	if (($result = mysql_query($query)))
	    {
		echo ("Inserimento riuscito!"."<br />");
	    }
	else{
		echo ("Errore nell'inserimento: ".mysql_error());// specifica gli errori
	    }
 	}
 	
 	public function show(){
 		$query="SELECT box.nome_box, layout.nome_lay, sum.sum_id
				FROM box
				INNER JOIN sum
				ON box.id_box = sum.sum_id_box
				INNER JOIN layout
				ON layout.id_lay = sum.sum_id_layout
				ORDER BY sum.sum_id ASC";
 		
 		$res = mysql_query($query) or die('Errore...'. mysql_error());
 		
		if($res && mysql_num_rows($res)>0){
     		while($row=mysql_fetch_assoc($res)){
     		$id=$row['sum_id'];
     		echo "<div class='container'>";
     		echo "<div class='row'>";
     		echo "<div class='span12'>";
     		echo "<link href='../bootstrap/css/bootstrap.min.css' rel='stylesheet'>";
        	echo "<table class='table table-hover table-bordered table-condensed'><thead><tr><th>ID</th><th>POSIZIONE</th><th>BOX</th><th>ELIMINA</th><th>MODIFICA</th></tr></thead>";
        	echo "<tbody><tr><td>".$row['sum_id']."</td>";
        	echo "<td>".$row['nome_lay']."</td>";
        	echo "<td>".$row['nome_box']."</td>";
        	echo "<td><a rel='nofollow' href='modifica_cancella.php?del=$id' onclick=\"return(confirm('stai eliminando $id'))\" >Clicca per eliminare</a></td>";
        	echo "<td><a rel='nofollow' href='modifica_cancella.php?mod=$id'>Vai al form per la modifica</a></td></tr></tbody></table>";
        	echo "</div>";
        	echo "</div>";
        	echo "</div>";
     	}
	} else{
     echo "nessun risultato";
 	}
 		mysql_free_result($res); // libero la memoria di PHP occupata dai record estratti con la SELECT
 }
 
 	/*public function delete(){
 		$query="DELETE FROM sum WHERE sum_id='44'";
 		
 	if (($result = mysql_query($query)))
	    {
		echo ("Cancellazione riuscita"."<br />");
	    }
	else{
		echo ("Errore nella cancellazione: ".mysql_error());// specifica gli errori
	    }
 	}*/
 	
 }	
?>

<?php
    $db = new MySqlClass();
	$db->connetti();
    $dati = new dati();// definizione dell'istanza (richiama la class)
	$dati->layout = $_POST['layout'];
	$dati->box = $_POST['box'];
    $dati->save();
    //$dati->delete();
    $dati->show();
    
        
?>

come potete vedere ho usato le classi. Fino a qui il programma funziona. Dopo ciò, nella pagina 'modifica_cancella.php' faccio visualizzare una tabella dove mostro all'utente le scelte fatte, ovvero i record che ha inserito nella tabella 'sum' ma non mostrando gli id bensì i nomi corrispettivi, così da avere un quadro chiaro di ciò che contiene la tabella. Anche fin qui tutto quadra. In questa tabella ho inserito 2 link, uno per la cancellazione del record, che funziona perfettamente, e uno per la modifica del record... Il problema giunge qui, spero che qualcuno possa aiutarmi perchè davvero mi sto arrovellando il cervello...
posto il codice della pagina 'modifica_cancella.php':
PHP:
<?php
include('classes/classeBase.php');
$db = new MySqlClass();
$db->connetti();
?>

<?php
if (isset($_GET['del'])){//cliccato su ELIMINA 
    $id=$_GET['del'];//leggo l'id trasmesso 
    $q="DELETE FROM sum WHERE sum_id=$id"; 
    $ris = mysql_query($q) or die('Errore...'. mysql_error());
    echo "eliminato il record $id"; 
    //qui il ritorno automatico alla pagina in cui si visualizza l'elenco 
    echo "<meta http-equiv='Refresh' content='3; URL=formSelect_To.php'>"; 
} 
if (isset($_GET['mod'])){
	$id=$_GET['mod'];//leggo l'id trasmesso
    $q1="SELECT b.nome_box,l.nome_lay 
    	FROM layout l, box b, sum s 
    	WHERE b.id_box=s.sum_id_box 
    	AND l.id_lay=s.sum_id_layout 
    	AND s.sum_id=$id"; 
    $ris1=mysql_query($q1); 
    $row = mysql_fetch_assoc($ris1);
    $nome_lay= $row['nome_lay'];  
    $nome_box= $row['nome_box']; 
    
} 
?>

 //e qui il form di modifica
    //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="nome_lay" type="text" id="nome_lay" value="<?php echo $nome_lay;?>"> 
    <br> 
    <input name="nome_box" type="text" id="nome_box" value="<?php echo $nome_box;?>"> 
    <br>  
  </p> 
  <p> 
    <input name="modifica" type="submit" id="modifica" value="modifica"> 
</p> 
</form>

come vedete, ho creato un form dove, quando clicca sul link, l'utente vede visualizzati i valori 'nome' presi corrispondenti all'id del record. il problema è che non so come fare avvenire la modifica, in quanto modificando i valori con altri e inviando al database, dovrebbero cmunque ricomparire gli id al posto dei valori 'nome'... spero possiate aiutarmi perchè è tre giorni che perdo il sonno!!!! :crying:
 
non l'ho inserita

perchè non so da dove cominciare! è quello il problema
cioè ho fatto dei tentativi ma non ho risolto... ho postato il codice senza la query
 
per quello che ho capito credo che sia sbagliato il concetto. mi spiego meglio devi creare diverse 3 diverse pagine di modifica
1 modificare il NOME del layout
2 modificare il NOME del box
3 modificare l'ASSOCIAZIONE di layout e box fatta dall'utente

1 hai un id del layout e fai una update del nome

Codice:
UPDATE layout SET nome_layout = (VALORE DEL FORM) WHERE id_layout = (VALORE ID DA MODIFICARE)

2 stessa prodcedura di prima

3 servono due menu a tendina come nell'inserimento e nella tabella sum modifichi solo gli id

Codice:
UPDATE sumSET id_layout = (VALORE SELECT DEL FORM), id_box =  (VALORE SELECT DEL FORM) WHERE id_sum= (VALORE ID_SUM DA MODIFICARE)
 
quindi non posso fare tutto nella sola pagina 'modifica_cancella.php'? non mi è ben chiaro questo... cioè, io queste query che mi hai suggerito, non posso farle tutte insieme associandole a variabili diverse?
 
tutto si puo fare ma diventa macchinoso è molto piu semplice e intuitivo come ho detto io anche perche seguendo la tua idea non è fattibile lavori su tabelle e dati differenti
 
l'utente non deve modificare i nomi presenti nelle tabelle 'layout' e 'box', ma solo il record che ha deciso di modificare in 'sum'.. forse non sono capace a spiegarmi! ci provo meglio.. L'utente nel form iniziale seleziona ad esempio 'header' nella select 'layout' e 'contatti' nella select 'box' dopidichè invia e queste sue scelte vengono inserite nella tabella 'sum' che però contiene gli id dei suddetti elementi. Quando effettua la scelta e la inserisce nel db a video viene stampata una tabella in cui vengono mostrati l'id del record, il valore nome della tabella layout (corrispondente all'id_layout) e il valore nome della tabella box (corrispondente all'id_box):
tabella.JPG
adesso cliccando sul link "modifica" l'utente viene rimandato ad una pagina con un nuovo form, dove come valori preimpostati appaiono quelli del record selezionato. (lo so poi metterò le select in modo da rendere più agevole la modifica):
form.JPG
adesso l'utente dovrebbe poter modificare il suo record inserito, e non i campi delle tabelle 'box' e 'layout', quelli rimangono fissi. Dovrebbe poter, in pratica, momdificare la sua combinazione scelta... spero di essermi fatta capire... :(
 
ok adesso ci sono ;) ma allora non ha senso mettere un campo input ma devi praticamente copiare la pagina di inserimento ma poi al submit non fai una insert ma una update. in questo modo utilizzando due select in post o get avrai gli id da modificare nella tabella sum
 
...problema... se utilizzo il form iniziale con le select, come faccio a visualizzare all'interno dei campi il valore preimpostato del record scelto? :S
 
devi creare dinamicamente le select con php e controllare che il valore che stai inserendo sia uguale a quello salvato nel record ti faccio un esempio pratico

PHP:
<?php 
				
$query = "SELECT * FROM sum WHERE id_sum = " . $_GET['id'];
					
$sum= mysql_query($query,$conn);
					
$mod=mysql_fetch_array($sum);
					
					
?>
<form action="modifica.php" method="get" id="modsum">
Layout: *<br />
					
<select name="id_layout">
<option value="0">Seleziona...</option>
<?php
$query = "SELECT * FROM layout ORDER BY nome_layout ASC";
$lay = mysql_query($query,$conn);
							
while ($row=mysql_fetch_array($lay)) {
echo "<option value='" . $row['id_layout'] . "'";
//LA PARTE IMPORTANTE é QUESTA SE IL VALORE A DB DELLA TABELLA SUM COINCIDE CON LA VOCE DELLA SELECT CHE STAI INSERENDO AGGIUNGI IL PARAMETRO "SELECTED"								
if ($row['id_layout'] == $mod['id_layout']) {
echo " selected='selected'";
}
								
echo ">" . $row['nome_layout'] . "</option>";
							}
?>
</select><br /><br />
 
allora, ho creato un altra pagina 'modifica_To.php' che viene caricata quando l'utente clicca su modifica,ecco il codice:
PHP:
<?php
include('classes/classeBase.php');
?>

<?php 
 class modify{
 	
 	public $box;
 	public $layout;
 	public $id_layout;
 	public $id_box;
 	
 	public function update(){
 		if (isset($_GET['mod'])){
		$id=$_GET['mod'];//leggo l'id trasmesso
    	$query="UPDATE sum SET sum_id_layout = ('".$this->layout."'),sum_id_box = ('".$this->box."')WHERE sum_id=$id";
    	$ris=mysql_query($query); 
   		$row = mysql_fetch_assoc($ris);
    	$nome_lay= $row['nome_lay'];  
    	$nome_box= $row['nome_box']; 
    
		} 
 	
 		//$id=$_GET['mod'];
 		//$query="INSERT INTO sum (sum_id_layout,sum_id_box)
		  //VALUES ('".$this->layout."','".$this->box."')";
 		//$query="UPDATE sum SET sum_id_layout = ('".$this->layout."'),sum_id_box = ('".$this->box."')WHERE sum_id=$id";
 		
 	if (($ris = mysql_query($query)))
	    {
		echo ("Modifica riuscita!"."<br />");
	    }
	else{
		echo ("Errore nella modifica: ".mysql_error());// specifica gli errori
	    }
 	}
 }
 ?>
 
<?php
    $db = new MySqlClass();
	$db->connetti();
    $modify = new modify();// definizione dell'istanza (richiama la class)
	$modify->layout = $_POST['layout'];
	$modify->box = $_POST['box'];
    $modify->update();
 ?>

quando clicco sul pulsante modifica mi appare questo errore:
Notice: Undefined variable: query in C:\Programmi\EasyPHP-12.0\www\my portable files\Esercizio Cms\modifica_To.php on line 29
Errore nella modifica: Query was empty


alla riga 29 c'è questo:
PHP:
if (($ris = mysql_query($query)))
 
il form di modifica l'ho aggiustato così:
HTML:
<h1> Modifica Box e Layout</h1>
		<form action="modifica_To.php" method="POST">
		<center><table></center>
			<th> <label for="select1"> Posizione Layout </label> </th>
				<td colspan="3"> <select name="layout" id="sel">
					<option value="0"><?php echo "-".$nome_lay."-";?></option>
					<option value="1" >HEADER</option>
					<option value="2">MAIN</option>
					<option value="3">SIDEBARDX</option>
					<option value="4" >SIDEBARSX</option>
					<option value="5">FOOTER</option>
				    </select>
				</td>
			<tr>
				<th> <label for="select2"> Box da inserire </label> </th>
				<td colspan="3"> <select name="box" id="sel" >
					<option value="0"><?php echo "-".$nome_box."-";?></option>
					<option value="1" >CONTATTI</option>
					<option value="2">MAPPA</option>
					<option value="3">ARTICOLI</option>
					<option value="4" >RICERCA</option>
				    </select>
				</td>
			</tr>
				<!-- tasto per iviare il form -->
				<td colspan="2"> <center><input type="submit" name="tasto" value="modifica"/></center> </td>
			</tr>
		</table>
		</form>
 
ho risolto l'errore di prima inserendo l'if all'interno dell'if precedente in questo modo:
PHP:
public function update(){
 		if (isset($_GET['mod'])){
		$id=$_GET['mod'];//leggo l'id trasmesso
    	$query="UPDATE sum SET sum_id_layout = ('".$this->layout."'),sum_id_box = ('".$this->box."')WHERE sum_id=$id";
    	$ris=mysql_query($query); 
   		$row = mysql_fetch_assoc($ris);
    	$nome_lay= $row['nome_lay'];  
    	$nome_box= $row['nome_box']; 
 				if (($ris = mysql_query($query)))
	    		{
				echo ("Modifica riuscita!"."<br />");
	    		}
				else{
				echo ("Errore nella modifica: ".mysql_error());// specifica gli errori
	   			 }
		}

adesso non mi da più l'errore ma mi da solo la pagina bianca, e non effettua la modifica perchè ho controllato nel DB... nn capisco come mai nn mi stampa nemmeno l'errore... :(
 
esatto brava te lo stavo per scrivere io ;)
fai un

PHP:
echo $query

cosi vedi esattamente la query che invia al db e poi la puoi provare direttamente su phpmyadmin o il gestore di db che usi
 
ho usato get perchè quell'id lo prendo dal record tramite il link nella tabella:
PHP:
echo "<td><a href='modifica_cancella.php?del=$id' onclick=\"return(confirm('stai eliminando $id'))\" >Clicca per eliminare</a></td>";
        	echo "<td><a href='modifica_To.php?mod=$id'>Vai al form per la modifica</a></td></tr></tbody></table>";

quindi credevo dovessi richiamarlo sempre allo stesso modo di come lo richiamo quando faccio il delete:
PHP:
$id=$_GET['del'];//leggo l'id trasmesso 
    $q="DELETE FROM sum WHERE sum_id=$id"; 
    $ris = mysql_query($q) or die('Errore...'. mysql_error());
    echo "eliminato il record $id"; 
    //qui il ritorno automatico alla pagina in cui si visualizza l'elenco 
    echo "<meta http-equiv='Refresh' content='3; URL=formSelect_To.php'>";

nel form della modifica infatti io non prendo l'id del record... me lo da lui cliccando sul link
 
Ultima modifica:

Discussioni simili