pagina per modificare dati inseriti in mysql

isidoro80

Utente Attivo
5 Feb 2007
32
0
0
Salve a tutti, ho realizzato un questionario (form) in php per un indagine che inserisce i dati in un database mysql. Ho la necessità di creare un sistema che mi consenta di visualizzare i questionari inseriti per poterli modificare nel caso in cui l'utente compili parzialmente il questionario o voglia modificare i dati inseriti.
Cerco di spiegarmi meglio.
Ad ogni questionario è associato un identificativo univoco (ID). Inserendo l'id in una pagina di ricerca è possibile richiamare tutti i dati associati a quell'id e quindi visualizzare le risposte al questionario.
Vorrei realizzare una pagina identica per impaginazione o simile a quella di inserimento che visualizzi le risposte inserite dall'utente alle domande del questionario e consenta allo stesso tempo di modificarli.
Nel questionario ci sono campi di testo radiobutton ecc. Ovviamente all'apertura della pagina di inserimento questi campi sono vuoti. Vorrei creare una pagina che inserendo l'id del questionario visualizzi la pagina di inserimento con i campi di testo e radiobutton valorizzati secondo quanto inserito dall'utente in fase di compilazione e consenta di correggere tali valori. spero di essere stato chiaro. Avete da propormi qualche metodo per realizzare una cosa del genere o soluzioni alternative al problema.
Grazie mille a tutti
 
ciao
prima di consigliarti un metodo sarebbe giusto considerare:
quanti sono i dati da modificare e quanto gli utenti
se in una pagina estrai tutti i dati quanto devi scorrerre su/giu dx/sx per trovare l'utente e i dati da modificare?
non conviene per esempio elencare, se hai molti utenti, solo nome e cognome con accanto un link "modifica?"
 
Le tabelle sono molte e i dati molti, ma io intendo visualizzare un record ( un questionario) alla volta non tutti insieme. Inserendo il dodice intendificativo del questionario seleziono quello che mi interessa e poi posso visualizzare tutti i dati ad esso associati.
 
ciao io per qualcosa di simile ho fatto così, ti do delle indicazioni, tra i nomi delle variabili ed
i commenti spero che si capisca

PHP:
<?php  
//pagina_elenco_questionari.php
  //tutti i valore per connessione al db
  $query="SELECT quello_che_mi_serve FROM tab_questionario ORDER BY quello_che_mi_serve";
  $interroga=mysql_query($query);
  $num_questionari=mysql_num_rows($interroga);
  if($num_questionari==0){
	  echo "NON CI SONO QUESTIONARI";
  }else{
	  while($riga=mysql_fetch_array($interroga)){
		  echo "questionario n° ".$riga['id_questionario']."<a href=\"pagina_modifica.php?id=".
		  $riga['id_questionario']."\" modifica? </a><br>";
		  //se sono tanti ti conviene paginare i record
		  //se vuoi essesere sicuro di modificare metti il confirm
	  }//fine while
  }//fine if else esistono
?>
e la pagina per modifiche
PHP:
<?php
//pagina_modifica.php
$id_q=htmlspecialchars($_GET['id']);//leggo l'id del questionario
//questo id_q o lo passi in sessione o metti un campo hidden nel form
//parte di modifica nel db
if(isset($_POST['submit'])){
	$id_q=$_POST['id_nascosto'];
	//leggo i valori dei vari $_post dal form e li uppo where id_questionario=$id_q
	//ecc...ecc...
}
//fine parte di modifica 
//lettura valori del questionario da modificare
$query="SELECT * FROM tab_questionario WHERE id_questionario=$id_q";
$estrai=mysql_query($query);
$vari_campi=mysql_fetch_array($estrai);
//qui leggi i valori dei vari campi
$campo_1=$vari_campi['campo_1'];
//eccetera..............
//se hai un radio button es con 0 non selezionato, 1 selezionato
$radio_1=$vari_campi['radio_1'];
if($radio_1==0){
	$check_1="";
}else{//il radio era selezionato
	$check_1="checked";
}

?>
<p>
<p>
<p>
<form name="form1" method="post" action="<?php htmlspecialchars($_SERVER['PHP_SELF']);?>">
  <p>
    <input name="id_nascosto" type="hidden" value="<?php echo $id_q;?>">
  </p>
  <p>
    <input name="campo_1" type="text" id="campo_1" value="<?php echo $campo_1;?>">
  </p>
  <p>
    <input name="radio_1" type="radio" value="1" <?php echo $check_1;?>>
  </p>
  <p>
    <input name="submit" type="submit" id="submit" value="Invia">
  </p>
</form>
<p>qui puoi mettere un link per uscire senza salvare le modifiche

spero di essermi spiegato, altrimenti sono qui
 
Ciao grazie mille. L'idea che mi hai proposto è eccezionale. Sto adattando il tuo script al mio questionario. Ti chiedo un ulteriore piccolo aiuto. Nel caso io abbia anche dei menu a tendina e dei pulsanti di scelta (quello quadrati per intenderci) come faccio a fare in modo che si valorizzino con quello che è stato inserito nel database. Per esempio se l'utente nella compilazione del questionario a scelto nel menu a tendina l'opzione uno nel database è stato inserito come valore 1. io vorrei che comparisse nel menu di modifica un menu a tendina con la prima opzione selezionata. idem per i box di scelta.
Nello script mancano le query per inserire i dati nel database, mi potresti fare un esempio anche di quelle perchè se inserisco delle normali query di inser mi si creano nuovi record (nuovi questionari) invece io vorrei che i valori corretti andassero a sostituire i dati presenti. Anziche una query di insert di vuole una query di modifica. non so come si chiamano.
spero di essere stato chiaro. grazie mille ancora
 
ciao
per i ceckbox ti comporti come per i radiobutton mettendo il solito if es.
if sevalore_ceckBox_1==1 $cbx_1 ="checked" else $cbx_1 =""

per i la selcect, non ho mai fatto qaualcosa di simile, ma mi viene in mente di provare a fare così (comunque tutto da provare)
nella parte php appena sopra il form ove leggi i valori da mettere nel form

$sel[] =array();//creo un array o numerico o associativo
$valoreMenuTend_1=$vari_campi['menuTend_1'];
switch($valoreMenuTend_1){
case "1":
$sel[1]="selected";
break;
case "2":
$sel[2]="selected";
break;
case "3":
$sel[3]="selected";
break;
}//fine switch

poi all'interno del form

<select name="MenuTend">
<option value="1"<?php echo $sel[1];?>>uno</option>
<option value="2" <?php echo $sel[2];?>>due</option>
<option value="3"<?php echo $sel[3];?>>tre</option>
</select>

io ho utilizzato un array numerico, ma si potrebbe utilizzare un array associativo in tal caso potresti fare così

switch($valoreMenuTend_1){
case "pinco":
$sel['pinco']="selected";
break;
case "pallo
$sel['pinco']="selected";
break;//eccc....
---------------------------------------------
se devi modificare i dati devi usare

$uppa="UPDATE mia_tabella SET nome_c1='$val_c1', nome_c2='$val_c2,
ecc... con tutti i nomi WHERE id_questionario='$id_q'";
$query=mysql_query($uppa);

spero di essere stato chiaro
 
Ti ringrazio molto per l'aiuto che mi stai dando, non so riuscito a far funzionare i radio button mi dici dove sbaglio per favore

esempio di radiobutton

$radio_1=$vari_campi['3a'];

if($radio_1==1){
$check_1="checked";
}else{//il radio era selezionato
$check_1="";
}
if($radio_1==2){
$check_2="checked";
}else{//il radio era selezionato
$check_2="";
}
if($radio_1==3){
$check_3="checked";
}else{//il radio era selezionato
$check_3="";
}

valorizzo i checkbox

<input name="3a" type="radio" value="1" <?php echo $check_1;?>>
<input name="3a" type="radio" value="2" <?php echo $check_2;?>>
<input name="3a" type="radio" value="3" <?php echo $check_3;?>>

______________________

grazie mille e ciao
 
Caro borgo italia grazie infinite per i suggerimenti che mi hai dato. Ora mi si pone un'altro problema sempre per questa pagina di modifica dati del database.
Ho una tabella_2 del database che contiene 3 colonne: id (autoincrement); id_rif (numerico); campo_1 (testo)


Nella pagina di inserimento dati ho creato 3 campi di testo che vanno a creare al momento dell'inserimento 3 record all'interno della tabella 3

campo_1a
campo_1b
campo_1c

Nella tabella_2 ho pertanto sempre 3 record con lo stesso id_ref (l'id_ref viene preso da un'altra tabella a cui la tabella 3 è collegata) ma ovviamente diverso id (tale valore incrementa da solo all'inserimento di ogni record nel database).

Lo script di inserimento funziona perfettamente. Nella pagina di modifica dei dati invece se uso lo script che mi hai suggerito per i campi di teso accade che in tutti e tre i campi di testo ho lo stesso valore e precisamente il primo dei 3 inseriti.
Dall'interrogazione della tabella 3 attraverso una select ottengo un array. Dovrei estrarre dall'array i valori relativi ai tre record e posizionarli nei 3 campi di testo.

In sostanza come posso fare perchè nella pagina di modifica mi compaiano all'interno dei tre campi di testo i tre valori che ho inserito inizialmente nella pagina di inserimento dati?
Spero di essere stato chiaro grazie mille per la collaborazione
 
Ultima modifica:
ciao
non ho capito esatamente cosa vuoi fare, spiega meglio eventualmete con un es.
però non so se faccio in tempo a risponderti, caso mai guardo e se è semplice vedo di risponderti presto, altrimenti dopo il 1° gennaio
 
cerco di spiagarti meglio.
Nella pagine php di inserimento dati ho 4 campi di testo

campo1
campo2
campo3
campo4

Con 4 query inserisco ciò che l'utente a scritto nei 4 campi in una tabella chiamata ora tabella 3.

La struttura della tabella 3 è la seguente

id id_ref campo_testo
1 1 xxxx
2 1 xxxx
3 1 xxxxx
4 1 xxxxxx

id è un autoincrement che aumenta da solo
id_ref è un codice identificativo
campo_testo contiene i calori inseriti nei campi di testo (campo 1, campo 2 campo 3 campo 4)

ora vorrei creare una pagina identica a quella di inserimento che consenta inserendo in un id_ref di visualizzare in 4 campi di testo ciò che l'utente a inserito e allo stesso tempo consenta di modificarli e salvare i dati attraverso una query di update.
Il problema è che se utilizzo la procedura che mi hai consigliato prima per i campi di testo in tuti e quattro ottengo lo stesso valore il primo.

Esempio

se inserisco nella tabella 3

id id_ref campo_testo
1 5 pluto
2 5 pippo
3 5 paperino
4 5 ziopaperone

e uso questo script


Codice:
 //lettura valori del questionario da modificare 
$query="SELECT * FROM tabella_3 WHERE id_ref=5"; 
$estrai=mysql_query($query); 
$vari_campi=mysql_fetch_array($estrai); 
//qui leggi i valori dei vari campi 
$campo_1=$vari_campi['campo_testo']; 
$campo_2=$vari_campi['campo_testo']; 
$campo_3=$vari_campi['campo_testo']; 
$campo_4=$vari_campi['campo_testo']; 



<form name="form1" method="post" action="<?php htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
  <p> 
    <input name="id_nascosto" type="hidden" value="<?php echo $id_q;?>"> 
  </p> 
  <p> 
    <input name="campo_1" type="text" id="campo_1" value="<?php echo $campo_1;?>"> 
  </p> 
 <p> 
    <input name="campo_2" type="text" id="campo_2" value="<?php echo $campo_2;?>"> 
  </p> 
 <p> 
    <input name="campo_3" type="text" id="campo_3" value="<?php echo $campo_3;?>"> 
  </p> 
 <p> 
    <input name="campo_4" type="text" id="campo_4" value="<?php echo $campo_4;?>"> 
  </p> 
 
  <p> 
    <input name="submit" type="submit" id="submit" value="Invia"> 
  </p> 
</form>


in tutti e quattro i campi vedo solo ed esclusivamente il primo valore e cioè pluto
come posso fare perchè in tutti e quattro i campi si vedano i rispettivi valori inseriti?
ciao grazie
 
ciao
intanto ti do un'indicazione.
come hai fatto tu è logico che prenda solo il primo record e lo metta in tutte le variabili.
devi usare un ciclo while
penso che ti convenga fare così

$campo=array();
while($vari_campi=mysql_fetch_array($estrai)){
$campo[]=$vari_campi['campo_testo'];
}

poi nel form

<input name="campo_1" type="text" id="campo_1" value="<?php echo $campo[0];?>"

<input name="campo_1" type="text" id="campo_1" value="<?php echo $campo[1];?>"

<input name="campo_1" type="text" id="campo_1" value="<?php echo $campo[2];?>"
 
Grazie mille Borgo Italia ora si pone un'altro problema una volta che ho modificato i valori nei 3 campi eseguo 3 update per aggiornare i dati

aggiornamento campo 1
$uppa1="UPDATE tabella_3 SET id_ref='$val_c1' WHERE id_questionario='5";
$query=mysql_query($uppa1);

aggiornamento campo 2
$uppa2="UPDATE tabella_3 SET id_ref='$val_c2' WHERE id_questionario='5";
$query=mysql_query($uppa2);

aggiornamento campo 3
$uppa3="UPDATE tabella_3 SET id_ref='$val_c3' WHERE id_questionario='5";
$query=mysql_query($uppa3);

Dopo l'aggiornamento tutti e 3 i record della tabella 3 con stesso id_ref pari a 5 presentano i valori del campo_testo uguali (precisamente a quello dell'ultimo capo)

Esempio

nella tabella 3 ci sono questi valori inseriti

id id_ref campo_testo
1 5 pluto
2 5 pippo
3 5 paperino
4 5 ziopaperone

li visualizzo nei rispettivi 4 campi nella pagina di modifica

effettuo l'aggiornamento inserendo nella pagina di modifica su ogni campo di testo i seguenti valori

campo_1 buon
campoo_2 natale
campo_3 e
campo_4 felice anno

dopo l'aggiornamento effettuato secondo lo script descritto prima la tabella 3 si presenta così

id id_ref campo_testo
1 5 felice anno
2 5 felice anno
3 5 felice anno
4 5 felice anno

In sostanza le sostituzioni non vengono fatte correttamente. come faccio a fargli capire che deve sostituire solo certi record e non tutti quelli aventi stesso id_ref? forse devo creare un'altra colonna con un id diverso per ogni campo?
tipo

id id_ref campo_testo campo
1 5 felice anno 1
2 5 felice anno 2
3 5 felice anno 3
4 5 felice anno 4

nella query poi dovro mette
nella query 1 where id_ref =5 and campo = 1
nella query 2 where id_ref =5 and campo = 2
c'è un modo per evitare di modificare il database?
 
ciao
intanto una cosa
guarda che vaevo messo un ehm!!!
i nimi dei campi di input e relativi $_post devono essere diversi

<input name="campo_1" type="text" id="campo_1" value="<?php echo $campo[0];?>"
<input name="campo_2" type="text" id="campo_1" value="<?php echo $campo[1];?>"
<input name="campo_3" type="text" id="campo_1" value="<?php echo $campo[2];?>"

poi nell'uppaggio perchè uppi il campo id_ref e non campo_testo?

devi portarti ancche l'id oltre che l'id_ref e l'uppa deve essere

..... WHERE id_questionario='$val_id_que t' AND id='$id' ;

spero abbia capito, altrimenti ci sentiamo il 3.01.10 (o ti da indicazioni alessandro o qualcun altro)
buone feste
 
Grazie ancora per i consigli.
Ho dato che i campi della tabella di cui sopra non sono uno ma più di uno ho usato questo script.

Codice:
 $campo1a=array();
$campo1b=array();
$campo1c=array();
while($vari_campi=mysql_fetch_array($estrai5)){
$campo1a[]=$vari_campi['2a']; 
$campo1b[]=$vari_campi['2b']; 
$campo1c[]=$vari_campi['2c']; 
}

I record inseiriti nel database da visualizzare sono 5 pertanto ho usato questo codice

Codice:
.......
$campo4_1a=$campo1c[0]; 

$campo4_1b=$campo1c[1]; 

$campo4_1c=$campo1c[2]; 

$campo4_1d=$campo1c[3]; 

$campo4_1e=$campo1c[4]; 

$campo4_1f=$campo1c[5]; 




                  <td><input name="4_21c" type="text" id="4_21c" size="5"  value="<?php echo $campo4_1a;?>"></td>
                  <td><input name="4_22c" type="text" id="4_34" size="5"   value="<?php echo $campo4_1b;?>"></td>
.....
tutto funziona alla perfezione tranne il fatto che mi appare il seguente errore e non vengono visulizzati i primi valori di ogni campo:

Notice: Undefined offset: 5 in C:\Programmi\EasyPHP 2.0b1\www\Rapportotracittaecampagna\inserimento.php on line 1656
 
Ultima modifica:
si lo so ma ho contato bene nella tabella ci sono 6 record ed io ho inserito come variabili
$campo[0]
............1
2
3
4
5
Non capisco perchè non mi vede tutti i valori in più c'è un'altra stranezza. non mi si visualizzano i primi 5 valori di 6 presenti ma gli ultimi 5 come se iniziasse a leggere la tabella dal secondo valore e non dal primo mi spiego con un esempio

tabella
id campo
1 1
2 2
3 3
4 4
5 5
6 6

valori visualizzati
2, 3, 4, 5, 6
Perchè secondo te da cosa dipende?
 

Discussioni simili