JeuWeb - Crée ton jeu par navigateur
[réglé] Probleme SQL, message bizard - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [réglé] Probleme SQL, message bizard (/showthread.php?tid=1039)



[réglé] Probleme SQL, message bizard - zneman - 06-04-2007

Bon, en voulant ajouter un suivis des attaque a mon script d'attaque, je me retrouve avec un message bizard:

Citation :Column count doesn't match value count at row 1

Mon code:

Code PHP :
<?php
//Ne pas oublier de mettre le session_start()
session_start();
if (isset(
$_SESSION['logged']) && $_SESSION['logged'] === true)
{
// fichier de connexion:
require("config.inc.php");
// connection à la BDD
mysql_connect($host, $username, $password);
mysql_select_db($bdd_name);
// Je vais chercher les sous du joueur défenseur:
$defenseur = $_GET['pseudo'];
$reponse_joueur_def = mysql_query("SELECT gald FROM membres WHERE pseudo='$defenseur'");
$gald_joueur_def = mysql_fetch_array($reponse_joueur_def);
// Je vais chercher les sous et les tours du joueur attaquant:
$reponse_joueur_attaque= mysql_query("SELECT gald, tours FROM membres WHERE pseudo='".$pseudo."'")or die (mysql_error());
$gald_joueur_attaque = mysql_fetch_array($reponse_joueur_attaque);
// je vais chercher les troupes du défenseur:
$reponse_troupes_joueur_def = mysql_query("SELECT * FROM troupes WHERE pseudo='$defenseur'");
$troupes_joueur_def = mysql_fetch_array($reponse_troupes_joueur_def);
// Je vais chercher les troupes de l'attaquant:
$reponse_troupes_joueur_attaque= mysql_query("SELECT * FROM troupes WHERE pseudo='".$pseudo."'")or die (mysql_error());
$troupes_joueur_attaque = mysql_fetch_array($reponse_troupes_joueur_attaque);

// Maintenant, je calcul l'attaque de l'attaquant:
// Je commence par l'attaque des archers:
$attaque_archers = ($troupes_joueur_attaque['archer_lege']*3)+($troupes_joueur_attaque['archer_lourd']*4)+($troupes_joueur_attaque['archer_elite']*6);
// Puis l'attaque des lanciers:
$attaque_lanciers = ($troupes_joueur_attaque['lancier_lege']*2)+($troupes_joueur_attaque['lancier_lourd']*3)+($troupes_joueur_attaque['lancier_elite']*5);
// Puis l'attaque des cavaliers:
$attaque_cavaliers = ($troupes_joueur_attaque['cavalier_lege']*2)+($troupes_joueur_attaque['cavalier_lourd']*3)+($troupes_joueur_attaque['cavalier_elite']*5);
// Enfin, le tout me donne l'attaque de l'attaquant:
$attaque_totale = $attaque_archers + $attaque_lanciers + $attaque_cavaliers;

// Maintenant, je calcul la défense du défenseur:
// Je commence par la défense des archers:
$defense_archers = ($troupes_joueur_def['archer_lege']*3)+($troupes_joueur_def['archer_lourd']*4)+($troupes_joueur_def['archer_elite']*6);
// Puis l'attaque des lanciers:
$defense_lanciers = ($troupes_joueur_def['lancier_lege']*2)+($troupes_joueur_def['lancier_lourd']*3)+($troupes_joueur_def['lancier_elite']*5);
// Puis l'attaque des cavaliers:
$defense_cavaliers = ($troupes_joueur_def['cavalier_lege']*2)+($troupes_joueur_def['cavalier_lourd']*3)+($troupes_joueur_def['cavalier_elite']*5);
// Enfin, le tout me donne l'attaque de l'attaquant:
$defense_totale = $defense_archers + $defense_lanciers + $defense_cavaliers;

// On enleve un tour a l'attaquant :P
$tours_moins_un = $gald_joueur_attaque['tours'] - 1;
mysql_query("UPDATE membres SET tours= '".$tours_moins_un."' WHERE pseudo='".$pseudo."'")or die (mysql_error());

// On met la condition IF afin de voir l'issue du combat:
if ($attaque_totale>$defense_totale)
{
// On créé une fonction "galds_en_plus" qui est egale aux galds que possede le défenseur:
$galds_en_plus = $gald_joueur_def['gald'];
// On créé une fonction qui regroupes les galds de l'attaquand plus ceux qu'il viens de gagner:
$galds_total_attaquant = $galds_en_plus + $gald_joueur_attaque['gald'];
echo
'Bien jouer '.$pseudo.'!<br />Vous gagnez et remportez '.$galds_en_plus.'<br />';
echo
'<h4 align="center">Compte rendu de l\'attaque:</h4><br />';
echo
'<ins>Force des lanciers de l\'attaquant:</ins> '.$attaque_lanciers.'<br />';
echo
'<ins>Force des archers de l\'attaquant:</ins> '.$attaque_archers.'<br />';
echo
'<ins>Force des cavaliers de l\'attaquant:</ins> '.$attaque_cavaliers.'<br />';
echo
'<ins>Force totale des troupes de l\'attaquant:</ins> '.$attaque_totale.'<br />';
echo
'<br /><br />';
echo
'<h4 align="center">Compte rendu de la défense:</h4><br />';
echo
'<ins>Défense des lanciers du défenseur:</ins> '.$defense_lanciers.'<br />';
echo
'<ins>Défense des archers du défenseur:</ins> '.$defense_archers.'<br />';
echo
'<ins>Défense des cavaliers du défenseur:</ins> '.$defense_cavaliers.'<br />';
echo
'<ins>Défense totale des troupes du défenseur:</ins> '.$defense_totale.'<br />';
// On ajoute les galds de l'attaquant:
mysql_query("UPDATE membres SET gald= '".$galds_total_attaquant."' WHERE pseudo='".$pseudo."'")or die (mysql_error());
// On enleve les galds du défenseur:
mysql_query("UPDATE membres SET gald=0 WHERE pseudo='$defenseur'");
// On résupere le Timestamp actuel:
$timestamp = time();
// On ajoute un suivis dans la BDD:
mysql_query("INSERT INTO suivis(attaquant, defenseur, force_archers, force_lanciers, force_cavaliers, force_totale, def_archers, def_lanciers, def_totale, resultat, galds_volés, timestamp) VALUES('" . $pseudo . "', '" . $defenseur . "', '" . $attaque_archers . "', '" . $attaque_lanciers . "', '" . $attaque_cavaliers . "', '" . $attaque_totale . "', '" . $defense_archers . "', '" . $defense_lanciers . "', '" . $defense_cavaliers . "', '" . $defense_totale . "', 'attaque réussie', '" . $galds_total_attaquant . "', '" . $timestamp . "')")or die(mysql_error());
}
elseif (
$attaque_totale<$defense_totale)
{
echo
'Dommage '.$pseudo.', '.$defenseur.' l\'emporte sur vous !<br />';
echo
'<h4 align="center">Compte rendu de l\'attaque:</h4><br />';
echo
'<ins>Force des lanciers de l\'attaquant:</ins> '.$attaque_lanciers.'<br />';
echo
'<ins>Force des archers de l\'attaquant:</ins> '.$attaque_archers.'<br />';
echo
'<ins>Force des cavaliers de l\'attaquant:</ins> '.$attaque_cavaliers.'<br />';
echo
'<ins>Force totale des troupes de l\'attaquant:</ins> '.$attaque_totale.'<br />';
echo
'<br /><br />';
echo
'<h4 align="center">Compte rendu de la défense:</h4><br />';
echo
'<ins>Défense des lanciers du défenseur:</ins> '.$defense_lanciers.'<br />';
echo
'<ins>Défense des archers du défenseur:</ins> '.$defense_archers.'<br />';
echo
'<ins>Défense des cavaliers du défenseur:</ins> '.$defense_cavaliers.'<br />';
echo
'<ins>Défense totale des troupes du défenseur:</ins> '.$defense_totale.'<br />';
// On résupere le Timestamp actuel:
$timestamp = time();
// On ajoute un suivis dans la BDD:
mysql_query("INSERT INTO suivis(attaquant, defenseur, force_archers, force_lanciers, force_cavaliers, force_totale, def_archers, def_lanciers, def_totale, resultat, galds_volés, timestamp) VALUES('" . $pseudo . "', '" . $defenseur . "', '" . $attaque_archers . "', '" . $attaque_lanciers . "', '" . $attaque_cavaliers . "', '" . $attaque_totale . "', '" . $defense_archers . "', '" . $defense_lanciers . "', '" . $defense_cavaliers . "', '" . $defense_totale . "', 'attaque réussie', '0', '" . $timestamp . "')")or die(mysql_error());
}
}
else
echo
'Erreur : vous devez être connecté pour accéder à cette page !<br />
Allez <a href="index.php">ici</a> pour vous connecter.'
;
mysql_close();
?>

