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 :

Anagramme pas facile


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut Anagramme pas facile
    Bonjour,

    J’essaie depuis pas mal de temps à trouver comment peut on chercher les anagrammes dans la base de données mais vu mon niveau (1/10) , je dirais que ce n'est pas facile.

    J'ai trouvé un script qui éventuellement pourrais aller mais je voudrais transformer le "array" par ma base de données

    si une personne a eu meilleurs idée où pourrait m'aider.

    Merci
    PS: Pour info j'ai qu'une seul BD avec je ne sais plus combien de mot (énorme)

    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
    <?php
    $dictionary = array("kayak","kyaak","eric");
    $anagram = "kayak";
    $anagramSorted = sortString($anagram);
     
    foreach ($dictionary as $word)
    {
        $wordSorted = sortString($word);
        if ($wordSorted == $anagramSorted)
        {
           echo 'true : '.$word."<br/>";
        }
    }
     
    function sortString($s)
    {
        $chars = array();
        $length = strlen($s);
        for ($i=0;$i<$length;$i++)
        {
           $chars[] = $s[$i];
        }
        sort($chars);
     
        return implode("",$chars);
    }
    ?>
      0  0

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,
    Citation Envoyé par Jefekoi Voir le message
    J'ai trouvé un script qui éventuellement pourrais aller mais je voudrais transformer le "array" par ma base de données
    Euh, le résultat d'une requête SELECT sera un array donc tu veux remplacer le "array" par un autre array. T'es sûr ?
      0  0

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    function sort_alpha_noaccent_tolower($str)
    {
    	$str = mb_strtolower($str);		// tout en minuscules
    	$str = strtr($str,				// sans accents
          'àáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'aaaaaaceeeeiiiioooooouuuuyy');
    	$chr = str_split($str,1);
        sort($chr);						// ordre alphabetique
        return trim(implode('',$chr));	// supprime les espaces (si on a plusieurs mots)
    }
    ?>
    L'idée est d'effectuer D'ABORD cette opération UNE FOIS, en enregistrant le résultat dans une colonne ('sortstr' par exemple) de ta table.

    Ensuite, pour trouver les anagrammes d'un mot, il suffit de faire la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT ....... WHERE sortstr = :sortstr";
    ... prepare(...);
    ... execute([':sortstr'=> sort_alpha_noaccent_tolower($la_chaine_a_tester)]);
    Exemple : 'LUCIOLES' - 'COUI...S'



    N.B. Il y avait la même parodie avec Gérard Jugnot, mais je ne l'ai pas retrouvée...
    Dernière modification par Invité ; 19/05/2019 à 10h50.
      0  0

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut

    quitte à se marrer
      1  0

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    Merci messieurs,

    Je vais voir ça cette semaine.
      0  0

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    Voilà où j'en étais ...


    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
    function suppr_accents($chaine) {
        $accents = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ');
        $sans = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y');
        return str_replace($accents, $sans, $chaine);
     }
    function is_anagram($string_1, $string_2) 
        { 
            if (count_chars($string_1, 1) == count_chars($string_2, 1)) 
                return $string_1.","; 
            else 
                return ;        
        }  
    $mot="remonter";
    $nbr=strlen($mot);
    for ($i = 0; $i < $nbr; $i++) {
       $suite.= " AND scrabble_name LIKE '%".substr($mot, $i,1)."%'"."\n";
    }
    $servername = "localhost";
    $username = "root";
    $password = "root";
    $dbname = "Mots";
    $lettre="dictionnaire";
    $conn = new mysqli($servername, $username, $password, $dbname);
     
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
     
    $ii=0;
    $sqlAlphabet = "SELECT * FROM $lettre WHERE scrabble_lettre  LIKE '$mot[0]%'";
    $alphabet = $conn->query($sqlAlphabet);
     
     
     
     
     
    if ($alphabet->num_rows > 0) {
    while($row = $alphabet->fetch_assoc()) {
     $ii++;
    $alpha[$ii]= $row["scrabble_name"]; 	
     
    } 
    }
     
     
     
    $sql = "SELECT * FROM $lettre WHERE LENGTH(scrabble_name) = $nbr ";
    $result = $conn->query($sql);
           if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
    echo is_anagram(suppr_accents($row["scrabble_name"]), suppr_accents($mot));
     
    }
    }
     
     
     
     
    $conn->close();
     
    echo "<br/>FIN";//.$alpha[$iii]." : ".$iii;
    ?>
    J'ai un peu de mal à comprendre à comprendre cette ligne jreaux62
    WHERE sortstr = :sortstr"; .

    J'utilise ce nom pour la colonne anagramme : scrabble_ana01
    donc je dois faire ceci ?
    WHERE scrabble_ana01 = :scrabble_ana01";
      0  0

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Aujourd'hui j'en suis à ce point :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <?php
    function suppr_accents($chaine) {
        $accents = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ');
        $sans = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y');
        return str_replace($accents, $sans, $chaine);
     }
    function is_anagram($string_1, $string_2) 
        { 
            if (count_chars($string_1, 1) == count_chars($string_2, 1)) 
                return $string_1; 
            else 
                return ;        
        } 
    $mot="avarièrent";
    $mot= suppr_accents($mot);
    $mot=strtolower($mot);
    $nbr=strlen($mot);
    $servername = "localhost";
    $username = "root";
    $password = "root";
    $dbname = "Mots";
    $lettre="dictionnaire";
    echo $mot."<br/>.....<br/>";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    $sql = "SELECT * FROM $lettre WHERE scrabble_nbr = $nbr";
    $result = $conn->query($sql);
           if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
    $row["scrabble_name"]=suppr_accents(strtolower($row["scrabble_name"]));
    if ($row["scrabble_name"]==suppr_accents($mot)){echo "oui,";$id=$row["scrabble_id"];}
    if (is_anagram(suppr_accents($row["scrabble_name"]), $mot)==""){}else{
    $mem.= is_anagram(suppr_accents($row["scrabble_name"]), $mot).",";
    }
    }//if
    }//while
    $mem=substr($mem,0,-1);
    echo "<b>".$mot."</b> <br/>";
    echo $mem. " id= ".$id;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    $sql = "UPDATE dictionnaire set scrabble_anagramme='$mem' where scrabble_id=$id";
    if ($conn->query($sql) === TRUE) {
    } else {
        echo "Error updating record: " . $conn->error;
    }//if
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    $conn->close();
    ?>
    Je ne suis pas sur que le code soit bon, si quelqu'un peut m'aider.

    Merci
      0  0

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Qu'est-ce que tu n'as pas compris dans mon code et explications ?

    L'as-tu au moins TESTE ??

    Ça me semblait pourtant clair :
    • On enregistre en bdd UNE FOIS POUR TOUTES pour chaque mot la chaine de lettres en ordre alphabétique (via la fonction fournie)
    • Puis, il suffit de faire une requête pour trouver TOUT DE SUITE en SQL les équivalences
    Dernière modification par Invité ; 21/05/2019 à 09h10.
      0  0

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    il est préférable et de loin d'utiliser ce qui est fourni en natif par le langage. Pour virer les accents, PHP le fait pour toi comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $to_ascii = function(string $p): string {
        $tls = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', Transliterator::FORWARD);
        return $tls->transliterate($p);
    };
     
    $mot = "raïsèùœÉÀ";
    $s = $to_ascii($mot); // raiseuoeEA
    ensuite pour savoir si c'est un anagramme, il faut juste compter les lettres identiques entre les mots et vérifier que ce total est égal à la longueur du mot
      0  0

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Qu'est-ce que tu n'as pas compris dans mon code et explications ?
    Je n'ai pas compris ton histoire de requête je ne suis pas un spécialiste ton "prepare(...)"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT ....... WHERE sortstr = :sortstr";
    ... prepare(...);
    ... execute([':sortstr'=> sort_alpha_noaccent_tolower($la_chaine_a_tester)]);
      0  0

  11. #11
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    @rawsrc

    Ha oui merci je vais essayé de mis coller ce soir .. merci
      0  0

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bon.

    Tu es d'accord que tu n'as JAMAIS mentionné que tu utilises mysqli_ * ?
    Du coup, j'ai supposé que tu utilisais PDO (ce qui explique la syntaxe que tu ne comprends pas).

    * Il faut attendre le message #6 pour le voir dans ton code.

    Donc, avec la syntaxe myslqi_ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    // ----------------------------
    function sort_alpha_noaccent_tolower($str)
    {
    	$str = mb_strtolower($str);		// tout en minuscules
    	$str = strtr($str,				// sans accents
          'àáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'aaaaaaceeeeiiiioooooouuuuyy');
    	$chr = str_split($str,1);
        sort($chr);						// ordre alphabetique
        return trim(implode('',$chr));	// supprime les espaces (si on a plusieurs mots)
    }
    // ----------------------------
    2- A FAIRE UNE FOIS POUR TOUTES :
    (il faut d abord créer une colonne dans la table : 'sorted_letters')
    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
    // (include la fonction)
    // ----------------------------
    // A FAIRE UNE FOIS POUR TOUTES
    // (il faut d abord créer une colonne dans la table : 'sorted_letters')
    // ----------------------------
    $conn = new mysqli($servername, $username, $password, $dbname);
     
    // $selectDico = "SELECT * FROM $lettre WHERE scrabble_lettre  LIKE '$mot[0]%'"; // NON ! (erreur)
    $selectDico = "SELECT * FROM $lettre"; // on parcourt TOUTE la table
    $allDico = $conn->query($selectDico);
     
    if ($allDico->num_rows > 0) 
    {
    	while($row = $allDico->fetch_assoc()) 
    	{
    		$sorted_letters = $conn->real_escape_string( sort_alpha_noaccent_tolower($row['mot']) );
    		$updateDico = "UPDATE $lettre SET sorted_letters = ".$sorted_letters.";";
    		$conn->query($updateDico);
    	}
    }
    // ----------------------------
    Remarque : A CHAQUE AJOUT d'un mot dans le dictionnaire, il faudra appliquer la fonction pour obtenir sorted_letters (avant INSERT dans la table).


    3- Recherche des anagrammes d'un mot :
    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
    <?php
    // ----------------------------
    // (include la fonction)
    $mot = "........"; // mot à tester
    $sorted_letters = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) );
    // ----------------------------
    $conn = new mysqli($servername, $username, $password, $dbname);
     
    $selectDico = "SELECT * FROM $lettre WHERE sorted_letters = ".$sorted_letters.";";
    $motDico = $conn->query($selectDico);
     
    if ($motDico->num_rows > 0) 
    {
    	while($row = $motDico->fetch_assoc()) 
    	{
    		echo $row['mot'].'<br />';
    	}
    }
    // ----------------------------
    Dernière modification par Invité ; 21/05/2019 à 19h43.
      0  0

  13. #13
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    Merci jreaux62 pour ton aide précieuse .

    Pour sorted_letters j'avais déjà une table faite "scrabble_anagramme"

    Par contre il me fait une erreur : Notice: Trying to get property of non-object in / ==> Ligne if ($motDico->num_rows > 0)


    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
    // ----------------------------
    // (include la fonction)
    $mot = "vendre"; // mot à tester
    $scrabble_anagramme = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) );
    // ----------------------------
    $conn = new mysqli($servername, $username, $password, $dbname);
     
    $selectDico = "SELECT * FROM $lettre WHERE scrabble_anagramme = ".$scrabble_anagramme.";";
    $motDico = $conn->query($selectDico);
     
    if ($motDico->num_rows > 0) 
    {
    	while($row = $motDico->fetch_assoc()) 
    	{
    		echo $row['mot'].'<br />';
    	}
    }
    // ----------------------------
      0  0

  14. #14
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    En cherchant sur le site j'ai retrouvé pas mal de fois cette erreur et j'ai vu que l'on pouvait mieux comprendre l'erreur en faisant :
    c'est ce que j'ai fait et il me dit : bool(false)

    Je suppose que la réponse devrait être bool(true) ????
      0  0

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jefekoi Voir le message
    Pour sorted_letters j'avais déjà une table faite "scrabble_anagramme"
    1- OK, mais montre-nous un peu des exemples de ce que contient cette colonne "scrabble_anagramme".
    Un EXTRAIT de ta table n'aurait pas été superflu...

    Dans l'exemple que j'avais donné, on obtient :
    • LUCIOLES -> ceillosu
    • Iles CLOU -> ceillosu (c'est juste un test, avec un espace)
    • Couilles -> ceillosu (n'ayons pas peur des mots... )

    Ce sont donc bien des anagrammes !

    2- Tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $scrabble_anagramme = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) );
    // ----------------------------
    $conn = new mysqli($servername, $username, $password, $dbname);
    Or, $conn n'est défini qu'après !
    (ce qui explique l'erreur)

    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // ----------------------------
    $conn = new mysqli($servername, $username, $password, $dbname);
    $scrabble_anagramme = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) );
    IMPORTANT : dans la pratique, mets le script de connexion dans un fichier mysqli_conn.php (par exemple).
    Et INCLUS-LE UNE FOIS POUR TOUTES au début de tes scripts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php require ('mysqli_conn.php'); // en indiquant le chemin correct
    3- Quant à var_dump(); (pour les array), echo ...; (pour les variables/string) : c'est du débogage DE BASE.
    Ca permet de savoir ce que contiennent les array/variables/requêtes/...
    Dernière modification par Invité ; 21/05/2019 à 19h11.
      0  0

  16. #16
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    Avec la dernière source complète que j'ai mis plus haut (Message:Aujourd'hui j'en suis à ce point )
    j'arrive à obtenir ceci :

    Voici un exemple pour "scrabble_anagramme"
    Nom : Capture d’écran 2019-05-21 à 19.14.15.png
Affichages : 6855
Taille : 51,3 Ko


    Pour Luciolles il me trouve lucioles, couilles

    J'ai fait la dernière modification et rien ne change : Notice: Trying to get property of non-object in en ligne 77 : if ($motDicoo->num_rows > 0)
      0  0

  17. #17
    Invité
    Invité(e)
    Par défaut
    Euhhhh....
    C'est en quelle langue ????
    Parce que je ne reconnais pas beaucoup de "vrais" mots "français" (valides) dans "scrabble_name" !

    Et le script que j'ai donné permet justement de REMPLIR la colonne "scrabble_anagramme".


    Je t'ai mis TOUT ce qu'il faut faire dans ce message.
    Je ne vois pas ce que je peux faire de plus...
      0  0

  18. #18
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    Oui mais ton script ne marche pas, donc je n'arrive pas à ajouter les anagrammes

    La liste des mots est dans "scrabble_name"
    Nom : Capture d’écran 2019-05-21 à 19.30.26.png
Affichages : 2719
Taille : 72,5 Ko
      0  0

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jefekoi Voir le message
    Oui mais ton script ne marche pas...
    Alors CORRIGE-LE !

    Moi, je n'utilise PAS mysqli_ !
    Il est donc possible que j'ai fait une erreur de syntaxe.

    Mais si TU NE MONTRES PAS ce que TU as écrit, on ne risque pas de te corriger !...



    Je récapitule :
    A FAIRE UNE FOIS POUR TOUTES :
    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
    // ----------------------------
    function sort_alpha_noaccent_tolower($str)
    {
    	$str = mb_strtolower($str);		// tout en minuscules
    	$str = strtr($str,				// sans accents
          'àáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'aaaaaaceeeeiiiioooooouuuuyy');
    	$chr = str_split($str,1);
        sort($chr);						// ordre alphabetique
        return trim(implode('',$chr));	// supprime les espaces (si on a plusieurs mots)
    }
     
    // ----------------------------
    // A FAIRE UNE FOIS POUR TOUTES
    // (il faut d abord créer une colonne dans la table : 'scrabble_anagramme')
    // ----------------------------
    $conn = new mysqli($servername, $username, $password, $dbname);
     
    // $selectDico = "SELECT * FROM $lettre WHERE scrabble_lettre  LIKE '$mot[0]%'"; // NON ! (erreur)
    $selectDico = "SELECT * FROM $lettre"; // on parcourt TOUTE la table
    $allDico = $conn->query($selectDico);
     
    if ($allDico->num_rows > 0) 
    {
    	while($row = $allDico->fetch_assoc()) 
    	{
    		$scrabble_anagramme = $conn->real_escape_string( sort_alpha_noaccent_tolower($row['mot']) );
    		$updateDico = "UPDATE $lettre SET scrabble_anagramme = ".$scrabble_anagramme.";";
    		$conn->query($updateDico);
    	}
    }
    // ----------------------------
    Remarque : A CHAQUE AJOUT d'un mot dans le dictionnaire, il faudra appliquer la fonction pour obtenir "scrabble_anagramme" (avant INSERT dans la table).
      1  0

  20. #20
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 37
    Points : 7
    Points
    7
    Par défaut
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Document sans titre</title>
    </head>
    <body>
    <?php
    require ('mysqli_conn.php');
    // ----------------------------
    function sort_alpha_noaccent_tolower($str)
    {
    	$str = mb_strtolower($str);		// tout en minuscules
    	$str = strtr($str,				// sans accents
          'àáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'aaaaaaceeeeiiiioooooouuuuyy');
    	$chr = str_split($str,1);
       // sort($chr);						// ordre alphabetique
        return trim(implode('',$chr));	// supprime les espaces (si on a plusieurs mots)
    }
    // ----------------------------
     
     
     
     
    // (include la fonction)
    // ----------------------------
    // A FAIRE UNE FOIS POUR TOUTES
    // (il faut d abord créer une colonne dans la table : 'scrabble_anagramme')
    // ----------------------------
    $mot="acheter";
     
     
    $conn = new mysqli($servername, $username, $password, $dbname);
     
    $scrabble_anagramme = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) ); 
    $selectDico = "SELECT * FROM $lettre WHERE scrabble_lettre  LIKE '$mot[0]%'";
    $allDico = $conn->query($selectDico);
     
     
     if ($allDico->num_rows > 0) 
    {
    	while($row = $allDico->fetch_assoc()) 
    	{
    		$scrabble_anagramme = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) );
    		$updateDico = "UPDATE $lettre SET scrabble_anagramme = ".$scrabble_anagramme.";";
    		$conn->query($updateDico);
    	}
    }
     
    //scrabble_anagramme
     
    // ----------------------------
    // (include la fonction)
    $mot = "........"; // mot à tester
    $sorted_letters = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) );
    // ----------------------------
    $conn = new mysqli($servername, $username, $password, $dbname);
     
    $selectDico = "SELECT * FROM $lettre WHERE sorted_letters = ".$scrabble_anagramme.";";
    $motDico = $conn->query($selectDico);
     
    if ($motDico->num_rows > 0) 
    {
    	while($row = $motDico->fetch_assoc()) 
    	{
    		echo $row['mot'].'<br />';
    	}
    }
    // ----------------------------
     
    echo '<br />'.$row['mot'].'<br />';
     
     
     
     
    ?>
      0  0

Discussions similaires

  1. hash MD5 en C, pas facile !
    Par jack_x4 dans le forum C
    Réponses: 14
    Dernier message: 08/03/2009, 08h14
  2. En fonction du login - modif possibles ou pas - facilement ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 3
    Dernier message: 26/02/2008, 21h19
  3. Réponses: 1
    Dernier message: 09/02/2007, 16h03
  4. [Joomla!] Joomla Pas Facile
    Par sandytarit dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 03/02/2007, 20h48
  5. un petit histogramme pas facile
    Par Bibouda dans le forum C
    Réponses: 15
    Dernier message: 23/11/2005, 21h17

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