UPDATE di più campi del databse con valori immessi da caselle di testo

Monital

Utente Attivo
15 Apr 2009
778
2
18
Spero che il titolo lasci intendere manon sapevo come scriverlo.

cmq sia il problema dovrebbe essere di semplice soluzione. dopo un intera giornata dedicata all'estrazione ed incolonnamento :incazz2::incazz2::incazz2::incazz2: dei dati del database mi ritrovo nell'incognita di come modificarli.

in sostanza descrivo lo script

con questo codice

PHP:
$sql = "SHOW COLUMNS FROM tabella";
$result = mysql_query($sql) or die(mysql_error());

$columns = array();

while($row = mysql_fetch_assoc($result))
    $columns[] = $row['Field'];

$sql_columns = implode('+', $columns);  

$MIO_POST = $columns;
$ultimachiave =$MIO_POST;

unset($MIO_POST[0],$ultimachiave);
unset($MIO_POST[1],$ultimachiave);


$per = implode(',', $MIO_POST);

estraggo alcune colonne dal daabse diciamo "nome" "cose" "citta" ene lascio fuori altre che so "lettere" Testamento"

poi effettuo una query dove recupero i valori

PHP:
   $query = "SELECT {$per} FROM tabellona WHERE ID='$x'";
    $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );
  while ($row = mysql_fetch_assoc($risultato)) {




 foreach($row as $key=>$colonna){
 
$risx.="<tr>\n";
 


$risx.= "<td>".$colonna."</td>\n";
  
       $risx.= "<td><input type=\"text\" name=\"casella[{$Key}]\" style=\"font-size: 8pt; color:#000000; height:16px; width:30px;\" value=\"$colonna\" /></td>\n";
	   	
        }
$risx.=" </tr>\n";

		}
		
     echo '<table class="db-table" cellpadding="0" cellspacing="0"><tbody><tr><th>Attuale</th><th>Modifica</th></tr>';
        echo $risx;
        echo '</tbody></table><br>';

e come si può vedere li associo(almeno spero) una casella di testo per modificarne i valori. fatto ciò con un form invio tutto ad un altra pagina che recupera i dati

PHP:
<?php
$casella= isset($_POST['casella']) ? $_POST['casella'] : array();

if (count($casella)) {
    foreach ($casella as $id => $value) {
 		echo $value."<br>";
    }
}
?>

fin qui tutto ok $value mi restituisce il valore inserito nelle caselle di testo nellos tesso ordine.

Ora i problemi sono due. intanto non sono certo che le caselle siano associate al valore del campo e sopratutto non so come far modificare la riga del databse per intero rispettando i campi del database cioè "nome cose e città

spero di essermi spiegato ma sorpatutto di ricevere lumi dato che e da stamattina che sono su sta cosa e mi sono bloccato sulla parte essenziale

Thank
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao,

Intanto che vado avanti a leggere il tuo codice ti faccio una domanda

Perchè usi SHOW COLUMS per crearti la variabile $per

non puoi semplicemente scrivere

SELECT nome,cose,citta FROM TABELLA

?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Altra cosa

$key non è uguale a $Key

Attenzione alle maiuscole/minuscole

vado avanti a leggere :book:
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Dovresti inizializzare la variabile $risx prima di concatenarla nel ciclo se no ricevi un warning
prima del foreach
PHP:
$risx = "";
detto questo secondo me potresti provare cosi:
come name al campo gli dai solo la chiave dell'array che dovrebbe essere il nome del campo della tabella
PHP:
$risx.= "<td><input type=\"text\" name=\"{$key}\" value=\"$colonna\" /></td>\n";
dovrai crearti un input hidden per passare anche l'id da modificare:
PHP:
echo "<input type='hidden' name='ID' value='$x'/>";
quando invii il post piu o meno puoi fare in questo modo:
PHP:
if (isset($_POST)) {
    foreach ($_POST as $key => $value) {
        // evitiamo il post ID e se lo hai anche il post del submit
        if ($key != "ID") {
            $query = "UPDATE tabella SET $key = '" . $value . "' && ID = " . $_POST['ID'] . "";
            // facciamo l'eco per vedere se le query sono giuste
            echo $query . "<br/>";
        }
    }
}

al posto dell'echo se le query sono giuste le esegui
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
Ciao,

Intanto che vado avanti a leggere il tuo codice ti faccio una domanda

Perchè usi SHOW COLUMS per crearti la variabile $per

non puoi semplicemente scrivere

SELECT nome,cose,citta FROM TABELLA

?

perchè con il tmepo potrebbe capitare di aggiungere un nuovo campo e quindi queso codice non deve essere più toccato

Altra cosa

$key non è uguale a $Key

Attenzione alle maiuscole/minuscole

vado avanti a leggere :book:

ok grazie non me n ero accorto

per il resto


SIETE GRANDI

:beer::beer:

ps

coem mio solito quando una cosa non va incomincio a fare prove su prove e nell'insert mi dava errore perchè non trovava il campo INVIA allora stavo izniaindo a diventare scemo e senza raccontare le prove che mia ccingevo a fare rileggo il post e mi sono accorto che dovevo aggiungere a

PHP:
	 if ($key != "ID" )

PHP:
&& $key!="INVIA") {
:hammer:

GRAZIE GRAZIE non hai idea da quadno cia ndavo dietro a sta cosa per creare un pannelo admin, ho sempre lasciato indietro grazie
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
GRAZIE GRAZIE
:fonzie:

Rileggendo la discussione mi sono accorto di aver fatto un errore nella query UPDATE

al posto di " WHERE ID " ho scritto erroneamente " && ID"

probabilmente te ne sei accorto ma a qualcun'altro potrebbe sfuggire

:byebye:
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
:fonzie:

Rileggendo la discussione mi sono accorto di aver fatto un errore nella query UPDATE

al posto di " WHERE ID " ho scritto erroneamente " && ID"

probabilmente te ne sei accorto ma a qualcun'altro potrebbe sfuggire

:byebye:


si me ne ero accorto subito di questo.

grazie ancora
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
mi chiedevo un altra cosa

se di questa tabella a 4 colonne vorrei farle modificare tutte e 4 però questa volta ho a disposizione anche l'id della riga da poter sfruttare come indice

come faccio?

nella casella di testa credo di dovergli dare

PHP:
name=casella[$id]

però non so come richiamarla

idee?
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
vabbè intanto ho risolto così

ho effettuato una query sulla tabella poi per le caselle gli hoa ssociato l'id

PHP:
$risx.= "<td><input type=\"text\" name=\"casella1[".$row['Id']."']\"  value='".$row['Nome']."' /></td>";

$risx.= "<td><input type=\"text\" name=\"casella2[".$row['Id']."']\"  value='".$row['Nome']."' /></td>";

etc.

e poi epr ogni campo ho richiamato la variabile ed effettuato il foreach con relativo upadate

PHP:
$nome= isset($_POST['nome']) ? $_POST['nome'] : array();

///così per gli altri 3 campi

if (count($nome)) {
    foreach ($nomeas $id=>$value) {

		
                 $sqlquery = "UPDATE tabella SET Nome= '" . $value . "' WHERE Id = " . $id . "";
			$query=mysql_query($sqlquery)or die("Errore nella query: " . mysql_error());;

        
    
	}
	}

/questo per tutti i 4 campi

al momento funge bene così seppur sonoc erto che esisteuna maniera + dinamica ma ora ho ilc ervello fuso ;)
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
riprendo questo topic perchè ho un problemino a seguire

nel caso in oggetto io dovevo modificare solo un intera colonna mentre ora vorrei modificare tramite php un intera tabella.

ho usato los tesso script ma nella pagina di elaborazione dati mi prende solo l'ultima riga posto il codice della apgina di modifica

PHP:
$sql = "SHOW COLUMNS FROM $table";
$result = mysql_query($sql) or die(mysql_error());

$columns = array();

while($row = mysql_fetch_assoc($result))
    $columns[] = $row['Field'];

$sql_columns = implode('+', $columns);  

$MIO_POST = $columns;
$ultimachiave =$MIO_POST;

unset($MIO_POST[0],$ultimachiave);


$per = implode(',', $MIO_POST); 
foreach($MIO_POST as $val){



$risx.="<th>".$val."</th>";
}
		


    $query = "SELECT {$per} FROM $table WHERE Citta='$citta' ORDER by ID";
    $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );
  while ($row = mysql_fetch_assoc($risultato)) {

$id=$row['ID'];
$risx.="<tr>\n";

 foreach($row as $id=>$colonna){



       $risx.= "<td ><input type=\"text\" class=\"inputtext\" name=\"entry[{$id}]\"  value=\"{$colonna}\" /></td>\n";
	   	
        }
$risx.=" </tr>\n";

		}
		
     echo '<table class="db-table" cellpadding="0" cellspacing="0"><tbody>'.$risx;
        echo '</tbody></table><br>';

