Tom's Guide > Forum > Programmation > Trier le résultat d'un mysql_query de plusieurs bases

Trier le résultat d'un mysql_query de plusieurs bases

Forum Programmation : Trier le résultat d'un mysql_query de plusieurs bases

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Salut, mon code me renvoi une parse error Parse error: syntax error, unexpected T_STRING in . .. on line 4



<?php
mysql_connect('mysql.free.fr', 'login', 'mdp');
mysql_select_db("teamlfv" );
INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES

('','','$_POST['k1']','$_POST['k2']')
?>


Mais je vois pas ce qui cloche ?????

PS : avec un echo a la place de tout ça, il affiche mes valeurs de formulaire . . .


Message édité par julien41@idn le 27-04-2007 à 10:45:46
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES

('','','$_POST['k1']','$_POST['k2']')

'$_POST['k1']' , tu dois rajouter un caractère d'échappement pour neutraliser le premier ', k1 se retouvre en dehors de la string et le moteur php essaie de convertir k1 en quelque chose .Seulement il n'y a pas de $k1 donc il pense à une erreur.

Répondre à RiiMii

c'est surtout le ; apres )

Répondre à okinou

Juste je n'y avais pas fait attention !

Répondre à RiiMii

:heink: je vois peut etre mal mais jusqu'a preuve du contraire, une requete sql n'est pas une instruction php ;)
il faut mettre le insert bidule machin comme argument pour la fonction mysql_query ()

Répondre à coca25

Décidément , aujourd'hui tout me passe sous le nez !

Répondre à RiiMii

mysql_connect('mysql.free.fr', 'login', 'mdp');
mysql_select_db('teamlfv');
mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES ('','','".$_POST['k1']."','".$_POST['k2']."')" ) or die (mysql_error());

jour de bonté

Répondre à okinou

Waouh merci beaucoup les gars !
ça marche !

Répondre à julien41@idn

remercie surtout okinou, parce que la il a fait un enorme effort :D
et mets un [resolu] dans le titre du topic

Répondre à coca25

Merci okinou !
Mais j'ai encore un soucis avec ce code :
<?php
mysql_connect('mysql.free.fr', 'login', 'mdp');
mysql_select_db('teamlfv');
mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES ('','CURRENT_TIMESTAMP','".$_POST['k1']."','".$_POST['d1']."')" ) or die (mysql_error());
?>

il ne m'enregistre pas la date et heure dans mon champ prévu a ce effet de ma table :/ j'ai essayé de mettre () juste apres mon current_timestamp, et aussi de le remplacer par now, mais ça ne ^marche pas . . .


Message édité par julien41@idn le 29-03-2007 à 19:43:49
Répondre à julien41@idn

PS : ça non plus ça marche pas . . .
<?php
$datetime=current_timestamp
mysql_connect('mysql.free.fr', 'teamlfv', '');
mysql_select_db('teamlfv');
mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES

('','$datetime','".$_POST['k1']."','".$_POST['d1']."')" ) or die (mysql_error());
?>

EDIT : je viens d'essayer de mettre un champ timestamp plutot dans ma bdd, avec un current_timestamp par defaut, pas d'erreurs, mais il me laisse tout a 0 . ..

Message cité 1 fois
Message édité par julien41@idn le 10-04-2007 à 15:30:33
Répondre à julien41@idn

quand une instruction ne marche pas, faut pas essayer n'importe quoi non plus...
$datetime=current_timestamp c'est quoi ca, une fonction/variable...
bref enleve les ' autour de CURRENT_TIMESTAMP dans ta requete

Répondre à coca25

Ok merci ! ( et je note : " chercher l'erreur de syntaxe avant autre chose" lol)

Répondre à julien41@idn

coca25 a écrit :

remercie surtout okinou, parce que la il a fait un enorme effort :D
et mets un [resolu] dans le titre du topic


tu m'étonnes :D

julien41@idn a écrit :

PS : ça non plus ça marche pas . . .
<?php
$datetime=current_timestamp
mysql_connect('mysql.free.fr', 'teamlfv', '******');
mysql_select_db('teamlfv');
mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES

('','$datetime','".$_POST['k1']."','".$_POST['d1']."')" ) or die (mysql_error());
?>

EDIT : je viens d'essayer de mettre un champ timestamp plutot dans ma bdd, avec un current_timestamp par defaut, pas d'erreurs, mais il me laisse tout a 0 . ..



As tu aumoins vu ma modification sur $_POST['k1'] par rapport a l'original, entre :

