Gamoover

Besoin de contacter un admin pour une proposition, une suggestion ou discuter d'un probleme ?
C'est ici : High_Cobra, AsPiC ou Pich

[Résolu] [Recherche coup de main] PHP + BDD

Démarré par _n3o_, Vendredi 06 Juillet 2018, 10:28:30 AM

_n3o_

Salut les copains,

si les modos pensent que c'est pas au bon endroit ou que c'est pas le site pour n'hesitez pas a supprimer ;)

Je cherche une personne qui s'y connait assez pour me filer un coup de main en PHP.

-----------------------
J'ai besoin de creer une bdd pour y stocker un nom et un score par joueur (entré manuellement via un backoffice (une simple page PHP avec formulaire))
Cette bdd creera donc pour chaque ajout 2 entrées : "le nom" et "le score"
Il faudra ensuite que je puisse recuperer ces entrées et les traiter automatiquement par rank pour les afficher sur une page PHP du meilleur au moins bon avec le classement




1Pierre5678 Points
2Paul4567 Points
3Leon3456 Points

etc

Il faudra aussi que je puisse recuperer les scores juste des 3 premiers.

Alors pour moi c'est compliqué, mais je pense que pour quelqu'un qui a l'habitude ca doit etre d'une facilité déconcertante ;)

Comme on dit : Mieux vaut un qui sait, que deux qui cherchent :D

Merci d'avance les loulous  :-*



Solkan

Je peux te le faire facilement mais pas avant le mois d'août. Contacte-moi en PV si tu n'as pas trouvé une solution d'ici là.
Solkan
"There is too much blood in my Coca-Cola System"

Mes Recherches : Marquee et PCB MK2, Konami Gyruss/Pooyan/Time Pilot/Yie Ar Kung Fu/Commando/Track & Field

_n3o_

Merci Solkan je garde ta proposition sous le coude si jamais je trouve pas d'ici là ;)



Arvester

C'est pas pour balancer mais les scores de tes potes sont chelou, à mon avis ils ont triché.

tilowil

#4
Salut,
Je suppose que ton système est PHP + MySQL ?
Si c'est le cas je vais me pencher sur ta problématique.
Pour la création du schéma de la base et de la table (a n'executer qu'une seule fois, je n'ai pas mis les if exists)

-- Creation de la base et de la table
CREATE SCHEMA Test;

CREATE TABLE `Test`.`JoueurScore` (
  `Joueur` VARCHAR(20) NULL COMMENT 'Enregistrement du joueur',
  `Score` INT NULL COMMENT 'Enregistrement du score du joueur')
COMMENT = 'Table pour enregistrer les scores des joureurs ';

La base se nommera Test et ta table JoueurScore (c'est un exemple a toi d'adapter).

Pour insérer des joueurs et leurs scores Il faut utiliser l'instruction INSERT :

insert into JoueurScore(Joueur, Score) Values ('Leon',3456);
insert into JoueurScore(Joueur, Score) Values ('Pierre',5678);
insert into JoueurScore(Joueur, Score) Values ('Jean',1456);
insert into JoueurScore(Joueur, Score) Values ('Antoine',1593);
insert into JoueurScore(Joueur, Score) Values ('Georges',1478);
insert into JoueurScore(Joueur, Score) Values ('Berthe',1234);
insert into JoueurScore(Joueur, Score) Values ('Paul',4567);


Dans le code PHP seulement 1 ligne à la validation de ton formulaire de saisie.

Pour avoir un classement general avec le rang :

select @rang := @rang + 1 as rang, Joueur,Score from JoueurScore a cross join (select @rang:=0) b ORDER BY Score DESC;


Et enfin pour avoir les 3 premiers

select @rang := @rang + 1 as rang, Joueur,Score from JoueurScore a cross join (select @rang:=0) b ORDER BY Score DESC Limit 3;


Ces 2 requêtes sont a insérer dans le code PHP pour pouvoir afficher les résultats.

Le plus compliqué est fait, le PHP ne servant qu'a faire IHM (interface Homme Machine).
Je te fait l'IHM (simple) ce Dimanche.

Au niveau SQL il y a peut être plus simple, mais elles fonctionnent bien.
Si quelqu'un veut reprendre ou poursuivre avant Dimanche , pas de soucis, sinon je te mettrais le code PHP Dimanche soir.

A+

[Edit] J'avais fait un soft en PHP + MySql pour une gestion complète de compétition de jeux de Laser.

_n3o_

Salut Tilowil et merci pour ton aide.

Je suis en train d'essayer d'ingurgiter tout ca (sans vomir)
Depuis ce matin je me retourne le cerveau :p

Je t'envois en MP une petit descriptif du toutim que ce soit plus clair en te montrant ce que j'ai deja et ce que je cherche plus clairement.



tilowil

#6
Bonsoir,
Je ne fais pas rentrer dans tous les détails :
Pour faire ton formulaire de saisie (HTML Basique, a toi de le prendre plus sexy) - saisie.php:

<?php
  
// Zone PHP créée en cas de besoin
?>


<HTML>
<BODY>
   <form method="post" action="insert.php">
      Joueur&nbsp;:&nbsp;
      <input type="text" name="joueur" id="joueur" required /><br>
      Score&nbsp;:&nbsp;
      <input type="number" name="score" id="score" required /><br>
      <input type="submit" value="Envoyer" />
   </form
</BODY>
</HTML>


pour l'enregistrement dans la base test (idem) - insert.php :

<?php
  
// Récupération des valeurs du formulaire
  
$joueur $_POST['joueur'];
  
$score  $_POST['score'];
  
  
// zone PHP
  // Connexion à la base de données MySQL
  
$liendb mysql_connect('localhost''mysql_user''mysql_password') or die('Impossible de se connecter : ' mysql_error());
  
// Sélection du schéma
  
mysql_select_db('test',$liendb);
  
// Lancement de la requête d'insertion
  
$sql "insert into JoueurScore(Joueur, Score) Values ('$joueur',$score);"
  
mysql_query($sql$liendb) or die(mysql_error());
  
// Il s'agit d'une requête insert, pas de résultat attendu
  
mysql_close($liendb);
?>


<HTML>
<BODY>

<?php
  
// Affichage d'un message de réussite
  
echo "Le joueur $joueur avec le score $score vient d'être enregistré avec succès !";
  
// j'aurais pu faire un sprintf, mais cela fonctionne bien ;)
  
?>


</BODY>
</HTML>



Le classement - ClassementGen.php :

<?php
  $liendb 
mysql_connect('localhost''mysql_user''mysql_password') or die('Impossible de se connecter : ' mysql_error());
  
mysql_select_db('test',$liendb);
  
$sql 'select @rang := @rang + 1 as rang, Joueur,Score from JoueurScore a cross join (select @rang:=0) b ORDER BY Score DESC';
  
$req mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  echo 
'<html><body lang="fr" bgcolor=black Text=white><META HTTP-EQUIV="Refresh" CONTENT="30; url=ClassementGen.php">';
  echo 
'Classement Général<br>';
  echo 
'<table border="1">';
  echo 
'<TR bgcolor=gainsboro><TH><FONT color=black>Rang</FONT></TH><TH><FONT color=black>Joueur</FONT></TH><TH><FONT color=black>Score</FONT></TH></TR>';
  
// on fait une boucle qui va faire le tour de chaque enregistrement
  
while($data mysql_fetch_assoc($req))
  {
    
// on affiche les informations de l'enregistrement en cours
    
echo '<TR><TD align="center"><FONT color=black>'.$data['rang'].'</FONT></TD><TD align="center"><FONT color=black>'.$data['Joueur'].'</FONT></TD><TD align="center"><FONT color=black>'.$data['Score'].'</FONT></TD></TR>';
  }
  
// on ferme la connexion a MySQL
  
mysql_close($liendb);
  echo 
'</table></TD>';
?>



et enfin le top 3 - top3.php

<?php
  $liendb 
mysql_connect('localhost''mysql_user''mysql_password') or die('Impossible de se connecter : ' mysql_error());
  
mysql_select_db('test',$liendb);
  
$sql 'select @rang := @rang + 1 as rang, Joueur,Score from JoueurScore a cross join (select @rang:=0) b ORDER BY Score DESC limit 3';
  
$req mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  echo 
'<html><body lang="fr" bgcolor=black Text=white><META HTTP-EQUIV="Refresh" CONTENT="30; url=top3.php">';
  echo 
'Classement Général<br>';
  echo 
'<table border="1">';
  echo 
'<TR bgcolor=gainsboro><TH><FONT color=black>Rang</FONT></TH><TH><FONT color=black>Joueur</FONT></TH><TH><FONT color=black>Score</FONT></TH></TR>';
  
// on fait une boucle qui va faire le tour de chaque enregistrement
  
while($data mysql_fetch_assoc($req))
  {
    
// on affiche les informations de l'enregistrement en cours
    
echo '<TR><TD align="center"><FONT color=black>'.$data['rang'].'</FONT></TD><TD align="center"><FONT color=black>'.$data['Joueur'].'</FONT></TD><TD align="center"><FONT color=black>'.$data['Score'].'</FONT></TD></TR>';
  }
  
// on ferme la connexion a MySQL
  
mysql_close($liendb);
  echo 
'</table></TD>';
?>



La différence entre le top3 et le classement général est le "limit 3" en fin de requête SQL.

C'est perfectible, mais avec ca tu as quelque chose de fonctionnel.

Dans la connexion à MySQL, tu remplaces :
- localhost par l'adresse de ton serveur MySQL, sauf s'il est sur la même machine
- mysql_user par le user que tu utilises pour te connecté à MySQL
- mysql_password par ton password de connexion à MySQL

Pour la connexion à ton Schéma, tu remplaces test par ton schéma

Pour les requêtes sur ta table tu remplaces JoueurScore par ta table
et les champs joueur et score par les tiens. Penses à les modifier dans les lectures PHP $data['champ']
Le champ ID, n'intervient pas dans la requête INSERT, ni dans les requêtes SELECT.
Je ne pense pas avoir oublier quelque chose.

A toi de jouer maintenant, pour ma part je me suis bien amuser à te faire ça, merci.

A+

_n3o_

Merci Tilowil, j'ai plus qu'a faire ma popote ^^ :-*

Par contre quand je test le formulaire il me donne une erreur 500 :( (j'avais deja ca avant quand je tentais de me connecter a ma bdd, je suis en local sous MAMP pour le moment donc logiquement localhost, root, root (le port est le 8889) mais ca veut pas.

ma bdd a ete cree via ton script posté precedemment (je suis parti là dessus pour etre certain que ca marche dans un premier temps)

une idee du pourquoi du comment ?



_n3o_

Mais au final je me demande si c'est pas plus facile d'avoir un fichier .xml.
En plus d'un point de vue securité c'est peut etre mieux qu'un formulaire (cela dit j'ai mis un acces via mot de passe au formulaire donc a moins de passer par un autre formulaire (xss ?) ca limite les risques (puis faudra le login et pass de la bdd)



Solkan

Tu as probablement une erreur php.

Pour débugger, il faut modifier ton php.ini
error_reporting = E_ALL
display_errors = On

Solkan
"There is too much blood in my Coca-Cola System"

Mes Recherches : Marquee et PCB MK2, Konami Gyruss/Pooyan/Time Pilot/Yie Ar Kung Fu/Commando/Track & Field

_n3o_

oui je l'ai fait il me donne une erreur sur cette ligne du insert.php

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


ce qui peut (doit?) renvoyer a la ligne 8

  $liendb = mysql_connect('localhost', 'root', 'root') or die('Impossible de se connecter : ' . mysql_error());


Il faudrait peut etre specifier le port pour acceder a la bdd non ?



Solkan

mysql_query a été supprimé en php 7 (remplacé par mysqli_query). Si tu tournes avec un WAMP récent, c'est ce qui doit coincer.

sinon, donne aussi le message d'erreur car ca peut aussi être une erreur dans la requete SQL
Solkan
"There is too much blood in my Coca-Cola System"

Mes Recherches : Marquee et PCB MK2, Konami Gyruss/Pooyan/Time Pilot/Yie Ar Kung Fu/Commando/Track & Field

_n3o_

Je tourne sous php 7.1

j'ai testé mysqli et il me sort ca :

[09-Jul-2018 09:08:26 UTC] PHP Parse error:  syntax error, unexpected 'mysqli_query' (T_STRING) in /Applications/MAMP/htdocs/SITE/insert.php on line 13



Solkan

les arguments de mysqli_query sont inversés par rapport à mysql_query
il faut de plus se connecter avec mysqli_connect

$con=mysqli_connect("localhost","my_user","my_password","my_db");
mysqli_query($con,"SELECT * FROM Persons");
Solkan
"There is too much blood in my Coca-Cola System"

Mes Recherches : Marquee et PCB MK2, Konami Gyruss/Pooyan/Time Pilot/Yie Ar Kung Fu/Commando/Track & Field

_n3o_

Bon bah ca y est je suis complètement perdu, je vais me pendre et je reviens  :'(



Solkan

Citation de: _n3o_ le Lundi 09 Juillet 2018, 11:10:49 AM


[09-Jul-2018 09:08:26 UTC] PHP Parse error:  syntax error, unexpected 'mysqli_query' (T_STRING) in /Applications/MAMP/htdocs/SITE/insert.php on line 13
Ceci dit, cette erreur fait plutôt penser à un problème de syntaxe comme un manque de ";" en fin de ligne.

Donne le code de la page php que tu utilises et qui fait cette erreur.
Solkan
"There is too much blood in my Coca-Cola System"

Mes Recherches : Marquee et PCB MK2, Konami Gyruss/Pooyan/Time Pilot/Yie Ar Kung Fu/Commando/Track & Field