ora facendo un var dump di colonna vedo tutta la tabella e qua ci siamo quando vadoa processare i dati sorgono i rpoblemmi

PHP:
$entry= isset($_POST['entry']) ? $_POST['entry'] : array();
$table= $_POST['table'];
$citta=$_POST['citta'];
$x=$_POST['x'];
if (count($entry)) {
    foreach ($entry as $id => $value) {
        // evitiamo il post ID e se lo hai anche il post del submit
		 if ($id!="INVIA" && $id!="ID") { 

                 $sqlquery = "UPDATE $table SET {$id} = '" .$value. "' WHERE Citta= '" .$citta. "'";
            // facciamo l'eco per vedere se le query sono giuste
			echo $sqlquery."<br>";
        
    }
	}
	}

in pratica sempre con var dump noto che in $value c'è solo l'ultima riga della tabella e quindi l'update salta modificandomi tutte le righe della tabella secondo $value.

penso che $value abbia bisogno di un ulteriore foreach o probabilemnte sbaglio a inviare entry qualcuno ha un ideuzza?
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
Suvvia non mi deludete, :p

sono giorni che ci lavoro su è sembra più complicato di quel che pensavo, premetto che potrei risolvere estraendo i valori non mysql assoc e elencare tutte le colonne ma volevo crear eun qualcosa di dinamico nel caso dovesia ggiungere un campo al database non voglio rmettere mano al codice

detto ciò sono sicuro di esserci vicinissimo e illustor il nuovo codice

la tabella diciamo che è formata così

Nome|Cognome|città|cantanti|etc.

allora estraggo prima il nome delle colonne

PHP:
$sql = "SHOW COLUMNS FROM $table";
$result = mysql_query($sql) or die(mysql_error());
$columns = array();
while($row = mysql_fetch_assoc($result))
    $columns[] = $row['Field'];

$MIO_POST = $columns;
$new =$MIO_POST;
unset($MIO_POST[0],$new);//elimino il primo campo
$per = implode(',', $MIO_POST); 
foreach($MIO_POST as $val){
$ristable.="<th>".$val."</th>";
echo "<input type='hidden' name='val[]' value='$val'/>"; 
}

//estraggo i dati dei campi contenuti in $per

    $query = "SELECT {$per} FROM $table WHERE Città='$citta' ORDER by ID";
    $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );
	$nr=mysql_num_rows($risultato);
	echo "<input type='hidden' name='nr' value='$nr'/>"; 
  while ($row = mysql_fetch_assoc($risultato)) {
$risx.="<tr>\n";
 foreach($row as $colonna){
       $risx.= "<td ><input type=\"text\" class=\"inputtext\" name=\"entry[]\"  value=\"$colonna\" /></td>\n";
	   	
        }
$risx.=" </tr>\n";

		}

fatto ciò

nella pagine che esegue le operaioni ho questo codice

PHP:
$val= isset($_POST['val']) ? $_POST['val'] : array();//trasformo val in array
$nr=$_POST['nr'];
$entry= isset($_POST['entry']) ? $_POST['entry'] : array();


if (count($entry)) {
foreach ($entry as $key=>$value) {
$valore=$val[$key];//associo $val alla chiave del value
$sqlquery = "UPDATE $table SET {$valore} = '" .$value. "' WHERE  Citta= '" .$citta. "'";
			echo $sqlquery."<br>";
        
    }

	}


dicevo che ci sono quasi perchè in valore è presente ils eguente array

Nome,Cose,Citt, cantanti,etc. però la query la esegue solo sulla prima riga in rpatica fa una cosa del genere

PHP:
UPDATE tabella SET Nome = 'Pippo' WHERE Citta= 'Topolinia'
UPDATE tabella SET Cose= 'piedi' WHERE Citta= 'Topolinia'
UPDATE tabella SET Cantanti= 'Pippoide' WHERE Citta= 'Topolinia'
UPDATE tabella SET etc= 'etc' WHERE Citta= 'Topolinia'
//ora cis ono diverse altre righe ma lo script non isnerisce più i campi
UPDATE tabella SET = 'Topolino' WHERE Citta= 'Topolinia' //Dovrebbe riscrivermi UPDATE tabella SET Nome = 'Topolino' WHERE Citta= 'Topolinia'
UPDATE tabella SET = 'Naso' WHERE Citta= 'Topolinia'
UPDATE tabella SET = 'topolinoide' WHERE Citta= 'Topolinia'
UPDATE tabella SET = 'etc' WHERE Citta= 'Topolinia'

etc.etc.

in pratica i campi non si ripetono per qusto avevo estertto il numero di righe e pensavo di usare il ciclo for ma questo isnerito nel foreach si sballa restituendomi
PHP:
UPDATE tabella SET Nome = 'Pippo' WHERE Citta= 'Topolinia'
UPDATE tabella SET Nome= 'piedi' WHERE Citta= 'Topolinia'
UPDATE tabella SET Nome= 'Pippoide' WHERE Citta= 'Topolinia'
UPDATE tabella SET Nome= 'etc' WHERE Citta= 'Topolinia'

e via via con gli altri campi

sono sicuro che sono vicinissmo ma c'è qualcosa che non vedo, magari conq ueste ultime modifiche a qualcuno sia ccende la lampadina

grazie
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
T Update di più record PHP 0
felino Windows 7: errore 80072EFE su Windows Update Windows e Software 0
A pulsante di update campo mysql con javascript Javascript 2
elpirata Update dinamico informazioni scritte in una pagina php jQuery 11
MarcoGrazia ON DUPLICATE KEY ma in realtà non UPDATE mai PHP 17
R Errore UPDATE tabella mysql PHP 1
M Update con condizione SQL PHP 7
M Problema su update di 3 tabelle PHP 1
G Problema update di un database PHP 0
L update tabelle in php mysql [risolto] PHP 6
P update records PHP 2
B [MySQL] Problemino con UPDATE MySQL 10
M [PHP] Query UPDATE che non mi aggiorna campi seconda tabella PHP 3
felino [Windows 8.1] Windows Update non funziona correttamente Windows e Software 3
P [PHP] INSERT e UPDATE PHP 1
elpirata [MYSQL] Schedulare evento per update del campo data su tabella MySQL 0
D [ASP] Mysql insert e update Classic ASP 2
M UPDATE non aggiorna db se lo inserisco in un ciclo Database 1
Monital [PHP] query update e select insieme ma frazionando l'arrray PHP 12
D [PHP] Update non trasferisce condizione where PHP 1
L [PHP] Errore UPDATE su tabella DB PHP 22
giancadeejay [PHP] istruzione UPDATE SQL PHP 2
giancadeejay [PHP] UPDATE DATO , SE ESISTE IN DB .. PHP 14
C What is Latest update on SEO SEO e Posizionamento 1
K Non trovo l'errore! PDO MYSQL UPDATE PHP 2
marini91 Update record in mysqli PHP 1
R [MySQL] SQL UPDATE INNER JOIN MySQL 5
giancadeejay [PHP] Update tabella da file csv PHP 3
webmachine [PHP] SELECT, UPDATE VERIFICARNE IL RISULTATO PHP 2
cris8380 [PHP] Update in search. PHP 16
filippino Google Update fine Aprile 2016: Bruschi cambiamenti SERP SEO e Posizionamento 3
pup3770 Riprendere da db e UPDATE PHP 9
N Problema funzione UPDATE PHP 9
C Problema con update di un file PHP 6
L Upload immagine e update dati DB PHP 2
K Problema con update di un database in un ciclo Classic ASP 1
C Problema con Update di una tabella di un db PHP 3
L update MySQL 2
G Update file con javascript per controllo estensioni Javascript 5
P Problemi UPDATE PHP 1
MarcoGrazia [PDO][MySQL] L'update non avviene PHP 1
R Update PHP dalla 5.3.3 alla 5.3.4 PHP 0
S Insert into....on duplicate key update MySQL 2
1 Errore UPDATE, DELETE MS Access 16
Z Google Update del 7 Agosto 2014 SEO e Posizionamento 1
M Messaggio di errore su pulsante update PHP 0
L DML: utente con permessi di UPDATE con WHERE ha bisogno di privilegi di SELECT? PHP 1
I Update multiple PHP 3
M avanzamento update query PHP 2
B Modificare sorgente joomla senza perdita modifiche con update Joomla 2

Discussioni simili