Forum Clubic

Requête SQL invalide

Bonjour à tous !

L’EXISTANT :

J’ai une table UTILISATEURS qui contient les champs ‘nom’, ‘prenom’, ‘pays’.

Il y a deja plusieurs utilisateurs qui sont enregistrés (32).

Chaque utilisateur s’identifis via un login et mot de passe pour accéder à certaines pages du site.

MODIFICATIONS :

J’ai rajouté un champ dans la table UTILISATEURS ( ‘heures’ )

Ce champ est donc vide pour chaque utilisateurs.

l’utilisateur ‘X’ le rempli via un champ de saisie ou il rentre par exemple ( ‘12’ ).

Il faudrait que ‘12’ aille se placer automatiquement une fois un bouton valider actionné dans la ligne de l’utilisateur ‘X’.

MISE EN OEUVRE :

J’ai donc mis en type de champ dans ma base de donnée “INT” NOT NULL.
Voici maintenant mon code :

 <?php
//Connection à la base
$host = "xxxx";
$name = "xxx";
$pwd = "xxx";
@mysql_connect ($host, $name, $pwd) or die ("impossible to connect to the base. Retry later.");
@mysql_select_db ("xxx") or die ("impossible to connect to the base. Retry later.");

if (($_POST['heures']))
{

//Création de la requète insert
//$sql = "SELECT heures FROM UTILISATEURS WHERE idUtilisateurs = '".$_SESSION['login']."'";    //requete SQL permettant de recuperer la valeur de l'heure avec un identifiant

$r = mysql_query("SELECT heures FROM UTILISATEURS WHERE idUtilisateurs = '".$_SESSION['login']."'");     //on effectue la requete
$o = var_dump($r);    //on récupere les infos sous forme d'objet
$heures = $_POST['heures'] + $o->heures;    //on ajoute les heures

$sql = "UPDATE UTILISATEURS SET heures = '".$heures."' WHERE idUtilisateurs = '".$_SESSION['login']."'";    //requete SQL faisant la mise à jour


?>

Mais j’obtient ce message : bool(false)

Et cela ne modifie rien. (champ ‘heures’ de l’utilisateur).

Pourriez vous m’aider?

Merci beaucoup.

Julien
Edité le 05/07/2007 à 11:54

tu execute la derniere requete sql?
aparament dans le code que tu as fourni, tu ne le fait pas :neutre:

Merci de ton aide mais malheuresement ça ne fonctionne pas.

Je ne sais toujours pas d’où vient ce ‘bool (false)’.

Mais $_POST[‘heures’] est défini puisque lorsque je test, je rentre une valeur dans le champ du formulaire.

Je pense que l’erreur se situe ici mais je ne la vois pas :


//Création de la requète insert 
$sql = "SELECT heures FROM UTILISATEURS WHERE idUtilisateurs = '".$_SESSION['login']."'"; //requete SQL permettant de recuperer la valeur de l'heure avec un identifiant 
$r = mysql_query($sql); 
//on effectue la requete $o = var_dump($r); //on récupere les infos sous forme d'objet 
$heures = $_POST['heures'] + $o->heures; //on ajoute les heures

$sql = "UPDATE UTILISATEURS SET heures = '".$heures."' WHERE idUtilisateurs = '".$_SESSION['login']."'"; //requete SQL faisant la mise à jour 



[quote="jmgchouchou"] tu execute la derniere requete sql? aparament dans le code que tu as fourni, tu ne le fait pas :neutre: [/quote]

J’ai rajouté : mysql_query($sql); ce qui donne :


$sql = "UPDATE UTILISATEURS SET heures = '".$heures."' WHERE idUtilisateurs = '".$_SESSION['login']."'"; //requete SQL faisant la mise à jour
mysql_query($sql);

Mais toujours le même message… :frowning:

est ce que tu arrive a récupérer l’heure en fesant un echo

$heures=$_POST[‘heures’];
echo “$heures”;

et gère l’existance d’une heure en javascript avant de passer a ta page php.

En fait, le champ s’appel heure mais il ne s’agit que de nombres entiers. Mais pour répondre à ta question, je recupere les infos de la base dans un tableau. Actuellement je recupère 0 pour tous les utilisateurs, ce qui est normal je pense vu qu’aucun utilisateur n’a encore saisie le formulaire non ?
Edité le 05/07/2007 à 12:38

C’est faux. On ne gère pas l’heure en javascript, et on ne récupères encore moins une variable avec un echo…
julien, j’ai pas lu tout ton code, mais essaye de saisir le formulaire, comme ça tu verras ce que ça donne.
Pour ce qui est du bool(false), essaye peut-être sans faire de var_dump, puisque $r est déja un tableau…

D’arpès la doc de php, var_dump ne retourne rien donc ta variable $o doit être null. Elle permet d’afficher un objet ou autre de façon à voir toutes les valeurs des variables avec leur type.

je nè pas dit que echo recupère la variable.je di tout simplement kil essais de voir si sa variable est vraiment recuperer.c juste un test .
et je t’apprend k’avec javascript on peut demander a l’utilisateur d’entrer forcement une heure.o lieu de gerer avec php.


tu a aussi raison var_dump ne retourne rien.

1no : sois plus explicite. Pour l’echo, je ne l’avais pas compris dans ce sens. Pour javascript, si j’en lis ton post, on croirais que tu veux récupérer la date en JS, ce qui est différent d’obliger l’utilisateur à l’entrer. Et évites le SMS :jap:

Pour var_dump, fais un echo var_dump($var); d’un tableau, tu verras ce qui est retourné. Encore faut-il que ce soit un tableau. Sinon, elle ne retournera rien (où comme ici, bool(false) )

ok on se comprend maintenant. j’éviterai au maximum d’utilisé le sms.

InSiderZ :

Voici le tableau qui affiche les données de la BDD :
http://www.casimages.com/img/png/mini_07070502001110009810307.png

Et voici le formulaire pour entrer donc une valeur numerique qui doit venir se placer dans la colonne “hours of navigation” du tableau ci-dessus:
http://www.casimages.com/img/jpg/mini_07070502024510009810316.jpg

Voici le code du formulaire (basic) :

<form method="post" action="insert2.php">
  <div style="text-align: center;">
</div>
  <br>
  <div>Duration : <input type="int" name=heures size="3"> hours<br>
  </div>
  <div style="text-align: center;"><input type=submit value=Submit > <input value=Reset type=reset> </div>
</form>

Voici maintenant le code PHP :


<?php
//Connection à la base

if (($_POST['heures']))
{

//Création de la requète insert
$sql = "SELECT heures FROM INSCRIPTIONS WHERE vmfnumero = '".$_SESSION['login']."'";    //requete SQL permettant de recuperer la valeur de l'heure avec un identifiant

$r = mysql_query($sql);     //on effectue la requete
$o = var_dump($r);    //on récupere les infos sous forme d'objet
$heures = $_POST['heures'] + $o->heures;    //on ajoute les heures


$sql = "UPDATE INSCRIPTIONS SET heures = '".$heures."' WHERE vmfnumero = '".$_SESSION['login']."'";    //requete SQL faisant la mise à jour
mysql_query($sql);

?>

Si je retire le var_dump, en effet je n’obtient plus le message Bool(false) mais la valeur dans le tableau ne change pas.

il te faudra déja refermer l’accollade du if, qui est resté ouvert.
Ensuite, on peut regarder pourquoi ta requete d’enregistrement foire. Pour cela, modifie la ligne mysql_query($sql); en

mysql_query($sql) or die(mysql_error());

En faite pour l’accollade c’est que je ne t’avais pas mis tout le code. Le voici en entier :


if (($_POST['heures']))
{

//Création de la requète insert
$sql = "SELECT heures FROM INSCRIPTIONS WHERE vmfnumero = '".$_SESSION['login']."'";    //requete SQL permettant de recuperer la valeur de l'heure avec un identifiant

$r = mysql_query($sql);     //on effectue la requete
//$o = var_dump($r);    //on récupere les infos sous forme d'objet
$heures = $_POST['heures'] + $r->heures;    //on ajoute les heures


$sql = "UPDATE INSCRIPTIONS SET heures = '".$heures."' WHERE vmfnumero = '".$_SESSION['login']."'";    //requete SQL faisant la mise à jour
mysql_query($sql)or die(mysql_error());

?>
<!--Validation de l'inscription. On revient à la page d'accueil-->
<center>
<br><H3>Report good</H3>
</center>
<?php
  }else{
?>
<!--Erreur lancée si les champs ne sont pas renseigné. On revient à la page d'accueil-->
<center>
<br><H3>No good.</H3><br>
<form action="report.php">
<input type="submit" value="Return to the report section ">
</form>
</center>
<?php
      }
?>

Sinon chose vraiment etrange, j’ai modifié la ligne que tu m’a indiqué et j’obtiens le message m’indiquant que l’operation c’est bien déroulé et pourtant toujours aucune modification dans la BDD. La je sèche totalement…
Edité le 05/07/2007 à 15:18

ça te met quoi comme message au juste ?

Sinon avec essayes de définir $heures avec $heures = $_POST[‘heures’]; et regardes si ça enregistre déja ça

Pourquoi ne pas tout simplement faire :


if (isset($_POST['heures']) && !empty($_POST['heures'])) 
{ 
//requete SQL permettant de recuperer la valeur de l'heure avec un identifiant 
$sql = "SELECT heures FROM INSCRIPTIONS WHERE vmfnumero = '".$_SESSION['login']."' LIMIT 1"; 
//on effectue la requete
$r = mysql_query($sql);  
$row = mysql_fetch_assoc($r)

//on ajoute les heures
$heures = $_POST['heures'] + $row['heures']; 

//requete SQL faisant la mise à jour
$sql = "UPDATE INSCRIPTIONS SET heures = '".$heures."' WHERE vmfnumero = '".$_SESSION['login']."'";  
mysql_query($sql)or die(mysql_error()); 
}

Salut,

J’ai effectué ton code et il me met ce message :

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /www/sites/1/ifrance.com/v/m/vmfs/site/insert2.php on line 95
Table ‘i4785162.INSCRIPTIONS’ doesn’t exist

Alors que la table INSCRIPTIONS existe bien dans la base de données. :@
Edité le 06/07/2007 à 11:12

et elle existe bien dans la base de données qui s’appelle i4785162 ?

Essaye avec: “UPDATE “INSCRIPTIONS” SET”
ou “UPDATE INSCRIPTIONS SET”
ou “UPDATE inscriptions SET”

Je sais que sous certains serveurs de BDD (pgSQL en tête), la casse des noms est un gros problème. Là, je le soupçonne de mettre en lowercase le nom, et sous Linux c’est (un peu) fatal.
Edité le 06/07/2007 à 12:57

mais ce ne serait pas la requete de lecture qui m*rde ? Parce que l’erreur parle de fetch_assoc, qui est logiquement utilisé en lecture, dans la requete juste au dessus.

Oui elle existe bien.

J’essaye cette methode avec les ’ et \


[quote="InSiderZ"] mais ce ne serait pas la requete de lecture qui m*rde ? Parce que l'erreur parle de fetch_assoc, qui est logiquement utilisé en lecture, dans la requete juste au dessus. [/quote]

Là je ne sais pas du tout. :frowning: