Aggiornare valori in mysql (classifica)

  • Creatore Discussione Creatore Discussione mateky
  • Data di inizio Data di inizio

mateky

Utente Attivo
7 Feb 2011
36
0
0
Ho creato questo form:


HTML:
<html>
<head>

<title></title>
</head>
<body>


<form name="classifica" action="aggiungiclassifica.php" method="post">

<select name="squadra">
<option value="Juventus">Juventus</option>
<option value="Inter">Inter</option>
<option value="Napoli">Napoli</option>
<option value="Roma">Roma</option>
</select>
<select name="punti"> 


<option value="1">+1</option>
<option value="3">+3</option>
<option value="0">0</option>


<input type="submit" value="aggiorna punti">
</select>
</form>



</body>
</html>


Poi, nella paggina "aggiungiclassifica.php" ho scritto questo script:

PHP:
<?php

$db = mysql_connect('localhost','mateky','');
if($db == FALSE)
die('Errore: impossibile connettersi al database!'); 
if(!mysql_select_db('my_mateky'))
die('Errore: impossibile accedere al database!');


{
$ris = mysql_query("INSERT INTO classifica (squadra,punti) VALUES('".$_POST['squadra']."','".$_POST['punti']."')");


if(!$ris)
die('Errore: impossibile aggiungere i punti nel database!');
}


mysql_close($db);
?>

e nel mysql, ho creato la tabella "classifica" con questi valori:

id int(11) NOT NULL,
squadra varchar(50),
punti int(50)

poi ho inserito manualmente nel database i valori delle squadre (juventus, inter, roma, napoli) e 0 punti di default a tutti, ma ogni volta che attraverso il form cerco di aggiornare i punti nel database, mi dà l'errore che ho impostato nello script:

Errore: impossibile aggiungere i punti nel database!
 
Ultima modifica di un moderatore:
Prova ad usare un "update set" al posto di un "insert into" così aggiorni il record punti che già era presente dato che di default dovrebbe essere 0
 
Prova con:
PHP:
$ris = mysql_query("INSERT INTO classifica (squadra,punti) VALUES('".$_POST['squadra']."',".$_POST['punti'].")");
 
Ciao,
se non ho capito male, il DB già esiste e contiehe 4 record (uno per squadra) con 3 campi ciascuno (id, squara e punti).
INSERT inserisce un nuovo record al DB, ma tu devi aggiornare (UPDATE) un record già esistente. La quiery quindi dovrebbe essere:

$query="UPDATE 'nomeDB'.'classifica' SET 'punti'='$punti' WHERE 'squadra'='$squadra' ";

dove $squadra e $punti sono due vartiabili d'appoggio dove, per comodità, recupererai i valori passati dal form.
 
Teoricamente dovresti fare questo.. Ma com'è al momento è comunque incompleto perchè hai bisogno di indicare nell'input id un valore identificativo per il record da modificare nel db..

aggiungiclassifica.php
PHP:
<?php 
// Modifichi i dati con un UPDATE 
include 'connection.php';
  try
  {
    $sql = 'UPDATE prodotti SET
       	squadra = :squadra,
	    punti = :punti
      WHERE id = :id';
    $s = $pdo->prepare($sql);
	$s->bindValue(':id', $_POST['id']);
	$s->bindValue(':squadra', $_POST['squadra']);
	$s->bindValue(':punti', $_POST['punti']);
    $s->execute(); 
  }
  // nel caso qualcosa vada storto ti da un errore..
  catch (PDOException $e)
  {
    $error = 'Errore durante update.';
    exit();
  }
// torna alla pagina di provenienza quella del form per intenderci.. o puoi mettere il link che ti pare
  header("location: ".$_SERVER["HTTP_REFERER"].""); 
  exit();

// Fine modifica
?>

HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
<form name="classifica" action="aggiungiclassifica.php" method="post">

<select name="squadra">
<option value="Juventus">Juventus</option>
<option value="Inter">Inter</option>
<option value="Napoli">Napoli</option>
<option value="Roma">Roma</option>
</select>

<select name="punti"> 
<option value="1">+1</option>
<option value="3">+3</option>
<option value="0">0</option>
</select>
<!-- per fare un aggiornamento dei dati devi però avere l'id o un altro dato che identifichi esattamente la riga che vuoi modificare 
una cosa di queste, come vedi sotto.. questo è un input nascosto che serve poi a capire quale record vuoi modificare.. -->
<input type="hidden" name="id" value="<?php echo $squadra['id']; ?>"> 

<input type="submit" value="aggiorna punti">
</form>
</body>
</html>
 
Dimenticavo la connessione al db..

PHP:
<?php
if(__FILE__ == $_SERVER['SCRIPT_FILENAME'])
{
    exit('Accesso diretto negato!') ;
}
try
{
	$pdo = new PDO('mysql:host=TUOHOST;dbname=NOMEDB', 'USERNAME', 'PASS');
}

catch (PDOException $e)
{
	$output = 'impossibile connettersi al server database: ' . $e->getMessage();
	include 'paginachevisualizzaerrore.php';// anche se non esiste si connette ugualmente.. comunque è una semplice pagina con un echo $output ; tutto qui.. 
	exit();
}
 
se invece di modificare voglio aggiungere? visto che clicco sul +3, vorre che aggiungesse +3 nella tabella.
Mi hanno suggerito di fare così:

$ris = mysql_query("UPDATE classifica SET punti = (punti + '".$_POST['punti']."') WHERE squadra =". $_POST['squadra']) or die (mysql_error());


però mi dice "impossibile aggiungere dati nel db", forse perchè devo aggiornare quella riga nel form per il riconoscimento dell'id?
 
anzi l'errore preciso è:

Unknown column 'Juventus' in 'where clause'

però ho scritto esattamente i nomi delle squadre rispettando le maiuscole (sia nel db che nel forum che nello script php)
 
Allora con le istruzioni seguenti andrai ad aggiungere alla alla tabella classifica una riga.. ok? Riempiendo le colonne squadra e punti ( 1, 3, 0 ).

PHP:
<?php 
// includiamo la connessione.. senza doverla riscrivere ogni volta..
include 'connection.php';
// proviamo a fare l'inserimento..
  try
  {
    $sql = 'INSERT INTO classifica SET
			squadra = :squadra,
			punti = :punti';
    $s = $pdo->prepare($sql);
	$s->bindValue(':squadra', $_POST['squadra']);
	$s->bindValue(':punti', $_POST['punti']);
    $s->execute();
  } 
  // Se qualcosa va storto segnalo l'errore..
  catch (PDOException $e)
  {
    $error = 'Error adding product: ' . $e->getMessage();
    include 'eventualepaginavisualizzaerrore.php';
    exit();
  }
?>

Per quanto riguarda l'html possiamo eliminare a questo punto l'id dal form, perchè si tratta di un inserimento ex novo .
Per questo verrebbe:

HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
<form name="classifica" action="aggiungiclassifica.php" method="post">

<select name="squadra">
<option value="Juventus">Juventus</option>
<option value="Inter">Inter</option>
<option value="Napoli">Napoli</option>
<option value="Roma">Roma</option>
</select>

<select name="punti"> 
<option value="1">+1</option>
<option value="3">+3</option>
<option value="0">0</option>
</select>

<input type="submit" value="aggiorna punti">
</form>
</body>
</html>

Saluti Giacomo
 

Discussioni simili