Modifica dati con PHP

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
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:
 

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
palermo
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
 

GoshMaledetto

Utente Attivo
20 Dic 2012
137
0
0
www.goshweb.com
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)
 

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
palermo
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?
 

GoshMaledetto

Utente Attivo
20 Dic 2012
137
0
0
www.goshweb.com
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
 

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
palermo
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... :(
 

GoshMaledetto

Utente Attivo
20 Dic 2012
137
0
0
www.goshweb.com
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
 

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
palermo
...problema... se utilizzo il form iniziale con le select, come faccio a visualizzare all'interno dei campi il valore preimpostato del record scelto? :S
 

GoshMaledetto

Utente Attivo
20 Dic 2012
137
0
0
www.goshweb.com
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 />
 

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
palermo
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)))
 

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
palermo
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>
 

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
palermo
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... :(
 

GoshMaledetto

Utente Attivo
20 Dic 2012
137
0
0
www.goshweb.com
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
 

simonetta619

Utente Attivo
22 Apr 2013
47
0
0
35
palermo
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
Autore Titolo Forum Risposte Data
G Problemi con modifica dati in query di aggiornamento MS Access 6
L modifica dati con sqlite PHP 1
L modifica dati. PHP 1
W Modifica su invio dati da form PHP 4
M Modifica e/o Cancellazione dati da database MySql PHP 2
R Modifica e cancellazione dati da MDB Classic ASP 11
K sql UPDATE non mi modifica i dati PHP 22
N Modifica dati utente Joomla 0
R modifica dati in tabella php+sql PHP 12
Emix Problema modifica dati PHP 3
I modifica dati in tabella mysql PHP 9
L problema modifica dati e caratteri html PHP 2
S Modifica dati su db tramite checkbox PHP 14
R Back-end: modifica dati mysql da form php PHP 5
D caricamento file su db e modifica dati PHP 0
M problemi su modifica dati utente Classic ASP 4
Z [PHP/MySql]modifica dei dati PHP 1
S pagina di modifica dati utente Classic ASP 39
B Modifica dati ACCESS ASP.NET 1
grottafelix Estrarre dati da db e modifica Classic ASP 25
D Jquery - modifica elemenento onlick jQuery 1
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
JeiMax Modifica codice php personalizzato PHP 2
P Pagina modifica record che non funziona PHP 0
L Modifica file upload in ASP Classic ASP 2
P modifica colore A Hover link website . WordPress 2
P Modifica con PHP di un node in una sitemap xml PHP 0
C Software modifica sitoweb in tempo reale WordPress 12
G Modifica immagine di sfondo attraverso un bottone PHP 18
G modifica corretta funzione da eregi() a preg_match() PHP 3
R Modifica codice per l'upload di più file PHP 1
G Modifica testo Photoshop 3
felino Excel: popolare una cella con la data di modifica della riga a cui appartiene Windows e Software 3
felino [Wordpress] Modifica main color del template WordPress 8
M [PHP] Modifica account PHP 3
S [OFFRO] Creazione di programmi per la modifica automatizzata di testi Offerte e Richieste di Lavoro e/o Collaborazione 0
S [OFFRO] Rimozione o aggiunta di Password ai file PDF e opzionalmente loro modifica Offerte e Richieste di Lavoro e/o Collaborazione 2
F [PHP] modifica del body email con checked PHP 8
G Modifica da sito statico HTML a dinamico in Wordpress SEO e Posizionamento 1
Cosina Modifica script textarea jQuery 0
M [PHP] Calcolare costi su modifica orari PHP 4
A [PHP] Modifica caratteri di una query Oracle SQL PHP 0
F modifica recensione google Discussioni Varie 2
C Photoshop CS 6 salvare una modifica Photoshop 0
L [PHP] Modifica in tabella ultimo id PHP 5
C Pagina fb notifica modifica post Social Media Marketing 1
Q Notice: Undefined index: codice in C:\xampp\htdocs\STAGE\calendario\modifica.php on line 10 PHP 8
C [Joomla] [HTML] Modifica codice per adattamento app Joomla 18
Daniele_Carrara [Javascript] Modifica input date Javascript 5
J modifica spooler di stampa per stampare in ordine di nome i files pdf Windows e Software 2

Discussioni simili