Aggiornare tabella tramite form

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ciao, ho un tabella fatta con taglio td e tr con dei punteggi che periodicamente aggiorno. Ogni punteggio è relativo ad un utente. Quello che volevo realizzare era una pagina con una sorta di form dove ad ogni utente io inserivo un punteggio che andava a sommarsi al punteggio che è già in tabella è mi dava il.risultato. Infine dopo averlo fatto per ogni utente, circa 5 o 6, metterli in ordine numerico dal più alto al più basso rispettando ovviamente il legame utente-->punteggio.

Secondo voi come posso fare? Quello che non so come realizzare è la faccenda della somma ed inserimento o sostituzione in tabella.

Qualcuno ha idea?

Ps: tutto ciò è per non farlo manualmente, capisco che faccio prima, ma è un modo per imparare qualcosa di diverso e inventarmi qualcosa.
 
Nel sito le pagine sono tutte in php e mi appoggio ad un db Mysql. Il problema però è che i punteggi adesso sono scritti manualmente e quindi degli utenti non ho traccia nel db. Così come dei punteggi.

Inviato dal mio C6903 utilizzando Tapatalk
 
ciao
da quello che ho capito gli utenti sono pochi (5 o 6) quindi secondo me ti conviene procedere così
ti fai una tabella utenti del tipo
id int(6) autoincrement prymarykey
utente varchar(20)//o altri campi se nome cognome ecc..
punteggio int(6) default 0

ti fai un form per l'insert degli utenti e il loro punteggio che hai attualmente (manina manina)
inseriti gli utenti col loro punteggio ti fai un form per uppare (ti conviene una <select> con i nomi e id, da selezionare) e un campo col il punteggio da aggiungere
poi fai la querry di up tipo
PHP:
$q="UPDATE utenti SET punteggio=punteggio+$punteggio WHERE id=$id";
per vederli in ordine ti basta fare una query del tipo
PHP:
$q="SELECT * FROM utenti ORDER BY punteggio";
 
Grazie borgo! Gentilissimo, di lavoro ne ho parecchio dato il pochissimo tempo che ho a disposizione. Faccio delle prove e vediamo cosa ne esce. Intanto Grazie!!:fonzie:
 
Ecco qua il mi lavoro. Non sarà perfetto, ma penso di essere sulla buona strada.
PHP:
<?php
if(isset($_POST['senddata'])){
	if($_SERVER['REQUEST_METHOD'] == 'POST'){
		//Filtro dati con $mysqli
		$nome     		= $mysqli->trim($_POST['id']);
		$punteggi		= $mysqli->trim($_POST['punteggi']);

			//Controllo se è presente la tabella ed i suoi campi altrimnti li creo
			$ragazzi = $mysqli->query('CREATE TABLE IF NOT EXISTS ragazzi
           (id int(2),
			nome VARCHAR(10),
    		cognome VARCHAR(10),
    		punteggio int(6),
    		PRIMARY KEY (id))');
			if(!$ragazzi){
				echo 'Errore nella creazione della tabella ragazzi';
			} else {
				TRUE;
			}
		
		if(	$update = $mysqli("UPDATE ragazzi SET punteggio=punteggio+$punteggi WHERE id=$id")){
			if($ordinati = $mysqli("SELECT * FROM ragazzi ORDER BY punteggio")){
				echo "Aggiornamento ed ordinamento riuscito!";
			} else {
				echo "Ordinamento mancato!";
			}
		} else {
			echo "Aggiornamento non riuscito!";
		}
		
	}//Chiusura REQUEST METHOD

} else {
	?>
          <div class="form_admin content_2">
          <form id="jform" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">
		<fieldset>
        <legend>Ragazzi</legend>
        <?php
	if($result = $mysqli->query("SELECT id,nome,cognome,punteggio FROM ragazzi")){
			while ($row = $result->fetch_assoc())
			{
			echo '<input class="wrong" type="text" name="id[]" value="'. $row['nome'].' '.$row['cognome'].'" disabled>';
			echo '<input class="wrong" type="text" name="punteggio" value="'. $row['punteggio'].'" disabled>';
			echo '<input class="wrong" type="number" name="punteggio[]" value=""  min="0"><br><br>';
			}
	}
	?>
      </fieldset>
        <p></p>
<p class="cont-button">
       	  <input type="hidden" name="senddata" value=""/>
					<button type="submit" id="send" name="invia">Inserisci</button>
   					<button type="reset" class="send" onclick="reset()">Reset</button>
					</p>
            </form>
          </div><!--Chiusura form_admin-->
</div><!--content_2-->
<?php
}
?>

Potrebbe andare?

Inoltre mi chiedevo i punteggi con la funzione order me li mette in modo crescente ma come faccio ad inserirli nella tabella tenendo lo stesso ordine? Quando mi mette in ordine crescente i valori questi lo sarannoanche nella tabella che io ho fatto?
 
Secondo voi dove sbaglio?
PHP:
	if(!isset($_POST['id'])){
			echo "EROORE 1 <br>";
		}
		
		if (empty($_POST['id'])) {
			echo "ERRORE 2";
		} else {
			$id	=	$_POST['id'];
		}
		
				
		if($update = $mysqli->query("UPDATE ragazzi SET punteggio =punteggio + $agg_punti WHERE id = '$id' ")){
etc etc
}

continua a darmi id undefined variable alla riga
PHP:
		if($update = $mysqli->query("UPDATE ragazzi SET punteggio =punteggio + $agg_punti WHERE id = '$id' ")){
 
Aggiornamento, questo è il codice corretto, senza errori o avvisi solo che non riesco ad aggiornare il valore in tabella
PHP:
<?php
if(isset($_POST['invia'])){
	if($_SERVER['REQUEST_METHOD'] == 'POST'){

		//Controllo se è presente la tabella ed i suoi campi altrimnti li creo
		$ragazzi = $mysqli->query('CREATE TABLE IF NOT EXISTS ragazzi
           (id int(2),
			nome VARCHAR(10),
    		cognome VARCHAR(10),
    		punteggio int(6),
    		PRIMARY KEY (id))');
		if(!$ragazzi){
			echo 'Errore nella creazione della tabella ragazzi';
		} else {
			TRUE;
		}

		if(!isset($_POST['id']) || (empty($_POST['id'])) ){
			echo "EROORE 1 <br>";
		} else {
			$id	=	$_POST['id'];
		}

		$punteggio		= $_POST['punteggio'];
		$agg_punti		= $_POST['nuovi_punti'];

if($update = $mysqli->query("UPDATE ragazzi SET punteggio = punteggio + $agg_punti, aggiornato = NOW() WHERE id = '$id' ")){
				echo "<div class=\"tabella\">Dati aggiornati ed ordinati!</div>";
				echo "<meta http-equiv='Refresh' content='5; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
			} else {
			echo "Aggiornamento non riuscito!\"<br>";
			echo "Errore:" . $mysqli->error .".";
		}


	}//Chiusura REQUEST METHOD

}

Dove sbaglio? la somma è corretta. :incazz2::incazz2::dipser::dipser:
 
ciao
così a naso e di corsa vedo alcune cose
all'id primarykey dagli anche l'autoincrement
quando fai il where all' $id non mettere gli apici
vedo che vuoi uppare il campo aggiornato, ma non lo vedo nella tabella che hai fatto
 
Ciao,
l'id è autoincrement ma non nel file php, quello l'homesso dopo
gli apici li ho messi in quanto mi dava errore di variabile indefinita
la colonna aggiornato è presente nel mi db ma non nel file php di controllo.

se lascio gli apici non ottengo errori ma non inserisco nulla nel db, se invece tolgo gli apici mi da questo errore:

Codice:
You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 'pinco' at line 1.
 
Ciao,
penso di aver risolto!
Il problema è che con POST prendo il value del tag con name id, e quel tag era il nome e cognome dell'utente. Quindi per mantenere quel tag input con nome e cognome ho creato un altro tag input nascosto che ha come name l'id dell'utente e value il suo id preso dal db. Fatto questo mi inserisce ed aggiorna correttamente la tabella. Qui di seguito il codice corretto. Se qualcuno mi potesse dare la conferma o eventualmente un altro modo di ottenrere l'aggiornamento della tabella lo apprezzerei molto.
PHP:
if($result = $mysqli->query("SELECT id,nome,cognome,punteggio,aggiornato FROM ragazzi ORDER BY punteggio DESC")){
			while ($row = $result->fetch_assoc())
			{
			echo '<input type="hidden" name="id" value="'.$row['id'].'">';
			echo '<input type="text" name="nome" value="'.$row['nome'].' '.$row['cognome'].'" readonly="readonly">';
			echo '<input type="text" name="punteggio" value="'. $row['punteggio'].'" readonly="readonly" >';
			echo '<input type="number" class="onlyNumber" name="nuovi_punti" value="0" min="0">';
			echo '<input type="time" name="data" value="'.$row['aggiornato'].'" readonly="readonly"><br><br>';
			}
	}

mentre questo è la parte dell'inserimento nel db
PHP:
$new_score= ($punteggio + $agg_punti);


		if($update = $mysqli->query("UPDATE ragazzi SET punteggio = $new_score, aggiornato = NOW() WHERE id = '$id' ")){
//			if($ordinati = $mysqli->query("SELECT * FROM ragazzi ORDER BY punteggio DESC")){
				echo "<p></p><div class=\"tabella\">Dati aggiornati ed ordinati!</div>";
				echo "<meta http-equiv='Refresh' content='5; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
			} else {
			echo "Aggiornamento non riuscito!\"<br>";
			echo "Errore:" . $mysqli->error .".";
		}

Se non ci sono correzioni direi di mettere il Risolto.
Grazie borgo!
 
ciao
intanto una cosa
perchè ogni volta crei o cerchi di creare la tabella?
la tabella basta crearla una volta sola
poi se ti da variabile indefinita vuol dire che la variabile non è stata valorizzata prima che tu cerchi di usarla
usa il var_dump per vedere, prima di fare l'up, se le variabili ci sono, in particolare l'id, perche deve essere un numero intero (quindi senza apici)
se con gli apici non ti da errore probabilmente vuol dire che la query diventa ... WHERE id='' cioè stringa vuota
inoltre quele è la riga 1? alla riga 1 vedo if(isset($_POST['invia'])){ che non c'entra nulla con mysql
 
ciao
intanto una cosa
perchè ogni volta crei o cerchi di creare la tabella?
la tabella basta crearla una volta sola
poi se ti da variabile indefinita vuol dire che la variabile non è stata valorizzata prima che tu cerchi di usarla
usa il var_dump per vedere, prima di fare l'up, se le variabili ci sono, in particolare l'id, perche deve essere un numero intero (quindi senza apici)
se con gli apici non ti da errore probabilmente vuol dire che la query diventa ... WHERE id='' cioè stringa vuota
inoltre quele è la riga 1? alla riga 1 vedo if(isset($_POST['invia'])){ che non c'entra nulla con mysql

Per la tabella hai ragione devo eliminare quella parte di codice.
Per la variabile indefinita avevo scritto male io il codice.
L'errore che punta alla riga 1 era l'errore legato al valore che il POST prendeva dall'input con name=id che per errore mio e per mia incompetenza avevo assegnato un value (nome e cognome dell'user) e quindi non andava avanti.

Ribadisco che adesso funziona tutto, devo solo capire come usare il php all'interno delle tabelle table, td, tr, etc. ma questo è un altro discorso.

Grazie
 
In questa tabella dove funziona tutto vorrei che a fianco del nome utente ci fosse un numero crescente tipo
1) pinco pallo
2) panco pillo
etc.
Solo che non so come creare un elenco numerato limitato a gli utenti che appaiono nella tabella. Probabilmente con un ciclo foreach ma sono di difficile comprensione per me e non ne vengo fuori. Qualcuno saprebbe darmi qualche dritta? Altrimenti dovrò tenerli senza nnumero.

Grazie
 
Ragazzi, purtroppo mi sembrava troppo facile.
Ho provato la tabella cercando di aggiornare i dati solo dell'ultimo user, ma non del primo. Ed oviamente quando cerco di aggiornare i punti del primo o del secondo utente non mi aggiorna nulla, in quanto non mi prende i punti che inserisco nel form. Essendo un ciclo while dove ogni volta che cicla sovrscrive i valori dovrei usare forse un foreach? Del tipo "per ogni utente prendi il punteggio nuovo e sommalo al vecchio"? Come potrei impostarlo?
 
Provo a spiegarmi meglio in un form per ogni riga io ho un campo ID nascosto dove associo al value l'id dell'utente preso dal db, un campo nome uno con il punteggio preso dal database e un campo vuoto dove vado ad assegnare il nuovo punteggio, come faccio a legare tutti i dati per associare il punteggio di ogni utente e poter aggiornare il database. Il controllo lo faccio utilizzando l'ID e non il nome dell'utente. Dovrò usare probabilmente un ciclo foreach while ma non riesco a legare i valori presi dal form qualcuno mi può dare una mano
 
Ragazzi, nessuno che sa darmi un consiglio? Non dico il codice da copia ed incolla, ma semplicemente un consiglio, una dritta. :crying:
 

Discussioni simili