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

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

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

?
 
Altra cosa

$key non è uguale a $Key

Attenzione alle maiuscole/minuscole

vado avanti a leggere :book:
 
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
 
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
 
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:
 
: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
 
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?
 
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 ;)
 
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?
 
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