[PHP/MYSQL] Array en PHP depuis la BD

Résolu
Bonjour,

Je suis débute en PHP & je me demandais comment avoir un résultat d'une requête mysql,
(sous forme de variable en php)

..Je m'explique (c'est peut être vraiment très simple mais je n'y parviens pas) :

Je suis entrain de mettre en place une page en php pour la vérification des erreurs, ni connaissant pas grand chose j'ai utilisé divers tutoriaux & ressources trouvés sur internet dont des forums de commentcamarche.net.

Si quelqu'un pouvais m'aider à traduire et à résoudre le problème ça m'aiderais beaucoup!

Le script où je bloque :

$username = $_POST["username"];
function verifDispoUsername($username) {

// tableau de données qui simule une table contenant des noms d'utilisateurs
// dans un cas réel il y aurait vérification dans la base de données via une requete MySQL

$pseudo_existant = array("aguillem", "zen", "audrey", "test", "stephane");

// verifie si le pseudo existe dans le tableau
if (!in_array(strtolower($username), $pseudo_existant)) {
$dispo = true;
}
else {
$dispo = false;
}
return $dispo;
}

Merci d'avance

9 réponses

  1. // dans un cas réel il y aurait vérification dans la base de données via une requete MySQL

    donc ce que tu veux c'est vérifier si un pseudo $usernane existe déjà dans ta table ?

    <?php
    $dispo = false;
    $usernane=mysql_escape_string(trim($_POST['usernane'])); //la je part du principe que tu récupères le pseudo d'un formulaire d'inscription
    //on eleve les espaces debut et fin et on protege par rapport a mysql
    
    // Connexion à la base et choix de la base de données (à ne faire qu'une fois par page mais sur chaque page où tu utilises la base de données)
    mysql_connexion('localhost', 'root', ''); //a adapter
    mysql_select_db('ta_base');//a adapter
    
    // Initialisation de la requête (permet de l'afficher et de la lancer dans phpmyadmin en cas de problème)
    $requete = "SELECT pseudo FROM users WHERE pseudo='".$usernane."'";
    // Execution de la requete
    $result=mysql_query($requete) or die ("Pb requette ".mysql_error());
    // On  regarde combien trouvé
    if(mysql_num_rows($result)>0){
    	$dispo = false; //existe dèja
    }else{
    	$dispo = true;
    }
    
    // On ferme la connexion
    mysql_close();
    1. Miraaacle!! Alors, je ne sais pas si cela pourra aider d'autres personnes que moi néanmoins je tient à remercier Alain_42 car j'ai simplement adapté sa fonction, il semble que mysql_connexion ne fonctionnais pas.

      // celui-ci fonctionne----------------------------------------------------
      mysql_connect('localhost', 'root', '');
      mysql_select_db('ta_base');

      $username=$_POST['username'];
      $query=("Select * from table_membre where pseudo='$username'");

      $result= mysql_query($query);
      $num=mysql_num_rows($result);
      if ($num > 0) {//Username already exist
      $dispoUsername = "false";
      } else {
      $dispoUsername = "true";
      }
      1. Il me semble que pour que la requête ajax fonctionne il faut que les résultats soient déjà générés (par exemple dans un fichier xml ou sur la page en php elle-même, c'est la raison pour laquelle la fonction de base fonctionne et celle qui va demander à la base de donnée non)

        fichier function.js :

        function init() {
        // on recupere chaque champ a verifier
        var username = document.getElementById('username');
        var password = document.getElementById('password');
        var email = document.getElementById('email');

        // initialise l'appel aux fonctions pour chaque champ
        // il y a des différences de traitement DOM entre IE et Firefox, notamment pour l'affectation d'évenement
        // pour IE
        if (window.attachEvent) {
        username.onkeyup = function() { verifUsername(username); };
        password.onkeyup = function() { verifpassword(password); };
        email.onkeyup = function() { verifEmail(email); };
        }
        // pour Firefox
        else {
        username.setAttribute('onKeyUp', 'verifUsername(username)');
        password.setAttribute('onKeyUp', 'verifpassword(password)');
        email.setAttribute('onKeyUp', 'verifEmail(email)');
        }
        }

        function verifUsername(username) {
        var XHR = new XHRConnection();
        XHR.appendData("username", username.value);
        XHR.sendAndLoad("verifUsername.php", "POST", afficheDispo);
        }

        function verifpassword(password) {
        motDepassworde = password.value;
        password_alert = document.getElementById('password_alert');
        // suppression du texte existant
        while(password_alert.firstChild != null) {
        password_alert.removeChild(password_alert.firstChild);
        }
        // creation du message suivant le cas
        if(motDepassworde.length < 6) {
        var texte = document.createTextNode("Niveau faible");
        }
        if(motDepassworde.length >= 6 && motDepassworde.length < 8) {
        var texte = document.createTextNode("Niveau correct");
        }
        if(motDepassworde.length >= 8) {
        var texte = document.createTextNode("Niveau élevé");
        }
        password_alert.appendChild(texte);
        }

        function verifEmail(email) {
        adresse = email.value;
        email_alert = document.getElementById('email_alert');
        // suppression du texte existant
        while(email_alert.firstChild != null) {
        email_alert.removeChild(email_alert.firstChild);
        }
        // creation du message suivant le cas
        if (!checkEmail(adresse)) {
        var texte = document.createTextNode("Adresse incorrecte");
        email_alert.appendChild(texte);
        } else {
        var texte = document.createTextNode("Adresse correcte");
        email_alert.appendChild(texte);
        }
        }

        function checkEmail(email) {
        var arobase = email.indexOf("@");
        var point = email.lastIndexOf(".");
        if((arobase < 3) || (point + 3 > email.length) || (point < arobase+3)) {
        return false;
        }
        return true;
        }

        function afficheDispo(obj) {
        username_alert = document.getElementById('username_alert');
        // suppression du texte existant
        while(username_alert.firstChild != null) {
        username_alert.removeChild(username_alert.firstChild);
        }

        // Construction des noeuds
        var tabResult = obj.responseXML.getElementsByTagName('resultat');
        var resultat = tabResult.item(0);
        var dispo = resultat.getAttribute('dispo');

        // creation du message suivant le cas
        if (dispo == "true") {
        var texte = document.createTextNode("Le nom d'utilisateur est disponible");
        username_alert.appendChild(texte);
        } else {
        if (dispo == "false") {
        var texte = document.createTextNode("Le nom d'utilisateur n'est pas disponible");
        username_alert.appendChild(texte);
        }
        }
        }

        fichier verifUsername.php :

        <?php

        // celui-ci fonctionne----------------------------------------------------

        $username=mysql_escape_string(trim($_POST['username']));

        $pseudo_existant = array("aguillem", "zen", "audrey", "test", "stephane");

        // verifie si le pseudo existe dans le tableau
        if (!in_array(strtolower($username), $pseudo_existant)) {
        $dispoUsername = "true";
        } else {
        $dispoUsername = "false";
        }

        // celui-ci fonctionne----------------------------------------------------

        // celui-ci ne fonctionne pas----------------------------------------------------

        $requete = "SELECT pseudo FROM users WHERE pseudo='".$username."'";
        // Execution de la requete
        $result=mysql_query($requete) or die ("Pb requette ".mysql_error());
        // On regarde combien trouvé
        if(mysql_num_rows($result) > 0){
        $dispoUsername = "true";
        } else {
        $dispoUsername = "false";
        }

        // celui-ci ne fonctionne pas----------------------------------------------------

        // on cree une feuille xml
        header('Content-type: text/xml');
        // on retourne le resultat sous format xml
        $xml = '<resultats>';
        $xml .= '<resultat dispo="'.$dispoUsername.'" />';
        $xml .= '</resultats>';
        print $xml;
        ?>

        fichier form.php (la partie du input uniquement) :

        <p>
        <label>Nom d'utilisateur : </label>
        <input type="text" id="username" name="username" value="<?php print $_POST["username"];?>" />
        <span id="username_alert"><?php print $message["username"];?></span>
        </p>

        voila, j'ai essayé d'autre script en effectuant des recherches sur google mais ils proposent tous la même formule : (exemple venant d'un autre site)

        //this variable contains the array of existing users
        $existing_users=array('roshan','mike','jason');
        1. Merci Passarinho44 pour cette réponse plus complète, j'avais déjà essayé cette fonction..

          --> Mais sans mette "dispo = false;" en dehors de la fonction alors j'ai essayé avec ta manière mais cela ne fonctionne pas non plus..

          --> peut être que cela peut aider à comprendre la suite, cette fonction cherche si le pseudo existe dans la base de donnée, et renvoi dispo = true; s'il n'est pas déjà utilisé, alors la fonction
          "function verifDispoUsername($username)" renvoi la réponse par xhttprequest pour signaler à la personne qui s'inscrit que le pseudo peut être utilisé ou pas.

          La fonction originale fonctionne mais elle ne contient pas tout les pseudo de ma base de donnée..
          (uniquement : "aguillem", "zen", "audrey", "test", "stephane")

          Si vous connaissez une autre façon de procéder pour signaler à la personne qui s'inscrit que le pseudo peut être utilisé ou pas (ajax) en fonction des pseudo déjà existant sur la base de donnée cela irais très bien !

          Encore merci d'essayer de m'aider à résoudre ce problème
          1. Contributeur
            $pseudo_existant = array("aguillem", "zen", "audrey", "test", "stephane");
            $dispo = false;

            // Connexion à la base et choix de la base de données (à ne faire qu'une fois par page mais sur chaque page où tu utilises la base de données)
            mysql_connexion('localhost', 'root', '');
            mysql_select_db('ta_base');

            // Initialisation de la requête (permet de l'afficher et de la lancer dans phpmyadmin en cas de problème)
            $requete = "SELECT pseudo FROM users";
            // Execution de la requete
            $result=mysql_query($requete);
            // On parcourt le résultat
            while ( $data = mysql_fetch_array($result)) {
            $username = $datat['pseudo'];
            // verifie si le pseudo existe dans le tableau
            if (!in_array(strtolower($username), $pseudo_existant)) {
            $dispo = true;
            }
            }
            // On ferme la connexion
            mysql_close();
            return $dispo;
            }

            Voilà ta petite fonction (mais faite à la volée donc non testée, hésite pas à revenir s'il y a un problème)

            1. merci d'avoir répondu aussi vite ! malheureusement j'ai déjà parcouru ce site & beaucoup d'autre, je ne parviens pas à comprendre comment parvenir à avoir cette requête sql..

              Le script actuel que j'ai montré fonctionne (d'ailleurs il n'y a que comme ça qu'il fonctionne, j'ai essayé les fetch_array, fetch_assoc, while, mais rien n'y fait --> !in_array(strtolower($username), $pseudo_existant) ne reconnais pas quand je change le code actuel