pagina per modificare dati inseriti in mysql

Ti rispiego il mio problema

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 4.

La struttura della tabella 4 è 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.

CASO REALE
se inserisco i seguenti dati nella tabella 4

id id_ref 2a ...
1 5 pluto
2 5 pippo
3 5 paperino
4 5 ziopaperone
5 5 sandro
6 5 maicol


e uso lo script che mi hai suggerito
Codice:
//lettura valori del questionario da modificare nel form 

mysql_select_db($database_prova, $prova);
$query4b="SELECT * FROM t4b WHERE ind=$id_q";
$estrai5=mysql_query($query4b, $prova) or die(mysql_error());
$campo1c=array();
while($vari_campi=mysql_fetch_array($estrai5)){
$campo1c[]=$vari_campi['2a']; 
}

//campi di testo tabella
$campo4_1a=$campo1c[0]; 
$campo4_1b=$campo1c[1]; 
$campo4_1c=$campo1c[2]; 
$campo4_1d=$campo1c[3]; 
$campo4_1e=$campo1c[4]; 
$campo4_1f=$campo1c[5]; 

// nel form
                 
<input name="4_21c" type="text" id="4_21c" size="5"  value="<?php echo $campo4_1a;?>">
<input name="4_22c" type="text" id="4_34" size="5"   value="<?php echo $campo4_1b;?>">
<input name="4_23c" type="text" id="4_35" size="5"   value="<?php echo $campo4_1c;?>">
<input name="4_24c" type="text" id="4_36" size="5"   value="<?php echo $campo4_1d;?>">
<input name="4_25c" type="text" id="4_37" size="5"   value="<?php echo $campo4_1e;?>">
<input name="4_26c" type="text" id="4_38" size="5"   value="<?php echo $campo4_1f;?>">

mi appare il seguente errore Notice: Undefined offset: 5
e si visualizzano solo i seguenti valori

pippo
paperino
ziopaperone
sandro
maicol

cioè soltanto gli ultimi 5 il primo valore viene saltato
 
Ultima modifica:
ciao
anche se alessandro inorridirà (perchè probabilmente esiste un sistema migliore) prova in questa maniera.
al massimo non funzia
pag col form
PHP:
<?php
//lettura valori del questionario da modificare nel form 
mysql_select_db($database_prova, $prova);
$query4b="SELECT * FROM t4b WHERE ind=$id_q";
$estrai5=mysql_query($query4b, $prova) or die(mysql_error());
$campo1c=array();
//devi portarti dietro anche questi
$campo_id=array();//id del record
$campo_id_q=array();//non serve in quanto dalla select estratti solo quelli con ind=$id_q
//e ti conviene sapere quanti record hai con
$rec_da_mod=mysql_num_rows($query4b, $prova);//enne
//qui ti conviene mettere un if in modo che se non ci sono
//record torni alla pag che ti interessa
//considerando che gli array partano da 0
$arr_da_mod=$rec_da_mod-1;
while($vari_campi=mysql_fetch_array($estrai5)){
	$campo_id[]=$vari_campi['id'];
	$campo_id_q[]=$vari_campi['ind'];// non serve
	$campo1c[]=$vari_campi['2a'];
}
//campi di testo tabella
//ma tu non sai quanti possono essere i record con tale $id_q
//per cui devi rendere anche i vari campi di input dinamici
//cioè devi fare tanti input quanti sono i record
//mentre tu fissi a sei record e se per caso ne hai diversi ti da l'errore
//inoltre devi portarti dietro anche il valore di  dell'id
//quello di ind non serve
// quindi all'interno del form devi fare
?>
<form action="pag_modifica.php" method="post" name="formMod">
<!-- quello che hai prima, se c'è-->
<!-- trasmetto a pag_modifica anche quanti record ho con un campo nascosto -->
<input name="num_rec" type="hidden" value="<?php echo $arr_da_mod;?>">
<?php
//faccio tutto in php
for($k=0;$k<=$arr_da_mod;$k++){
//con un altro campo nascosto trasmetto l'appropriato id
	$nome_ID="id".$k;//serve per il nome del campo id nascosto, es. id0, id1, id2.....
	echo "<input name=\"".$nome_ID."\" type=\"hidden\" value=\"".$campo_id[$k]."\">";
//e con un campo testo trasmetto il testo modificato o non modificato
	$nome_MOD="mod".$k;//serve per nome campo testo, es mod0, mod1, mod2....
	echo "<input name=\"".$nome_MOD."\" type=\"text\" id=\"".$nome_MOD."\" size=\"5\"  value=\"".$campo1c[$k]."\">";
}//fine del for
?>
<!-- quello che hai dopo, es. pulsante di submit -->
</form>   
<!-- eccetera -->

pag per modifica
PHP:
<?php
//pagina pag_modifica.php (se vuoi puoi metterla nella stessa pag del form dopo i dati di connessione)
//se in pag diversa: dati di connessione
if(isset($_POST['submit'])){//verifichi se hai premuto il submit
	//leggi quanti record/array hai
	$quanti=(int)$_POST['num_rec'];//per sicurezza forzi ad intero, da zero a enne meno uno
	//cominci a ciclare i vari input, ATTENZIONE che i nomi siano uguali
	for($j=0; $j<=$quanti; $j++){
		$id_nome="id".$j;//serve per il nome del campo id nascosto, es. id0, id1, id2.....
		$testo_nome="mod".$j;//serve per nome campo testo, es mod0, mod1, mod2....
		$id=(int)$_POST[$id_nome];//leggo valore id dal campo nascosto, forzo ad intero
		$testo=$_POST[$testo_nome];//leggo il testo modificato o no
		//faccio la query di uppa
		$uppa="UPDATE t4b SET 2a='$testo' WHERE id=$id";
		//e uppo il record
		$query=mysql_query($uppa);
		//se il valore di $testo è uguale a quanto hai nel DB non uppa
	}//fine for
}//fine if submit
//qui il ritorno alla pag che ti interessa
?>

guarda che è un esempio, devi verificare i nomi dei campi e della tabella
 
innanzi tutto ti ringrazio per la risposta.
Il numero dei record nella tabella con lo stesso id sono in un numero ben preciso in quanto sono stati inseriti precedentemente dall'utente con un form che ne inserisce sempre in un numero ben preciso. Nel caso della tabella 4b avrò sempre 6 record con lo stesso id per cui non è necessario uno script che mi cerchi quanti record ho nella tabella.
Lo script che ho creato funziona alla perfezione tranne il fatto che mi da quell'errore di cui ti parlavo ma nella tabella 4b ho sempre 6 record
 
ciao
questo semplifica le cose.
quindi i record sono solo e sempre sei.
vorrei sapere:
1. l'utente ha sei campi di input da riempire: può lasciarne uno o più vuoti?
2. nel caso possa lasciarne uno o più vuoti, i campi sono NOT NULL, perchè se sono NOT NUL e l'utente non lo compila il record non viene registrato e quindi i record da 6 diventano di meno per cui, es., l'ultimo array non viene valorizzato e quando lo richiami quello con indice 5 non esiste.
prova a mettere al posto di
$campo1c=array();
questo
$campo1c=array(" "," "," "," "," "," ");
così sei sicuro di avere un array di 6 elementi

comunque devi portarti dietro l'id del record altrimenti come fa lo script a sapere quale record deve uppare?
 
Vabbé, questo script non era poi così male, te lo concedo :D
Comunque se ho capito bene potresti fare anche così:
PHP:
<?php
$campi = array();
for($i =1; $i < 6; $i++)
  $campi[$i] = isset($_POST["campo{$i}"]) ? trim($_POST["campo{$i}"]) : '';
?>
Per fare tutto automaticamente e poi, così, hai anche un indice che parte da uno quindi è più facile.
 
ciao
se i record sono sei e ti trovi nella situazione che un record di t4b non esista utilizza questo sistema
vedi https://www.mrw.it/mysql/articoli/meno-query-grazie-insert-on-duplicate-key-update_1020.html
(sempre che alessandro sia d'accordo)

pagina form
PHP:
<?php
//connessione
$query4b="SELECT * FROM t4b WHERE ind=$id_q"; 
$estrai5=mysql_query($query4b, $prova) or die(mysql_error()); 
$campo_id=array("","","","","","");//id del record, rimane vuoto se record inesistente
$campo1c=array("","","","","","");//testo del record, rimane vuoto se record inesistente
while($vari_campi=mysql_fetch_array($estrai5)){ 
    $campo_id[]=$vari_campi['id'];//legge l'id del record
    $campo1c[]=$vari_campi['2a']; //legge il testo del record
}//fine while
//se, es., il record sesto non esiste l'array[5] rimane a stringa vuota
?>
<form action="pag_modifica.php" method="post" name="formMod">
<!-- trasmetto ind=$id_q con campo hidden -->
<input name="id_q" type="hidden" value="<?php echo $id_q;?>">
<!-- trasmetto id=$campo_id[] con campo hidden -->
<!-- trasmetto testo_m=$campo1c[] con campo testo -->
<!-- li tengo vicini per non confondermi -->
<input name="id0" type="hidden" value="<?php echo $campo_id[0];?>">
<input name="text_m0" type="text" id="text_m0" size="5"  value="<?php echo $campo1c[0];?>">
<input name="id1" type="hidden" value="<?php echo $campo_id[1];?>">
<input name="text_m1" type="text" id="text_m1" size="5"  value="<?php echo $campo1c[1];?>">
<input name="id2" type="hidden" value="<?php echo $campo_id[2];?>">
<input name="text_m2" type="text" id="text_m2" size="5"  value="<?php echo $campo1c[2];?>">
<!-- e così di seguito sino a 5 -->
<!-- eccetera -->
</form>
<!-- eccetera -->


pagina modifica
PHP:
<?php
//eccetera if del submit
$campo_id=array("","","","","","");
$campo1c=array("","","","","","");

$id_q=$_POST['id_q'];//leggo ind
$campo_id[0]=$_POST['id0'];//leggo i vari id e testi
$campo1c[0]=$_POST['text_m0'];
$campo_id[1]=$_POST['id1'];
$campo1c[1]=$_POST['text_m1'];
//e così di seguito sino a 5
//se il record non esiste lo inserisce, altrimenti fa l'update
for($j=0;$j<6;$j++){
	$ins_upp="INSERT INTO t4b VALUES('".$campo_id[$j]."','".$id_q."', '".$campo1c[$j]."') ON DUPLICATE KEY UPDATE 2a='".$campo1c[$j]."'";
	$query=mysql_query($ins_upp);
}//fine for
//eccetera
?>

come al solito verifica i nomi
al massimo non funzia
 
grazie mille borgo italia però la cosa ancora non funziona
ho utilizzato il codice che mi hai suggerito però non mi si visualizza nulla allora ho provato a stampare gli array e ecco cosa visualizzo:

Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => 1 [7] => 1 [8] => 1 [9] => 1 [10] => 1 )

perchè ottengo un record con 10 valori se ne ho impostati 6?

sotto ti rimetto il codice che ho utilizzato

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

print_r($campo1a);


$id_4b1= $campoid[0];
$id_4b2 = $campoid[1];
$id_4b3 = $campoid[2];
$id_4b4 = $campoid[3];
$id_4b5 = $campoid[4];
$id_4b6 = $campoid[5];

secondo me il problema è nel ciclo while allora ho provato a modificarlo così

Codice:
$tabella5=mysql_fetch_array($estrai5); 
$campo1a=array();
$campo1b=array();
$campo1c=array();
$campoid=array();
$a = 0;
while($a<=6){
$campo1a[]=$tabella5['2a']; 
$campo1b[]=$tabella5['2b']; 
$campo1c[]=$tabella5['2c']; 
$campoid[]=$tabella5['id']; 
$a++;
}

il risultato è che ottengo tutti e 6 i record uguali praticamente mi visualizza solo il primo.
Ho notato anche questo se
Codice:
$tabella5=mysql_fetch_array($estrai5);
lo metto dentro al ciclo while mi salta sempre il primo record dei 6 da visualizzare per cui il problema sta nel ciclo di while
 
Ultima modifica:
ciao
errore mio
metti un contatore

$conta=0;
while($vari_campi=mysql_fetch_array($estrai5)){
$campo1a[$conta]=$vari_campi['2a'];
$campo1b[$conta]=$vari_campi['2b'];
$campo1c[$conta]=$vari_campi['2c'];
$campoid[$conta]=$vari_campi['id'];
$conta++;
}
 
la variabile conta lo avevo inserita anche io ma questo non basta il problema rimane mi salta sempre il primo valore mi spiego meglio a quanto sembra nell'array che contiene i record della query ($vari_campi) sono presenti solo 5 record dei 6 presenti invece nel database. praticamente la query mi salta il primo record del database. il ciclo while mi valorizza correttamente 6 variabili conta soltanto che quella con indice 5 (conta[5]) non esiste come dovrebbe proprio perchè nella variabile $vari_campi 5 manca un record ed esattamente il primo
 
Ultima modifica:
ciao scusa una cosa
rifammi vedere come esattamente hai fatto la tabella
da come fai il while semprerebbe che la tabella abbia almeno 5 campi?
 
la tabella si chiama 4b e presenta i seguenti campi:
id autoincrement
id_ref chiave di collegamento con altre tabella
2a
2b
2c

ti posto i primi valori

id id_ref 2a 2b 2c
1 1 a b c
2 1 s s s
3 1 s s s
4 1 a a a
5 1 d d d
6 1 s s s
7 2 s s s
8 2 d d d
9 2 d d d
10 2 s s s
11 2 s s s
12 2 s s s

se faccio la query per selezionare i record con id_ref = 2
ottengo i seguenti valori
id id_ref 2a 2b 2c
8 2 d d d
9 2 d d d
10 2 s s s
11 2 s s s
12 2 s s s

come vedi mi salta il primo record
 
Ultima modifica:
ciao
non capisco perchè non ti renda tutti i record selezionati.
un dubbio, prova a vedere cosa ti contiene il campo id_ref facendo lq semplice query

$query=mysql_qury("SELECT * FROM t4b ORDER BY id");
while($riga=mysql_fetch_array($query)){
echo "per id=".$riga['id']." id_ref = ";
var_dump($riga['id_ref'];
echo "<br>";
}

se la tabella ha i valori indicati dovrebbe darti

per id =1 id_ref = string(1) 1
per id da 1 a 6 e
per id = id_ref = string(1) 2

per id da 7 a 12

prova e fammi sapere cosa ti restituisce
 
ciao
dimenticavo un altro piccolo dubbio
php non ammette variabili che inizino con un numero
es $4aaa non è ammesso
non so se anche i campi mysql abbiano la stessa limitazione
 
ragazzi ho risolto non capisco perchè però coì funziona se riuscite a darmi una spiegazione ve ne sarei grato

Codice:
$campo1a=array();
$campo1b=array();
$campo1c=array();
$campoid=array();

$conta=1;
while($vari_campi=mysql_fetch_array($estrai5)){
$campo1a[$conta]=$vari_campi['2a']; 
$campo1b[$conta]=$vari_campi['2b']; 
$campo1c[$conta]=$vari_campi['2c']; 
$campoid[$conta]=$vari_campi['id'];
$conta++;
} 
$vari_campi1=mysql_fetch_array($estrai5)){
$campo1a[0]=$vari_campi1['2a']; 
$campo1b[0]=$vari_campi1['2b']; 
$campo1c[0]=$vari_campi1['2c']; 
$campoid[0]=$vari_campi1['id'];



$id_4b1= $campoid[0];
$id_4b2 = $campoid[1];
$id_4b3 = $campoid[2];
$id_4b4 = $campoid[3];
$id_4b5 = $campoid[4];
$id_4b6 = $campoid[5];
 
ciao
questo è un mistero però dovrebbe funfionarti anche così

$campo1a=array();
$campo1b=array();
$campo1c=array();
$campoid=array();

$conta=0;
while($vari_campi=mysql_fetch_array($estrai5)){
$campo1a[$conta]=$vari_campi['2a'];
$campo1b[$conta]=$vari_campi['2b'];
$campo1c[$conta]=$vari_campi['2c'];
$campoid[$conta]=$vari_campi['id'];
$conta++;
}

non c'è ragione perche non funzi
 
SAlve un piccolo consiglio una delle query di update è la seguente
Codice:
if(isset($_POST['submit'])){ 
$id_q=$_POST['id_nascosto']; 
$val_c1= $_POST['1_a1'];
$val_c2= $_POST['1_a2'];
$val_c3= $_POST['1_a3'];
$val_c4= $_POST['1_a4'];
$val_c5= $_POST['1_2a1'];
$val_c6= $_POST['1_2a2'];
$val_c7= $_POST['1_2a3'];
$val_c8= $_POST['1_2a4'];
$val_c9= $_POST['1_2a5'];
$val_c10= $_POST['1_2a6'];
$val_c11= $_POST['1_2b'];
$val_c12= $_POST['1_3a'];
$val_c13= $_POST['1_3b'];
$val_c14= $_POST['1_4a'];
mysql_select_db($database_prova, $prova);
$uppa="UPDATE t1 SET a1='$val_c1', a2='$val_c2', a3='$val_c3', 1a='$val_c4', 2a1='$val_c5', 2a2='$val_c6', 2a3='$val_c7', 2a4='$val_c8', 2a5='$val_c9', 2a6='$val_c10', 2b='$val_c11', 3a='$val_c12', 3b='$val_c13', 4a='$val_c14' WHERE id='$id_q'";
$query=mysql_query($uppa, $prova) or die(mysql_error()); 
echo "dati modificati chiudere la pagina";

ho notato che se nei campi inserisco questi valori: ', ", \ la query mi da errore
Errore di sintassi nella query SQL vicino a '96896 tuji', a3='3', 1a='4', 2a1='1', 2a2='2', 2a3='3', 2a4='4', 2a5='5', 2a6='' linea 1

come posso evitare questo errore?
grazie a presto
 
ho questo problema
se nei campi del form inserisco questi valori: ', ", \ la query mi da il seguente errore
Errore di sintassi nella query SQL vicino a '96896 tuji', a3='3', 1a='4', 2a1='1', 2a2='2', 2a3='3', 2a4='4', 2a5='5', 2a6='' linea 1

PEr risolvere il problema nella query di insert ho scritto usato questo script
Codice:
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}




if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "dati")) {
  $insertSQL = sprintf("INSERT INTO t1 (a1, a2, a3, 1a, 2a1, 2a2, 2a3, 2a4, 2a5, 2a6, 2b, 3a, 3b, 4a) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                        GetSQLValueString($_POST['1_a1'], "text"),
						 GetSQLValueString($_POST['1_a2'], "text"),
						  GetSQLValueString($_POST['1_a3'], "text"),
					   GetSQLValueString($_POST['1_a4'], "text"),
                       GetSQLValueString($_POST['1_2a1'], "int"),
					   GetSQLValueString($_POST['1_2a2'], "int"),
					   GetSQLValueString($_POST['1_2a3'], "int"),
					   GetSQLValueString($_POST['1_2a4'], "int"),
					   GetSQLValueString($_POST['1_2a5'], "int"),
					   GetSQLValueString($_POST['1_2a6'], "int"),
					   GetSQLValueString($_POST['1_2b'], "text"),
					   GetSQLValueString($_POST['1_3a'], "int"),
					   GetSQLValueString($_POST['1_3b'], "text"),
					   GetSQLValueString($_POST['1_4a'], "int"));
	
  mysql_select_db($database_prova, $prova);
  $Result1 = mysql_query($insertSQL, $prova) or die(mysql_error());
  $id = mysql_insert_id();
}

come posso adattarlo alla seguente query di update?
Codice:
f(isset($_POST['submit'])){ 
$id_q=$_POST['id_nascosto']; 
$val_c1= $_POST['1_a1'];
$val_c2= $_POST['1_a2'];
$val_c3= $_POST['1_a3'];
$val_c4= $_POST['1_a4'];
$val_c5= $_POST['1_2a1'];
$val_c6= $_POST['1_2a2'];
$val_c7= $_POST['1_2a3'];
$val_c8= $_POST['1_2a4'];
$val_c9= $_POST['1_2a5'];
$val_c10= $_POST['1_2a6'];
$val_c11= $_POST['1_2b'];
$val_c12= $_POST['1_3a'];
$val_c13= $_POST['1_3b'];
$val_c14= $_POST['1_4a'];
mysql_select_db($database_prova, $prova);
$uppa="UPDATE t1 SET a1='$val_c1', a2='$val_c2', a3='$val_c3', 1a='$val_c4', 2a1='$val_c5', 2a2='$val_c6', 2a3='$val_c7', 2a4='$val_c8', 2a5='$val_c9', 2a6='$val_c10', 2b='$val_c11', 3a='$val_c12', 3b='$val_c13', 4a='$val_c14' WHERE id='$id_q'";
$query=mysql_query($uppa, $prova) or die(mysql_error()); 
echo "dati modificati";
}
grazie a tutti di cuore
 

Discussioni simili