Les parties que j'ai ajouté:

Code PHP :
<?php 
// On résupere le Timestamp actuel:
$timestamp = time();
// On ajoute un suivis dans la BDD:
mysql_query("INSERT INTO suivis(attaquant, defenseur, force_archers, force_lanciers, force_cavaliers, force_totale, def_archers, def_lanciers, def_totale, resultat, galds_volés, timestamp) VALUES('" . $pseudo . "', '" . $defenseur . "', '" . $attaque_archers . "', '" . $attaque_lanciers . "', '" . $attaque_cavaliers . "', '" . $attaque_totale . "', '" . $defense_archers . "', '" . $defense_lanciers . "', '" . $defense_cavaliers . "', '" . $defense_totale . "', 'attaque réussie', '" . $galds_total_attaquant . "', '" . $timestamp . "')")or die(mysql_error());


Et:

Code PHP :
<?php 
// On résupere le Timestamp actuel:
$timestamp = time();
// On ajoute un suivis dans la BDD:
mysql_query("INSERT INTO suivis(attaquant, defenseur, force_archers, force_lanciers, force_cavaliers, force_totale, def_archers, def_lanciers, def_totale, resultat, galds_volés, timestamp) VALUES('" . $pseudo . "', '" . $defenseur . "', '" . $attaque_archers . "', '" . $attaque_lanciers . "', '" . $attaque_cavaliers . "', '" . $attaque_totale . "', '" . $defense_archers . "', '" . $defense_lanciers . "', '" . $defense_cavaliers . "', '" . $defense_totale . "', 'attaque réussie', '0', '" . $timestamp . "')")or die(mysql_error());

Citation :CREATE TABLE `suivis` (
`id` int(11) NOT NULL auto_increment,
`attaquant` varchar(255) collate latin1_general_ci NOT NULL,
`defenseur` varchar(255) collate latin1_general_ci NOT NULL,
`force_archers` bigint(8) unsigned NOT NULL,
`force_lanciers` bigint(8) unsigned NOT NULL,
`force_cavaliers` bigint(8) unsigned NOT NULL,
`force_totale` bigint(8) unsigned NOT NULL,
`def_archers` bigint(8) unsigned NOT NULL,
`def_lanciers` bigint(8) unsigned NOT NULL,
`def_cavaliers` bigint(8) unsigned NOT NULL,
`def_totale` bigint(8) unsigned NOT NULL,
`resultat` varchar(255) collate latin1_general_ci NOT NULL,
`galds_volés` bigint(8) unsigned NOT NULL,
`timestamp` bigint(20) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

Vous pouvez me dire ce que signifie ce message d'erreur SVP ?
Et si possible, pourquoi ca me le marque :heuuu:

merci d'avance :heuuu:


RE: Probleme SQL, message bizard - Roworll - 06-04-2007

Tu dois avoir le même nombre de champs de part et d'autre du VALUE
Tu spécifies 12 champs à updater et tu donnes la liste de 13 valeurs.

A mon avis, il te manque def_cavaliers devant def_totale.


RE: Probleme SQL, message bizard - zneman - 06-04-2007

ha en effet... j'avais pas vu :/ merci bien Smile