[RESOLU] Notice: Trying to get property of non-object in

Eléphant du PHP | 153 Messages

25 mai 2019, 20:48

Ha oui quand même :)

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 20:55

La vrai idée ingénieuse c'est celle de trier les lettres du mot pour générer un anagramme qui est le même pour tous les mots étant des anagrammes les uns des autres. Je sais pas où tu as péché ça mais c'est très malin. C'est tout bête et ça fonctionne très bien. ;)
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 21:02

Simple oui dans ma tête, mais pas pour faire le programme c'est une autre histoire :)

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 21:08

Bah ça 19 ans d'expériences ça facilite grandement la tâche pour sûr. :mrgreen:
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 21:15

Un truc que j'ai du mal à comprendre

Je cherche le mot acquiescerez
il me donne rien comme résultat alors qu'il y a dans la colonne sorted_letters : acceeeiqrsuz

Cela veut dire qu'il va vérifier si le mot existe (acceeeiqrsuz) ?
Mais si c'est le cas je n'arrive ) voir où il le cherche dans la source :

Code : Tout sélectionner

<?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) } require ('mysqli_conn.php'); $conn = new mysqli($servername, $username, $password, $dbname); $search = 'acquiescerez';// le mot recherché $sorted_letters = $conn->real_escape_string(sort_alpha_noaccent_tolower($search));// l'anagramme unique de recherche $query = "SELECT * FROM dictionnaire WHERE sorted_letters = '$sorted_letters'";// sélectionne tous les mots du dictionnaire ayant cet anagramme unique $words = $conn->query($query); /* affiche tous les mots excepté le mot original */ while ($word = $words->fetch_object()) { if ($word->scrabble_name != $search) echo $word->scrabble_name.'<br/>'; } echo "<br/>::".$sorted_letters.".."; ?>

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 21:23

Avec $search = 'acquiescerez';, ça cherche toutes les lignes ou sorted_letters est égale à acceeeiqrsuz mais quand les résultats sont affichés, ça affiche la ligne seulement si scrabble_name est différent du mot donné au départ.
while ($word = $words->fetch_object())
{
  if ($word->scrabble_name != $search)// si scrabble_name est différent de acquiescerez
    echo $word->scrabble_name.'<br/>';
}
Si tu veux afficher le mot donné au départ tu dois simplement enlever le if.
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 21:30

Ha oui je viens de tester .. trop fort ... wouaaa c'est quand même bien le php vu de cette manière :)

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 21:38

Oui franchement je trouve que c'est un langage très agréable à utiliser avec une API vraiment très fournie qui évolue dans un très bon sens au fil des versions et une très grande communauté qui fait des choses remarquables.

PS : ça en est où le traitement des anagrammes ?
Modifié en dernier par Saian le 25 mai 2019, 21:45, modifié 1 fois.
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 21:44

8000 sur 393672 je vais le laisser tourner cette nuit il devrait y en avoir pour un peu moins de 11h00 d'après mes calculs

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 21:46

Ah oué quand même c'est super long. ^^
Je connais un moyen pour que ça aille beaucoup plus vite mais bon...
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 21:48

Quel genre de moyen ?

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 21:56

Créer un fichier sql avec toutes les requêtes que tu pourrais ensuite importer depuis phpmyadmin. Çà irai à priori beaucoup plus vite.
/** SCRIPT UPDATE DATABASE - EXECUTE ONCE V2 */
require ('mysqli_conn.php');
$conn = new mysqli($servername, $username, $password, $dbname);

$query = 'SELECT * FROM dictionnaire';
$words = $conn->query($query);

$dump = fopen('update-dictionnaire-sorted_letters.sql', 'w');
while ($word = $words->fetch_object())
{
  $sorted_letters = $conn->real_escape_string(sort_alpha_noaccent_tolower($word->scrabble_name));
  $update = "UPDATE dictionnaire SET sorted_letters = '$sorted_letters' WHERE scrabble_name = '{$word->scrabble_name}';\n";
  fputs($dump, $update);
}
fclose($dump);
Il faut que le serveur web ai les droits d'écriture sur le répertoire où est exécuter le script.
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 22:00

Donc j'arrête le programme et je lance celui ci ?

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 22:09

Tu peux essayer de le lancer en parallèle déjà voir combien de temps il met pour générer le fichier et le poids du fichier.
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 22:10

ok je lance