Update tabella da form

di il
2 risposte

Update tabella da form

Ho una pagina in php dove ho creato un piccolo form conil quale aggiorno la tabaella dei punteggi degli utenti. Prelevo dal db i nomi ed i punti, li inserisco nel form e da una casella input inserisco il nuovo punteggi da sommare. Tutto questo per aggiornare "manualmente" la tabella e metterla i ordine decrecente. Il problema è che però non capipsco come mai mi dia un errore di variabile indefinita.
Questo il codice:

<?php
if(isset($_POST['senddata'])){
	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;
		}
		
			$agg_punti		= $_POST['nuovi_punti'];
		
		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' ")){
			if(!$ordinati = $mysqli->query("SELECT * FROM ragazzi ORDER BY punteggio")){
				echo "Errore:" . $mysqli->error .".\"<br>";
				echo "Ordinamento KO!";
			}
		} else {
			echo "Aggiornamento non riuscito!\"<br>";
			echo "Errore:" . $mysqli->error .".";
		}
	

	}//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 type="text" name="'.$row['id'].'" value="'. $row['nome'].' '.$row['cognome'].'" disabled>';
			echo '<input type="text" name="punteggio" value="'. $row['punteggio'].'" disabled>';
			echo '<input type="number" name="nuovi_punti" value="0" 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-->
L'errore me lo da alla riga

		if($update = $mysqli->query("UPDATE ragazzi SET punteggio =punteggio + $agg_punti WHERE id = '$id' ")){
lasciando stare le eventuali graffe mancanti, secondo voi dove sbaglio? Infine è corretto il codice secondo quello che vorrei fare?

I risultati dovranno essere poi messi in una tabella di tipo "table td tr" dovrò usare anche li php, è possibile, o facci prima ad usare un form?

Grazie

2 Risposte

  • Re: Update tabella da form

    Dopo test e prove questo il codice corretto, se qualcuno avesse consigli su migliorie sarebbero ben accetti,altrimenti direi di chiudere.
    Questo è il motore di update al db
    
    $new_score= ($punteggio + $agg_punti);
    	if($update = $mysqli->query("UPDATE ragazzi SET punteggio = $new_score, aggiornato = NOW() WHERE id = '$id' ")){
    				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 .".";
    		}
    
    mentre qua ilcodice html con recupero dati dal db per ogni utente
    
    <label class="form_admin">Utente</label><label class="form_admin">Punti</label><label class="form_admin">Punti nuovi</label><label>Aggiornato a:</label><p></p>
            <?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>';
    			}
    	}
    	?>
    
    Ho aggiunto il campo "aggiornato" al db per sapere quando è stato fatto l'ultimo update, il problema invece era che non potevo inserire i dati nel db e quindi aggiornarli in quanto con POST dell'id prendevo il value che io mettevo come nome e cognome dell'utente. Ho quindi creato un altro campo input nascosto legato ad ogni utente grazie al quale associo l'id e posso fare l'update al db. Se qualcuno avesse un'idea diversa , migliore, rimango a disposizione.

    Grazie a tutti
  • Re: Update tabella da form

    Ritorno sull'argomento in quanto mi sono accorto che il codice che ho usato e scritto non funziona come pensavo. Mi spiego meglio, nella tabella io porto i valori nome cognome punteggio data di aggiornamento prendendo tutto dal db. Il campo nuovo punteggio è vuoto e sarà quello che dovrà essere riempito con il nuovo punteggio aggirnando i db. Il problema che ho è che non riesco a prelevare ed associare i punti che inserisco ad ogni singolo utente. In sostanza non ci capisco nulla ne con il while ne con il foreach. Qualcuno mi potrebbe illuminare?

    Questo è il codice della pagina dove recupero i dati dal db
    
    <form id="jform" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">
    		<fieldset>
            <legend>Ragazzi</legend>
            <label class="form_admin">Utente</label><label class="form_admin">Punti</label><label class="form_admin">Punti nuovi</label><label>Aggiornato a:</label><p></p>
            <?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>';
    			}
    	}
    	?>
          </fieldset>
    <p class="cont-button">
    					<button type="submit" id="send" name="invia">Inserisci</button>
       					<button type="reset" class="send" onclick="reset()">Reset</button>
    </p>
                </form>
    
    mentre questo è il codice per aggiornare ed inserire i punteggi
    
    if(!isset($_POST['id']) || (empty($_POST['id'])) ){
    			echo "EROORE 1 <br>";
    		} else {
    			$id	=	$_POST['id'];
    		}
    
    
    		$agg_punti		= $_POST['nuovi_punti'];
    		$nome			= $_POST['nome'];
    
    		if($update = $mysqli->query("UPDATE ragazzi SET punteggio = punteggio + $agg_punti, aggiornato = NOW() WHERE id = '$id' ")){
    
    				echo "<p></p><div class=\"tabella\">Dati aggiornati ed ordinati!</div>";
    				echo "<meta http-equiv='Refresh' content='500; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    			} else {
    			echo "Aggiornamento non riuscito!\"<br>";
    			echo "Errore:" . $mysqli->error .".";
    			}
    
    Purtroppo non ne vengo a capo so che il ciclo while mi sovrascrive i dati ad ogni ciclo ma non riesco a sortire fuori.

    Qualche dritta??
Devi accedere o registrarti per scrivere nel forum
2 risposte