Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de sortie avec MySQL

    28 avril 2015 à 19:00:13

    Bonjour à vous,

    Je suis en train de faire un système d’autocomplétion en JavaScript et bizarrement, il n'y a que 2 sortie de la base de données qui sont les mêmes. Le problème ne vient pas de l'autocomplétion parce que j'ai essayé de sortir les données avec d'autres façons et toujours le même résultat.

    try {$bdd=new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root','');}
    
    catch(Exception $e){die('Erreur : '.$e->getMessage());}
    
    $req = $bdd->query('SELECT entreprise FROM entreprises ');
    
    $data = $req->fetch();
    



    Le résultat est toujours dollarama 2 fois.

    J'ai tenter de trouver des réponses sur le web, mais rien qui explique pourquoi j'ai ce problème, pour cette raison que je fais appel à votre aide d'expert.

    Merci de votre aide et votre temps.

    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2015 à 19:07:46

      Si j'efface la compagnie dollarama qui à l'id 1, il fait la même chose avec la compagnie qui à l'id  2 !
      • Partager sur Facebook
      • Partager sur Twitter
        28 avril 2015 à 19:27:10

        Il manque la suite du code pour espérer comprendre ce que tu nous dis ! Parce que le mode de fetch par défaut c'est PDO::FETCH_BOTH ce qui fait que les valeurs de chaque colonne sont indexées deux fois : une par leur nom + une par leur position. Passer en PDO::FETCH_ASSOC ?

        -
        Edité par julp 28 avril 2015 à 19:27:53

        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2015 à 19:36:01

          Voici la partie serveur 

          <?php 
          
          	try {$bdd=new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root','');}
          	catch(Exception $e){die('Erreur : '.$e->getMessage());}
          
          		$req = $bdd->query('SELECT entreprise FROM entreprises ');
          			
          			$data = $req->fetch();
          			
          			 $dataLen = count($data);
          			 
          			 sort($data);
          			 
          			 $results = array();
          			
          			for($i=0 ; $i<$dataLen && count($results)<10 ;$i++ )
          			{
          				if(stripos($data[$i], $_GET['s'])===0)
          				{
          					array_push($results,$data[$i]);
          				}
          			}
          			
          			echo implode('|', $results);
          
          ?>

          et voici la partie Html et Java 

          <!DOCTYPE html>
          <html>
          
          <head>
          	<meta charset="utf-8" />
          	<title>Auto-Complétion</title>
          </head>
          
          <body>
          	<input id="search" type="text" autocomplete="off" />
          	<div id="results"><div>
          
          	<script>
          		(function() {
              
          	var searchElement = document.getElementById('search'),
          	results = document.getElementById('results'),
          	selectedResult = -1, // Permet de savoir quel résultat est sélectionné : -1 signifie "aucune sélection"
          	previousRequest, // On stocke notre précédente requête dans cette variable
          	previousValue = searchElement.value; 
          	
          	
          	
          	function getResults(keywords) { 
          	
          	var xhr = new XMLHttpRequest();
          	xhr.open('GET', './autocompletionConf.php?s='+ encodeURIComponent(keywords));
          	
          	xhr.addEventListener('readystatechange', function() {
          	if (xhr.readyState == 4 && xhr.status == 200) {
          	
          	displayResults(xhr.responseText);
          	
          	}
          	}, false);
          	
          	xhr.send(null);
          	
          	return xhr;
          	
          	}
          	
          	function displayResults(response) {
          	
          	results.style.display = response.length ? 'block' : 'none'; 
          	
          	if (response.length) { 
          	
          	response = response.split('|');
          	var responseLen = response.length;
          	
          	results.innerHTML = ''; // On vide les résultats
          	
          	for (var i = 0, div ; i < responseLen ; i++) {
          	
          	div = results.appendChild(document.createElement('div'));
          	div.innerHTML = response[i];
          	
          	div.addEventListener('click', function(e) {
          	chooseResult(e.target);
          	}, false);
          	
          	}
          	
          	}
          	
          	}
          	
          	function chooseResult(result) { 
          	
          	searchElement.value = previousValue = result.innerHTML; 
          	results.style.display = 'none'; 
          	result.className = ''; 
          	selectedResult = -1; 
          	searchElement.focus();
          	
          	}
          	
          	
          	
          	searchElement.addEventListener('keyup', function(e) {
          	
          	var divs = results.getElementsByTagName('div');
          	
          	if (e.keyCode == 38 && selectedResult > -1) { 
          	
          	divs[selectedResult--].className = '';
          	
          	if (selectedResult > -1) { 
          	divs[selectedResult].className = 'result_focus';
          	}
          	
          	}
          	
          	else if (e.keyCode == 40 && selectedResult < divs.length - 1) { 
          	
          	results.style.display = 'block'; // On affiche les résultats
          	
          	if (selectedResult > -1) { 
          	divs[selectedResult].className = '';
          	}
          	
          	divs[++selectedResult].className = 'result_focus';
          	
          	}
          	
          	else if (e.keyCode == 13 && selectedResult > -1) {
          	
          	chooseResult(divs[selectedResult]);
          	
          	}
          	
          	else if (searchElement.value != previousValue) { 
          	
          	previousValue = searchElement.value;
          	
          	if (previousRequest && previousRequest.readyState < 4) {
          	previousRequest.abort(); 
          	}
          	
          	previousRequest = getResults(previousValue); 
          	
          	selectedResult = -1; 
          	
          	}
          	
          	}, false);
          	
          	})();
          	</script>
          </body>
          
          </html>



          encore une fois merci

          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2015 à 20:01:29

            Ce n'est pas comme ça qu'on parcourt les lignes renvoyées par une requête. Tu ne fais que lire la première ligne, là. Replonges-toi dans le cours php/mysql.

            Et ne peux-tu pas utiliser un format d'échange de données standardisé comme JSON ?

            La partie PHP tient en une ligne :

            echo json_encode($bdd->query('SELECT entreprise FROM entreprises')->fetchAll(PDO::FETCH_ASSOC));
            

            En JS, une fois le JSON parsé, il suffit d'itérer sur le tableau (de tableaux) obtenu.

            -
            Edité par julp 28 avril 2015 à 20:05:21

            • Partager sur Facebook
            • Partager sur Twitter
              28 avril 2015 à 20:12:05

              Ok merci pour ton aide !
              • Partager sur Facebook
              • Partager sur Twitter

              Problème de sortie avec MySQL

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown