JeuWeb - Crée ton jeu par navigateur
[Résolu] Changement d'alliance - 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ésolu] Changement d'alliance (/showthread.php?tid=2473)

Pages : 1 2 3


[Résolu] Changement d'alliance - alechuga - 24-02-2008

Salut c'est moi, NON NE PARTEZ PAS :triste:
Je suis entrain de faire mon script d'alliance mais lorsque quelqu'un veut s'inscrire dans une alliance le script plante avec cette merveilleuse erreur
Code PHP :
<?php 
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 'WHERE ID='61')' at line 1
61 est l' ID de la personne concerné.
Je vous donne le merveilleux code que j'ai concocté exprès pour vous montrer l'exemple à ne pas suivre
Code PHP :
<?php
session_start
();
include(
"obligatoire.php");

$nom = $_POST['nom'];
$descrit = $_POST['descrit'];
mysql_query("INSERT INTO alliance (nom, nombres, texte) VALUES('".$nom."', '', '".$descrit."')") or die (mysql_error());
mysql_query("UPDATE alliance SET nombres = nombres + 1 WHERE NOM='$nom'") or die (mysql_error());
mysql_query("INSERT INTO membres (alliance) VALUES (".$nom.") WHERE ID='$_SESSION[id]'") or die (mysql_error());
header('location: alliance.php');
?>



RE: changement d'alliance - Valter - 24-02-2008

Je suis pas sur, mais essaie :
1)
Code PHP :
<?php 
mysql_query
('UPDATE alliance SET nombres = nombres + 1 WHERE NOM="'$nom'"') or die (mysql_error());

Ensuite, à location c'est pas un L majuscule ?

2) Sinon, je pourrais voir obligatoire.php, stp :rip:


RE: changement d'alliance - Raoull - 24-02-2008

Si $_SESSION[id] est un nombre, inutile de l'entourer de guillement dans ta requete SQL.
Mais c'est pas ça qui fait planter la requete. T'es sur te ta structure de bdd ?

PS : Tu récupères tes valeurs POST direct et tu les balances dans tes requetes sql, sans aucune verif, c'est très dangereux...

edit : pkoi c'est pas $_SESSION['id'] (avec les guillmets, id n'est pas une constante je pense)


RE: changement d'alliance - alechuga - 24-02-2008

C'est ma faute j'ai pas été assez clair, la seule chose qui plante c'est la dernière ligne. les modifs sont faites en BDD pour toutes les autres mais pas celle-là.

Sinon Raoull tu peux m'expliquer le truc des guillemets ? Pour ce qui est de la sécurité je doute que beaucoup de monde s'intéressent à mon site.


RE: changement d'alliance - Eluox - 24-02-2008

Voila ce que je ferais suivis de quelques conseil/expliquation
Code PHP :
<?php
session_start
();
include(
"obligatoire.php");

$nom = htmlentities($_POST['nom'], ENT_QUOTES));
$descrit = htmlentities( $_POST['descrit'], ENT_QUOTES));

doquery("INSERT INTO alliance SET `nom` = {$nom}, `texte` = {$descrit}");
doquery("UPDATE alliance SET `nombres` = nombres+1 WHERE NOM={$nom}");
doquery("INSERT INTO membres SET `alliance` = {$nom} WHERE id= {$_SESSION['id']}");
header("Location: alliance.php");
?>

Pourquoi une fonction doquery, personnellement je l'aime bien, elle gère les mysql_fetch_assoc ( gain de temps) et puis le mysql_error renvoi la requete qui a causé l'erreur

Doquery =
Code PHP :
<?php 
function doquery($query, $fetch = false) {

$result = mysql_query($query) or die ('Erreur SQL: '.mysql_error().'<br />Requete: '.$query);
if(
$fetch) {
$result = mysql_fetch_assoc($result);
}
return
$result;
}

Autre remarque, pour trouver l'alliance du membre, je te conseille d'eviter un champ avec un nom, mais plutot mettre l'id de l'alliance, sa évite les problèmes Wink


RE: changement d'alliance - Aro - 24-02-2008

@Raoull: Je pense pas que l'absence d'apostrophes dans son tableau de session change quelque chose puisque dans le message d'erreur, il affiche bien "61"... Mais ce serait un truc à tenter Confused

@alechuga:

Code PHP :
<?php 
mysql_query
("INSERT INTO alliance (nom, nombres, texte) VALUES('".$nom."', '', '".$descrit."')") or die (mysql_error());
Ici tu as mi des apostrophes autour des variables que tu insères pas base de données et il n'y a pas d'erreur...

Code PHP :
<?php 
mysql_query
("INSERT INTO membres (alliance) VALUES (".$nom.") WHERE ID='$_SESSION[id]'") or die (mysql_error());
Alors que là tu n'en mets pas... si ça se trouve c'est simplement que chez ton hébergeur ils veulent que tu mettes '".$nom."' ...

Sinon, bah... je vois pas...


RE: changement d'alliance - Anthor - 24-02-2008

Mais ca choque personne un INSERT TO couplé avec un WHERE ???

Soit tu UPDATE la ligne correspondant avec l'id soit tu utilise un REPLACE TO si tu n'es pas sur que la ligne existe.


RE: changement d'alliance - omsi668 - 24-02-2008

$nom = mysql_real_escape_string($_POST['nom']);


Peut être ??


RE: changement d'alliance - Raoull - 24-02-2008

'ffectivement !
pas vu le insert/where, tu as l'oeil de taupe Anthor Wink


RE: changement d'alliance - alechuga - 24-02-2008

Dsl mais aucune de vos propositions ne marchent. Toujours la même erreur, elle ne se marque que si je demande un mysql_error sinon la requête n'est juste pas exécuter.