'".$_POST['k1']."'
et
'$datetime'
ne vois tu pas une différence ? (je parle de la concaténation, soit les ".$datetime." et non plus $datetime.

phpdebutant.org > a droite fait les bases.

$datetime=current_timestamp
ou tu as chopé "current_timestamp" ? Ca n'existe pas, de plus, si c'est une fonction php ca sera écris toujours comme ceci :
$datetime=current_timestamp();

dans l'état actuel essai :
$datetime=time();

et corrige l'erreur $datetime ca devrait allez mieux.
sinon change ton type de table timestamp en date 0000-00-00 et : $datetime= date("Y-m-d" );

je vais resté dans le simple ... :)
C'est rare que je fasse un tel roman alors estime toi heureux :D :D :whistle: :hello:


Message édité par Yama310 le 10-04-2007 à 21:40:46
------------------------------ La boutique Sexy : http://www.dream-shop.fr pour toutes vos envies à petits prix !
Webmaster, rentabilisez votre trafic : http://www.dream-shop.fr/affiliation 28% de commission !
Répondre à okinou

Pour la date , juste 'NOW()' devrait passer.

Répondre à RiiMii

exacte! en plus je le fait tout le temps, je sais pas pourquoi la j'ai ecris autrement ...

Répondre à okinou

Ah oui, la concaténation . . . (je l'ai vu, mais j'essaye peu etre d'aller un peu trop vite dans mon apprentissage ^^ ).
Merci !
( et le current_timestamp, c'est une valeur mysql en fait :/ )

Répondre à julien41@idn

Erf, encore un p'tit probleme



$dateperso = $_post['dateperso'];

echo "$dateperso";

normalement, tout est correct, mais si je rentres une date dans mon formulaire, il ne m'affiche rien avec ce script.
Pouvez vous m'aider encore une fois :/ ?


Message édité par julien41@idn le 01-04-2007 à 23:40:33
Répondre à julien41@idn

Citation :


En PHP, les variables sont représentées par un signe dollar "$" suivi du nom de la variable. Le nom est sensible à la casse (i.e. $x != $X).

Répondre à coca25

echo $dateperso;
echo ' '.$dateperso;
echo "".$dateperso;
echo ' '.$dateperso." ";

Voila quelques possibilités fonctionnelles .

Répondre à RiiMii

son echo est aussi fonctionel ;)
entre ", la variable est interprétée, par contre un post en minuscule...

Répondre à coca25

ah vi juste ! J'avais pas grillé que c'était des " " , j'avais pensé à des ' ' . Sans concaténation ca n'aurait pas passé .

Répondre à RiiMii

Ok merci tout marche !
Bon maintenant je vais essayer de protéger ça avec .htaccess, on peut quand on est chez free 10Go gratuit ?

Répondre à julien41@idn

Ah j'suis bete, tant qu'on se connecte pas en admin sur le ftp sur le serveur, y'a pas moyen d'ouvrir les scripts en .php , n'est ce pas ?

Répondre à julien41@idn

En fait je fais un site pour ma team et j'ai fait une table pour chaque joueur, contenant : id, datetime, kills, deaths.
Chaque partie est dans une entrée de chaque table.
J'aimerais pouvoir faire des statistiques sur une semaine, sur un mois,et totales, du ratio kills/deaths. Comment dois-je m'y prendre ?
Mettre a jour les stats a chaque actualisation de la page en extrayant de ma bdd les infos dans des variables, et en travaillant dessus ?
Comment travailler avec des dates ?
Utiliser le id ?
Merci d'avance.


Message édité par julien41@idn le 02-04-2007 à 22:05:08
Répondre à julien41@idn

tu peux faire ca avec plusieurs requete sql,
une par type de stats:
exemple pour la semaine

Code :
  1. select idgame, sum(kills) as nb_kills, sum(deaths) as nb_deaths
  2.   from abdel_bachir
  3. where datetime > now() - interval 1 week
  4. group by idgame
  5. ;



remarque: je pense pas que le nom de ta table soit approprié ;)


Message édité par coca25 le 02-04-2007 à 22:15:40
Répondre à coca25

Coca25 juste pour ma culture personnelle la synthaxe "- interval x y" dans une requete SQL est vraiment reconnu par MySQL ? Rassure moi c'est juste un exemple, ne me dis pas que je me fais ch*er depuis des années a calculer la date en PHP (bon enfin y'a pire dans la vie)...

------------------------------ A vita a morte scegli la to sorte
Campà Francese o more Corsu...
Répondre à Studientinu

Citation :


Depuis MySQL 3.23, INTERVAL expr type est autorisé des deux cotés de l'opérateur + si l'expression de l'autre coté est de type DATE ou DATETIME. Pour l'opérateur -, INTERVAL expr type est autorisé uniquement du coté droit, car on ne peut pas soustraire une date d'un intervalle (voir les exemples ci-dessous).


http://dev.mysql.com/doc/refman/5. [...] tions.html

Studientinu a écrit :

je me fais ch*er depuis des années a calculer la date en PHP (bon enfin y'a pire dans la vie)...



rassure moi, ca fait pas des années que tu fais du php :p

Répondre à coca25

Ok merci j'vais chercher avec ça !

Répondre à julien41@idn

j'avais pas capté que c'était pas le même qui demandait pour la syntaxe interval...
je retire la derniere phrase alors ;) (meme si c'etait pas méchant de toute facon)

Répondre à coca25

Encore une question : pourquoi il me renvoi 'Array' dans $avgratios ?

$requete=mysql_query("SELECT AVG(ratio) FROM abdel_bachir WHERE datetime > now() - interval 1 week GROUP BY idgame" );


$nb_games=mysql_num_rows($requete);
$avgratios=mysql_fetch_array(mysql_query("SELECT AVG(ratio) FROM abdel_bachir WHERE datetime > now() - interval 1 week " ));
echo "$nb_games";
echo "$avgratios";

Répondre à julien41@idn

1. ratio fait partie des colonnes de ta base?
2. avg => fonction d'aggrégat: average: moyenne. ca te renverra dans tous les cas 1 seule ligne.

julien41@idn a écrit :

Encore une question : pourquoi il me renvoi 'Array' dans $avgratios ?

$avgratios=mysql_fetch_array(mysql_query("SELECT AVG(ratio) FROM



RTFM
http://php.benscom.com/manual/fr/index.php

Répondre à coca25

ça fait 1 heure que je cherche ^^

EDIT: erf 1.oui ratio est dans ma base
2. si je echo directement $requete, il me mets : Resource id #2
:s


Message édité par julien41@idn le 03-04-2007 à 23:30:47
Répondre à julien41@idn

Et j'ai essayé de faire :
$requete=mysql_query("SELECT ratio FROM abdel_bachir WHERE datetime > now() - interval 1 week GROUP BY idgame" );

$nb_games=mysql_num_rows($requete);
echo"$nb_games";

while($row=mysql_fetch_row($requete))
{
echo"<BR>$row";

Mais pareil . . .

EDIT : et je ne comprends pas la fonction de group by , pouvez vous m'expliquer ?


Message édité par julien41@idn le 03-04-2007 à 23:49:16
Répondre à julien41@idn

ce que tu comprends pas aussi, c'est le fonctionnement de mysql_fetch_xxx et c'est pour ca que je t'ai indiqué un site de manuel php
tu tapes la fonction dans la zone recherche, tu arrives sur l'explication qui est agrémentée par plusieurs exemples

EDIT: pour le group by, c'est simple:
ex:
sortir la moyenne d'une classe

Code :
  1. select avg(note) from notes;


sortir la moyenne de chaque eleve d'une classe

Code :
  1. select eleve_id, avg(note) from notes group by elve_id;


Message édité par coca25 le 03-04-2007 à 23:57:07
Répondre à coca25

ah ok, pour le group by, j'essayait de l'appliquer a mon cas, mais dans chaque table, aucun enregistrement n'a un champ qui peut des fois etre le meme, donc je comprenais pas.
et pour le mysql_fetch_array, je rajoute le MYSQL_ASSOC; et mon echo je le fais sur ce modele : echo $row['id'] . ': ' . $row['name'] . "\n";
C'est juse ça ?

Répondre à julien41@idn

ah, je viens de comprendre ta base ;)
en fait la table, c'est le joueur (d'ou le ne nom de la table), et dedans chaque enregistrement, c'est une partie.
pas bon comme schéma de base.
si tu veux ajouter un joueur, tu vas te faire chier...

Répondre à coca25

Voilà!
C'est vrai que c'est vraiment pas pratique si on veux pouvoir rajouter facilement des joueurs, mais c'est faisable.
Et tu aurais d'autres idées de schéma ?

Répondre à julien41@idn

rapidement:
joueur (joueur_id, nom, prenom...)
jeux (jeux_id, joueur_id, ladate, kills, deaths)

Répondre à coca25

Ok merci mais je ne vais pas compliquer parce que j'veux juste arriver a un truc potable pour mon site, et les joueurs j'pourrai les rajouter facilement dans mon code et ma base.
En tout cas, merci pour ton aide !

Répondre à julien41@idn

encore une question : pour mes ratios de performance, je fais le nb kills sur le nb deaths, il me faut donc au moins 3 chiffres apres la virgule.
Quelle type de variable me conseilles tu dans ma bdd ?
Double,float ?

EDIT : j'ai essayé double, mais quand je fais ma requete , il ne me renvoi que des entiers arondis dans mon tableau.
Et les valeurs sont des entiers dans ma bdd :/
INSERT INTO ne travaille peut etre qu'avec des entiers ? :/


Message édité par julien41@idn le 04-04-2007 à 18:23:52
Répondre à julien41@idn

julien41@idn a écrit :

Ok merci mais je ne vais pas compliquer parce que j'veux juste arriver a un truc potable pour mon site, et les joueurs j'pourrai les rajouter facilement dans mon code et ma base.
En tout cas, merci pour ton aide !


plus facilement qu'avec mon schéma, je ne pense pas...

pour les entiers
donnes le code, parce que la j'ai du mal...
si tu n'as que des entiers dans la base, c'est normal qu'il ne te retournent que des entiers

Répondre à coca25

$ratio1 = $_POST['k1'] / $_POST['d1'];

mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths,ratio) VALUES ('','".$dateperso."','".$_POST['k1']."','".$_POST['d1']."','".$ratio1."')" ) or die (mysql_error());

=> là je fais echo ratio1 et il me renvoi un bon decimal
mais je regarde dans ma bdd et je ne vois que des entiers, et quand je fais ma requete, il me renvoi des entiers.
A priori, c'est qu'il arrondi pour le passer dans la bdd mon ratio, non ?

Répondre à julien41@idn

ca c'est comme le array...
tu dis que t'as que des entiers dans ta base, et tu te plains que ca ne t'enregistre que des entiers...
http://www.google.fr/search?hl=fr& [...] er&defl=fr

Répondre à coca25

O_o, je dis que je ne vois que des entiers dans ma base : c'est a dire que je peux voir que dans chaque enregistrement, le champ ratio est un entier, alors que je l'ai défini comme decimal ( j'ai essayé aussi float, et double)
Alors faut-il utiliser une autre requete mysql que INSERT INTO pour pouvoir enregistrer un réel ? Ou le probleme vient d'ailleurs ?

EDIT : Quand je fais echo ratio1, j'ai bien un décimal, donc le probleme viens forcement de l'enregistrement dans la base. Soit ça vient de la requete INSERT INTO, soit ça vient de la configuration ( type de variable ) du champ de ma base .
Je me trompes ?


Message édité par julien41@idn le 04-04-2007 à 21:17:50
Répondre à julien41@idn

au temps pour moi
par contre je vois pas, pour moi, la requete est bonne et decimal est bon
par contre ca depend comment tu déclares ton champs
ratio decimal (precision, echelle)
precision: le nombre de chiffre (ceux après la virgule sont compris dedans)
echelle: chiffres après la virgule

si tu l'as déclarée decimal(x), ca sera un entier avec x chiffres


Message édité par coca25 le 04-04-2007 à 21:33:36
Répondre à coca25

J'ai un souci avec la moyenne AVG : $requete=mysql_query("SELECT AVG(ratio) FROM abdel_bachir WHERE datetime > now() - interval 1 week GROUP BY idgame" );

$nb_games=mysql_num_rows($requete);
while($resultat=mysql_fetch_row($requete))
{
$moyenne=$resultat[0];
}
echo"$nb_games<BR>$moyenne";


Avec ça , je n'arrive pas a afficher la moyenne des ratios.
J'ai cherché mais je n'arrives pas a comprendre ce que me renvoie AVG, et donc comment le faire afficher.
Peux tu m'eclairer ?

EDIT : le code ci dessus affiche bien le bon nombre. Mais $moyenne me renvoi seulement le dernier ratio ...


Message édité par julien41@idn le 05-04-2007 à 07:34:59
Répondre à julien41@idn

qu'est ce que tu veux faire?
afficher la moyenne sur une semaine... alors pourquoi le GROUP BY

Répondre à coca25
Page Précédente
1 2
Tom's Guide > Forum > Programmation > Trier le résultat d'un mysql_query de plusieurs bases
Aller à :

Il y a 753 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens