Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2012 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] j'arrive pas a faire une simple requette mysql ??

 



 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[PHP] j'arrive pas a faire une simple requette mysql ??

n°347016
Big-Foot
Posté le 28-03-2003 à 23:10:09  profilanswer
 

j'ai fait un ptit compteur, mais il marche pas et il m'affiche pas de message d'erreur...
alors je test avec une requette simple :
 

Code :
  1. <?php
  2. mysql_connect("localhost", "root", "" );
  3. mysql_select_db("bdd" );
  4. $current_ip =  $_SERVER['HTTP_X_FORWARDED_FOR']  ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
  5. mysql_query("INSERT INTO counter-ip (ip, date) VALUES ($current_ip, NOW())" );
  6. mysql_close();
  7. ?>


 
mais ca marche pas non+ ! il ne met rien  dans ma table ! (j'ai aussi testé avec encore +simple mais rien non+)
je comprend pas... je fait une erreur kek part ? j'ai mal configuré easyPHP ??
merci

mood
Publicité
Posté le 28-03-2003 à 23:10:09  profilanswer
 

n°347036
MagicBuzz
Posté le 28-03-2003 à 23:32:10  profilanswer
 

le nom de ta table n'est pas standard.
 
cherche le caractère d'échappement de MySQL.
 
Sous Oracle, c'est le guillement "..." et sous MSSQL Server c'est les crochets [...]
 
Ca doit venir de là.

n°347038
Big-Foot
Posté le 28-03-2003 à 23:35:53  profilanswer
 

tu parle du - dans counter-ip ?


Message édité par Big-Foot le 28-03-2003 à 23:48:25
n°347041
mrbebert
Posté le 28-03-2003 à 23:50:15  profilanswer
 

Déja, il serait judicieux de tester le résultat de mysql_query :
 
$res = mysql_query("INSERT INTO counter-ip (ip, date) VALUES ($current_ip, NOW())" );
if (! $res) {echo "Erreur durant l'execution de la requete";}
 
Ca permettrait de vérifier si la requête s'exécute correctement ou pas [:proy]

n°347043
Big-Foot
Posté le 28-03-2003 à 23:57:14  profilanswer
 

ben... il me fait une erreur
bon je vais verifier tout ca et je reposte demain, pask la je suis un peu fatigué....


Message édité par Big-Foot le 28-03-2003 à 23:59:56
n°347125
MagicBuzz
Posté le 29-03-2003 à 12:13:52  profilanswer
 

Big-Foot a écrit :

tu parle du - dans counter-ip ?


Oui, le "-" c'est l'opérateur "moins", et à partir de là, MySQL doit pas aimer des masses.
 
Donc il faut mettre le nom de la table dans entre caractères d'échappement pour lui indiquer qu'il s'agit d'un nom et non pas d'une expression.

n°347167
Big-Foot
Posté le 29-03-2003 à 13:55:30  profilanswer
 

j'ai essayé avec un truc tout simple dans une table avec un nom sans "-" et ca marche. (donc tout ce ki est connnection a la bdd c'est bon)
 
Pour les caracteres d'echapement mysql, c'est le "\".
http://dev.nexen.net/docs/mysql/an [...] syntax.php
 
mais si je met "counter\-ip" ca marche toujour pas...
 
voila ce que j'ai essayé :
 

Code :
  1. <?php
  2. mysql_connect("localhost", "root", "" );
  3. mysql_select_db("bdd" );
  4. $res = mysql_query("INSERT INTO counter\-ip (ip, date) VALUES ('168.00.21.30', '2002-01-01 00:00:01')" );
  5. if (! $res) {echo "Erreur durant l'execution de la requete";}
  6. mysql_close();
  7. ?>

n°347173
beleg
黑社會
Posté le 29-03-2003 à 14:03:02  profilanswer
 

'counter-ip' sous reserve ...
essaie dinserer ds phpmyadmin en utlisant longlet inserer, et utilise leur requete.

n°347182
Big-Foot
Posté le 29-03-2003 à 14:27:31  profilanswer
 

j'avais deja essayer le 'counter-ip' sous reserve
mais merci je savais pas que phpmyadmin ecrivait les requettes aussi...
ben maintenent ca marche merci ! le probleme venait des ' ' je crois
 
ca donne ca :
 

Code :
  1. mysql_query("INSERT INTO `counter-ip` (`ip`, `date`) VALUES ('125.16.32.312', '2003-03-30 15:18:35')" );


 
mais je me pose quelques questions :
 
y a t'il une difference entre les ' '  et le ´ ´ ?
 
est ce que quand je met une variable dans les VALUES je doit toujour mettre les ' ' ?
 
merci


Message édité par Big-Foot le 29-03-2003 à 14:28:09
n°347185
mrbebert
Posté le 29-03-2003 à 14:36:01  profilanswer
 

Il faut encadrer avec ' ' les chaines de caractères et les dates, mais pas les entiers.
 
SELECT * FROM table WHERE txt = 'coucou' AND entier = 2
 
Dans les chaines de caractères, il faut protéger les ' par un \ ('aujourd\'hui';). Mais le plus simple est de systématiquement utiliser la fonction php addslashes quand tu gères des chaines de caractères :
$requete = "SELECT * FROM table WHERE txt = '" . addslashes($param_txt) . "' AND entier = " . $param_txt;

mood
Publicité
Posté le 29-03-2003 à 14:36:01  profilanswer
 

n°347201
beleg
黑社會
Posté le 29-03-2003 à 15:08:25  profilanswer
 

mrBebert a écrit :

Il faut encadrer avec ' ' les chaines de caractères et les dates, mais pas les entiers.
 
SELECT * FROM table WHERE txt = 'coucou' AND entier = 2
 
Dans les chaines de caractères, il faut protéger les ' par un \ ('aujourd\'hui';). Mais le plus simple est de systématiquement utiliser la fonction php addslashes quand tu gères des chaines de caractères :
$requete = "SELECT * FROM table WHERE txt = '" . addslashes($param_txt) . "' AND entier = " . $param_txt;
 


 
 
bigfoot > a oui ct ` et non pas '
 
tu peux entourer les entier par des '', ca evite les  id = $id or 1 meme si je le fais jamais  
sytematiquement addslashes, ok mais si magical_quotes est pas activé sinon ya redondance

n°347304
Big-Foot
Posté le 29-03-2003 à 18:08:04  profilanswer
 

ok merci beaucoup
 
j'ai aussi remarqué que quand j'insere NOW() dans la table ca marche que si NOW() n'est pas entouré de '', c'est comme ca avec toute les fonction mysql j'imagine ? mais pour les fontion php ?

n°347306
mrbebert
Posté le 29-03-2003 à 18:12:29  profilanswer
 

Big-Foot a écrit :

ok merci beaucoupj'ai aussi remarqué que quand j'insere NOW() dans la table ca marche que si NOW() n'est pas entouré de '', c'est comme ca avec toute les fonction mysql j'imagine ? mais pour les fontion php ?

Effectivement, il faut mettre une date entre '' quand tu la précise explicitement. Pour NOW(), il faut pas.
Mais Ca n'a rien à voir avec les fonction PHP. Ta requête, c'est toujours une chaîne de caractères.
 
beleg > Ca marche comment magic_quotes :??:

n°347342
beleg
黑社會
Posté le 29-03-2003 à 20:15:05  profilanswer
 

Active l'option "magic_quotes" pour les méthodes GPC (GET/POST/COOKIE) Lorsque les magic_quotes sont activées, les caractères ' (simple quote), " (double quote), \ (backslash) et NUL sont précédés automatiquement d'un backslash
 
donc si get_magic_quotes_gpc() pas besoin de addslashes avant insertion dans la base, c deja fait.
 
mais si tu veux afficher les données du formulaire, pour verification par exemple, si get_magic_quotes_gpc(), alors il faut faire un stripslahes avant laffichage sinon tu te retrouves avec des \ et plus tu valides plus ten as, jai decouvert ce probleme ds mes formulaires hier  :lol: ...  
 
donc demain verification de \ ' "  

n°347348
Big-Foot
Posté le 29-03-2003 à 20:46:22  profilanswer
 

dans ce cas :  
 

Code :
  1. UPDATE table SET visits_cookies = visits_cookies+1, last_update = NOW(), name = test


 
qu'est ce que je doit mettree entre '' ou entre `` ?


Message édité par Big-Foot le 29-03-2003 à 20:46:41
n°347351
mrbebert
Posté le 29-03-2003 à 20:55:15  profilanswer
 

name, c'est du texte (char, varchar, text) ?
Si oui, faut mettre test entre ''


Message édité par mrbebert le 29-03-2003 à 20:56:02
n°347353
Big-Foot
Posté le 29-03-2003 à 20:58:48  profilanswer
 

name j'ai inventé c'est juste pour savoir ce que je devrait faire quand ce n'est rien d'aurtre que du texte disons varchar...
mais pour le reste je laisse comme ca sans rien ?

n°347354
mrbebert
Posté le 29-03-2003 à 21:01:39  profilanswer
 

oui, y a besoin de rien d'autre :)

n°347359
Big-Foot
Posté le 29-03-2003 à 21:12:28  profilanswer
 

oki  
mais regardez ici :

Code :
  1. mysql_query("UPDATE `counter-total` SET visits_ips = visits_ips+1, last_update = NOW() WHERE 'id = max(id)'" );


c'est juste ce que j'ai ecrit nan ?
pourtant il ne fait rien... ca devrait ajouter +1, mais ca fait rien meme pas une petit erreur et ma table reste comme avant

n°347361
mrbebert
Posté le 29-03-2003 à 21:26:55  profilanswer
 

Pourquoi le WHERE est entre '' :??:

n°347363
Big-Foot
Posté le 29-03-2003 à 21:29:15  profilanswer
 

le id = max(id) ?

n°347364
mrbebert
Posté le 29-03-2003 à 21:33:25  profilanswer
 

oui :??:  
 
D'ailleurs, je crois pas que cette condition soit accepté par mysql :/

n°347365
Big-Foot
Posté le 29-03-2003 à 21:36:30  profilanswer
 

je croi que j'ai vu kek part qu'elle est accepté...  
mais si je met pas les ' ' il me fait une erreur

n°347366
Big-Foot
Posté le 29-03-2003 à 21:40:31  profilanswer
 

la par exemple (en bas)  
http://www.php.net/manual/fr/function.max.php
il y a kek'un qui utilise max()avec mysql


Message édité par Big-Foot le 29-03-2003 à 21:40:41
n°347368
mrbebert
Posté le 29-03-2003 à 21:56:31  profilanswer
 

Pourquoi tu mets une fonction PHP dans une requête :??:  
mysql fait du SQL, pas du PHP :non:  
 
Et la fonction max() de SQL, elle s'utilise pas de cette manière. Tu veux faire quoi comme requête ?

n°347371
Big-Foot
Posté le 29-03-2003 à 21:59:40  profilanswer
 

ben moi je voulai selectionner la derniere ligne de la table... autrement dit le dernier id

n°347378
mrbebert
Posté le 29-03-2003 à 22:06:05  profilanswer
 

T'es obligé de faire 2 requêtes :
- 1 qui récupère le dernier id (SELECT max(id) FROM `counter-total`)
- 1 autre qui fait le update (UPDATE ... SET ... WHERE id = la_valeur_recupere_par_mla_requete_precedente)
 
A moins que tu n'ais une version suffisamment récente de mysql pour faire ca :
UPDATE ...
SET ...
ORDER BY id DESC
LIMIT 0, 1

n°347380
Big-Foot
Posté le 29-03-2003 à 22:10:03  profilanswer
 

alors le max(id) je peu l'utliser dans un SELECT mais pas dans un WHERE ??
 
et pour la 2eme methode tu peu preciser un peu stp (ou une url) merci

n°347384
mrbebert
Posté le 29-03-2003 à 22:15:08  profilanswer
 

Oui, le max() fait partie des fonctions d'aggrégation. C'est à dire des fonction qui portent sur plusieurs lignes, en les regroupant.
Par exemple, en écrivant "SELECT max(id) from table", ca te renvoie une seule ligne, contenant la valeur maximale de id.
Toutes les lignes du résultat sont regroupées en une seule.
 
Parmi ces fonctions, tu as aussi :
- count(*) qui renvoie le nombre de lignes
- sum(champ) qui additionne les champs
- avg (la moyenne) ....  
 
Elles sont souvent utilisées avec le GROUP BY, qui permet d'avoir plusieurs groupes de lignes.
 
 
Pour la 2ème méthode, au lieu de modifier la ligne ayant le plus grand id, je demande à modifier les lignes dans l'ordre décroissant de l'id, et en s'arrêtant dès qu'une a été modifiée :)  
Pour faire du SQL, souvent, faut être bon en français et savoir reformuler différemment ce que tu veux faire :D


Message édité par mrbebert le 29-03-2003 à 22:19:06
n°347385
Big-Foot
Posté le 29-03-2003 à 22:19:10  profilanswer
 

:D  
mais pour le max(id) il n'y aura qu'un seul resultat alors ou est le probleme ?


Message édité par Big-Foot le 29-03-2003 à 22:20:22
n°347387
mrbebert
Posté le 29-03-2003 à 22:23:30  profilanswer
 

oui, mais le max se fait dans le select, pas dans le WHERE.
 
Le serveur SQL détermine d'abord quelles lignes respectent le WHERE, puis ensuite calcule le max() (ou le count(), sum() ...) sur ces lignes.
Mais il peut pas calculer le max() tant qu'il a pas fini avec les WHERE.
 
Si tu avais les requêtes imbriquées, ca pourrait s'écrire sous la forme :
SELECT ... FROM ... WHERE id = (SELECT max(id) FROM table)


Message édité par mrbebert le 29-03-2003 à 22:24:34
n°347389
Big-Foot
Posté le 29-03-2003 à 22:27:02  profilanswer
 

ah... ok  
alors je vais utiliser ton autre truc :  
UPDATE ...  
SET ...  
ORDER BY id DESC  
LIMIT 0, 1

n°347390
Big-Foot
Posté le 29-03-2003 à 22:36:59  profilanswer
 

c'est juste comme ca ?

Code :
  1. mysql_query("UPDATE `counter-total` SET visits_ips = visits_ips+1, last_update = NOW() ORDER BY `id` DESC LIMIT 0, 1" );


pask ca marche pas... il y a un probleme avec la fin, a partir de ORDER BY...
 
et puis j'ai pas tres bien compris le LIMIT 0, 1


Message édité par Big-Foot le 29-03-2003 à 23:34:49
n°347418
mrbebert
Posté le 30-03-2003 à 00:25:28  profilanswer
 

Ca doit dépendre de ta version de mysql, c'est une syntaxe assez "récente" [:proy]  
 
Le LIMIT permet de se limiter à certaines lignes du résultat. C'est très pratique pour certaines requête où tu n'as besoin que de certaines lignes du résultat, et pas toutes. Par exemple, si tu as beaucoup de données et que tu veux une consultation page par page.
Le premier paramètre du LIMIT est la ligne de départ, le deuxième le nombre de lignes à prendre.
 
Par exemple, sur ce forum, tu n'as pas la liste de tous les topics d'une catégorie, mais seulement, disons, 20 par page. avec un paramètre dans l'URL pour le numéro de page.
On pourrait imaginer que dans la requête, il y ait
"... LIMIT 0, 20" pour la première page, "... LIMIT 20, 20" pour la deuxième, "... LIMIT 40, 20" pour la troisième

n°347424
Big-Foot
Posté le 30-03-2003 à 01:07:30  profilanswer
 

ok, mais pour definir la limite "fin", si on veut afficher tout le tableau, on peut seulement mettre un grand chiffre ou bien auparavant faire une requette SELECT max(id) ce qui sera identique a la premiere technique nan (celle ou on selectione le max dans 1 requette puis dans 1 autre on le modifie) ?

n°347425
mrbebert
Posté le 30-03-2003 à 01:22:42  profilanswer
 

Effectivement, il y a un problème si on ne sait pas à l'avance combien il y a d'éléments en tout [:proy]  
Le plus simple est de passer une fois la requête en faisant un count(*) pour savoir combien d'éléments sont concernés, puis la requête elle même avec les limites que l'on veut. Mais ca oblige à exécuter 2 fois la requête :/

n°347428
Big-Foot
Posté le 30-03-2003 à 01:28:34  profilanswer
 

arf ben faudra s'en contenter jusqu'a la prochaine version  :)  
a par ca, moi j'utilise easyPHP, mais la derniere version (1.6) n'a pas la derniere vesion de mysql... j'ai downloader mysql, mais est ce que je peu le mettre dans et surtout dans quel dossiers est ce que je peu le mettre pour que ca fonctionne ?

n°347430
Big-Foot
Posté le 30-03-2003 à 01:36:58  profilanswer
 

euh.... non en fait j'ai telechargé phpmyadmin new version...  :D  
mais est ce que je peu updater la version mysql de easaPHP ?

n°347515
Big-Foot
Posté le 30-03-2003 à 15:24:59  profilanswer
 

je crois que j'ai reussi  :bounce:  
 
j'ai copier les dossiers de mysql (new version) et phpmyadmin (new version) dans EasyPHP, et ca marche je crois


Message édité par Big-Foot le 30-03-2003 à 15:38:55
n°347536
Big-Foot
Posté le 30-03-2003 à 15:58:07  profilanswer
 

ben ca marche toujours pas :

Code :
  1. mysql_query("UPDATE `counter-total` SET visits_ips = visits_ips+1, last_update = NOW() ORDER BY `id` DESC LIMIT 0, 1" );


 
je sais pas pourquoi, pourtant j'ai la derniere version mysql...
 :cry:

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] j'arrive pas a faire une simple requette mysql ??

 

Sujets relatifs
[PHP] afficher le contenu d'un menu déroulant[PHP] Dernière case occupée d'un tableau
[PHP] je voi pas mon erreur ![PHP & HTML] TextArea : où sont les sauts de ligne ?
[HTML/JS/PHP] Afficher un calque quand on clique sur un boutonproblème bizarre: connexion base mysql
Se connecter a une bdd MySQL a partir d'un applet JAVA...Un "simple" utilisateur ne peut ouvrir /dev/port
[HTML,PHP] Les balises select peuvent elle etre remplies dynamiquement[HTML/PHP] Lecture des vars passées dans une URL: cas particulier
Plus de sujets relatifs à : [PHP] j'arrive pas a faire une simple requette mysql ??


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR