IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Affichage de la position [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut Affichage de la position
    Bonjour à tous.

    J'aimerai votre aide et merci par avance. J'ai une carte avec des cases carrée (40px/40px), admettons qu'elle fasse au total 20 sur 20 cases.
    Il faudrait que j'arrive à afficher la carte pour le membre en 9cases par exemple et centrer sur le joueur.

    J'ai déjà un code que j'avais récupéré dans des ressources de jeu, j'ai essayé de bidouiller, mais mes connaissances ne sont pas encore assez costaud. Après c'est comme ça qu'on apprend
    La carte s'affiche bien, j'arrive même à afficher les avatars du joueur défini dans la table avatar avec pos_x et pox_y.
    Bémol, sur le profil elle reste au cordonnée défini : 1,20. Je ne sais pas comment modifier ce bout de code:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $pos = "1;20";
     
    	$pos_tab = explode(";",$pos);
     
    	unset($pos);
     
    	$pos["pos_x"] = $pos_tab[0];
    	$pos["pos_y"] = $pos_tab[1];

    Et celui qui affiche la carte sur le profil:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    carte($pos["pos_x"],$pos["pos_y"],9);

    Sans me trompé, je pense que l'erreur et le soucis viennent de ces quelques lignes.
    Grand merci !

    En image ça donne:
    la carte 20 sur 20 (Les couleurs sont les avatars "pour le moment")


    Ce que ça donne actuellement:


    Ce que j'aimerai

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Êtes-vous sûr qu'il s'agisse d'un problème de SQL ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    Bonjour,

    Je pense que pour l'affichage de la carte non ..
    Pour l'affichage de l'avatar oui ?

    Je consulte quelques livres durant mes heures de pauses pour essayer d'avancer.
    Je suis arrivé à cela :

    J'affiche bien la carte, bien centré sur l'avatar ... sauf que .. c'est pas l'avatar du joueur connecté mais d'un autre dans la base de donné. J'ai mis un echo bonjour, voir si le joueur est bien connecté
    Voilà mon code actuellement. J'essaye de m'améliorer au fur et à mesure.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     <?php
    		session_start();
    		if (!isset($_SESSION['id'])) {
    			header ('Location: index.php');
    			exit();}
     
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $pdo = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '', $pdo_options);
     
    	if (isset($_SESSION['id']) AND isset($_SESSION['pseudo']))
    		{
    			echo 'Bonjour ' . $_SESSION['pseudo'];
    		}
     
    	// Position du joueur
    	$requete = $pdo->query('SELECT pos_x, pos_y, img_unite FROM unite, membres WHERE unite.id = membres.id');
        while ($donnees = $requete->fetch())
        {
    	$pos_x = $donnees['pos_x'];
    	$pos_y = $donnees['pos_y'];
    	$imgunite = $donnees['img_unite'];
        }
     
    	// Définition de la map
    	$taille = 4;
    	$x_debut=$pos_x-$taille;
    	$x_fin=$pos_x+$taille;
    	$y_debut=$pos_y-$taille;
    	$y_fin=$pos_y+$taille;
     
    	//affichage de la carte
    		echo '<table border="1" cellspacing="0" cellpadding="0">'."\n";
    		echo '<tbody>'."\n";
    		echo '<tr><td height="40" width="40">&nbsp; x<br>&nbsp;y</td>'."\n";
     
    		//on affiche les positions x sur la premiere ligne
    		for($x=$x_debut;$x<=$x_fin;$x++)  echo '<td align="center" valign="middle" height="40" width="40">'.$x.'</td>'."\n";
     
    		//on affiche lignes par lignes la position y, les autres joueurs et les batiments
    		for ($y=$y_debut;$y<=$y_fin;$y++) {
    			echo'<tr witdh="40" height="40"><td align="center" valign="middle" height="40" width="40">'.$y.'</td>'."\n";//affichage de la position
     
    			for($x=$x_debut;$x<=$x_fin;$x++) {
     
    					   if($x==$pos_x && $y==$pos_y) //si on est sur la position du joueur
    				 echo "<td class='$imgunite' alt='.'></td>"; //on affiche l'avatar de votre perso
    				 else
    				  echo "<td class='t1'></td>"; //Sinon on affiche de l'herbe
    			}
    			echo '</tr>';
    		} 
    		echo '</tbody></table>';
     
     
    	 }
    ?>

    Au cas ou, ma table membre affiche l'id, le pseudo
    La table unite affiche l'id de l'unite, les positions x et y, l'image de l'unite (Avatar du joueur en gros) et un champs id pour relié à l'id de la table membre.

    Merci

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faut envoyer l'id du joueur dans votre requête de la ligne #16.
    De plus vous n'avez pas besoin de la table membre à cet endroit :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pos_x, pos_y, img_unite FROM unite WHERE id = ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    J'avais déjà essayé ainsi, voilà ce que ça me donne en erreur:

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 '?' at line 1' in C:\Desktop\monsite\carte.php:16 Stack trace: #0 C:\Desktop\monsite\carte.php(16): PDO->query('SELECT pos_x, p...') #1 {main} thrown in C:\Desktop\monsite\carte.php on line 16
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     <?php
    		session_start();
    		if (!isset($_SESSION['id'])) {
    			header ('Location: index.php');
    			exit();}
     
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $pdo = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '', $pdo_options);
     
    	if (isset($_SESSION['id']) AND isset($_SESSION['pseudo']))
    		{
    			echo 'Bonjour ' . $_SESSION['pseudo'];
    		}
     
    	// Position du joueur  
    	$requete = $pdo->query('SELECT pos_x, pos_y, img_unite FROM unite WHERE id = ?');
        while ($donnees = $requete->fetch())
        {
    	$pos_x = $donnees['pos_x'];
    	$pos_y = $donnees['pos_y'];
    	$imgunite = $donnees['img_unite'];
        }
    Cela pourrait-il provenir de ma page connexion ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
     
    session_start();
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
     
     
    if(isset($_POST['formconnexion'])) 
    	{
    		if(!empty($_POST['pseudo']) && !empty($_POST['motdepasse']))
    		{
    			$_POST['pseudo'] = $_POST['pseudo'];
    			$_POST['motdepasse'] = $_POST['motdepasse'];
    			$sql = "SELECT * FROM membres, factions, unite WHERE pseudo='".$_POST['pseudo']."'";
    			$req = $bdd->query($sql) or die ("Erreur SQL");
    			$data = $req->fetch();
    			if(!empty($data['pseudo']))
    			{
    				$_POST['motdepasse'] = password_hash($_POST['motdepasse']);
    				if($data['motdepasse'] == $_POST['motdepasse'])
    				{
    					$_SESSION['pseudo'] = $_POST['pseudo'];
    					$_SESSION['id'] = $data['id'];
    					$_SESSION['avatar'] = $data['avatar'];
    					header("location: profil.php");
    				}
    					else $erreur = "Mot de passe incorrect!";
    				}
    			else $erreur = "Nom de l officier incorrect";
    			}
    		else $erreur = "Tous les champs doivent être complétés !"; 
    	}
     
    ?>
    Merci

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Salut,

    En Pdo on prépare les requêtes puis après on les exécute.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Position du joueur  
    $requete = $pdo->prepare('SELECT pos_x, pos_y, img_unite FROM unite WHERE id = ?');//préparation de la requête
    $requete->execute(array($_SESSION["id"]));//exécution de la requête

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Remarque au passage sur ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $_POST['motdepasse'] = password_hash($_POST['motdepasse']);
    if($data['motdepasse'] == $_POST['motdepasse'])
    Pour tester le mot de passe, il vaut mieux utiliser la fonction password_​verify
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(password_verify($_POST['motdepasse'], $data['motdepasse']) )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Salut,

    En Pdo on prépare les requêtes puis après on les exécute.
    Merci.
    J'ai suivis ce que vous m'avez indiqué, problème, ça affiche pour tout le monde, l'img_unite du premier membre de la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $requete = $pdo->prepare('SELECT pos_x, pos_y, img_unite FROM unite WHERE id = ?');
    $requete->execute(array($_SESSION["id"]));
    Pour tester le mot de passe, il vaut mieux utiliser la fonction password_​verify
    Ah oui, exacte, je vais faire ça de suite ! Merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Par défaut
    J'ai réussi !!!!!!!!!!!!!

    J'avais une erreur avec ma page de connexion, du coup je n'arrivais pas à avoir l'id du joueur. J'en ai déduis cela en affichant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $_SESSION['id']; ?>
    . Il affichait toujours ID: 1.
    Après cela j'ai bidouillé la page connexion et paf

    Voilà mon code de page connexion.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    session_start();
     
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
     
    if(isset($_POST['formconnexion'])) {
       $pseudo = $_POST['pseudo'];
       $motdepasse = sha1($_POST['motdepasse']);
     
       if(!empty($pseudo) AND !empty($motdepasse)) {
          $requser = $pdo->prepare("SELECT * FROM membres WHERE pseudo = ? AND motdepasse = ?");
          $requser->execute(array($pseudo, $motdepasse));
          $userexist = $requser->rowCount();
          if($userexist == 1) {
             $userinfo = $requser->fetch();
             $_SESSION['id'] = $userinfo['id'];
             $_SESSION['pseudo'] = $userinfo['pseudo'];
    		 $_SESSION['avatar'] = $userinfo['avatar'];
     
             header("Location: profil.php");
          } else {
             $erreur = "Mauvais pseudo ou mot de passe !";
          }
       } else {
          $erreur = "Tous les champs doivent être complétés !";
       }
    }
    ?>
    Là cette après midi je vais modifier pour le password_hash !
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage d'une position (longitude, latitude) sur une carte
    Par Bernard B dans le forum Web & réseau
    Réponses: 2
    Dernier message: 12/10/2016, 20h38
  2. Réponses: 2
    Dernier message: 24/06/2014, 14h29
  3. Affichage de la position actuelle
    Par Mizo120 dans le forum Android
    Réponses: 5
    Dernier message: 02/03/2011, 17h09
  4. Affichage avec les positions "absolute"
    Par Skize dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 15/04/2010, 21h42
  5. Affichage div et position
    Par pas30 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/02/2009, 19h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo