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

Avatar du membre
Mammouth du PHP | 1609 Messages

09 juin 2019, 20:29

L'algo que je t'ai fait construit et affiche les requêtes, à toi de l'adapter pour les exécuter et en afficher les résultats. :P
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

09 juin 2019, 20:38

Yess je vais y arriver :) j'adore les défis :)

Je vais rester sur le PP.php :) pour tester

Avatar du membre
Mammouth du PHP | 1609 Messages

09 juin 2019, 20:46

T'as plus grand chose à faire en fait :
$conn = new mysqli($servername, $username, $password, $dbname);

$word = 'stalagmometres';
$query = 'SELECT * FROM dictionnaire WHERE sorted_letters IN (:combinations)';

for ($length = strlen($word) - 1; $length > 1; $length--)
{
  echo "<br/>Anagrams with <b>$length</b> letters<br/>";
  $combinations = array();
  $combination = new Combination($word, $length);

  while ($letters = $combination->next()) {
    $combinations[] = $letters;
  }

  $combinationQuery = str_replace(':combinations', "'".implode("', '", $combinations)."'", $query);

  $words = $conn->query($combinationQuery);
  while ($word = $words->fetch_object()) {
    echo $word->scrabble_name.'<br/>';
  }
}

La connexion que tu avais mise dans la fonction verifier c'est mieux qu'elle ne soit pas dedans, ni dans la boucle, sinon tu reconnectes plusieurs fois ce qui bouffe encore plus de temps. :wink:
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

09 juin 2019, 21:08

C'est marrant j'affiche les deux versions dans PP.php

Et la première me donne que deux mots ....

Code : Tout sélectionner

$word = 'selectionner'; echo "Nom= ".$word ; echo "<hr/>"; $conn = new mysqli($servername, $username, $password, $dbname); $query = 'SELECT * FROM dictionnaire WHERE sorted_letters IN (:combinations)'; for ($length = strlen($word) - 1; $length > 1; $length--) { echo "<br/>Anagrams with <b>$length</b> letters<br/>"; $combinations = array(); $combination = new Combination($word, $length); while ($letters = $combination->next()) { $combinations[] = $letters; } $combinationQuery = str_replace(':combinations', "'".implode("', '", $combinations)."'", $query); $words = $conn->query($combinationQuery); while ($word = $words->fetch_object()) { echo":".$word->scrabble_name.'<br/>'; } } echo "<hr/>"; $word = 'selectionner'; $conn = new mysqli($servername, $username, $password, $dbname); $query = 'SELECT * FROM dictionnaire WHERE sorted_letters IN (:combinations)'; for ($length = strlen($word) - 1; $length > 1; $length--) { // echo "<br/>Query for combinations with <b>$length</b> letters<br/>"; echo "<br/><br/>"; $combinations = array(); $combination = new Combination($word, $length); while ($letters = $combination->next()) { $combinations[] = $letters; echo $letters.", "; } //$combinationQuery = str_replace(':combinations', "'".implode("', '", $combinations)."'", $query); // echo $combinationQuery.'<br/><br/>'; }

Avatar du membre
Mammouth du PHP | 1609 Messages

09 juin 2019, 21:10

Je vois que tu n'as des résultats que pour la première requête alors tu peux tester avec ça pour avoir plus d'informations.
Tu peux également tester les requêtes directement dans phpmyadmin voir ce que tu obtiens.
Et avec le isset($_GET['word']) tu peux éventuellement changer de mot directement en faisant ?word=lemot.
N'oublies pas que la class Combination comme je te l'ai fournie ne supporte pas les accents.
$conn = new mysqli($servername, $username, $password, $dbname);

$word = isset($_GET['word']) ? $_GET['word'] : 'stalagmometres';
$query = 'SELECT * FROM dictionnaire WHERE sorted_letters IN (:combinations)';

for ($length = strlen($word) - 1; $length > 1; $length--)
{
  echo "<br/>Anagrams with <b>$length</b> letters<br/>";
  $combinations = array();
  $combination = new Combination($word, $length);

  while ($letters = $combination->next()) {
    $combinations[] = $letters;
  }

  $combinationQuery = str_replace(':combinations', "'".implode("', '", $combinations)."'", $query);
  echo 'Query:<br/>'.$combinationQuery.'<br/>';

  $words = $conn->query($combinationQuery);
  if (!$words)
    echo 'Error: '.$conn->error.'<br/>with query:<br/>'.$combinationQuery;
  else {
    echo 'Words:<br/>';
    while ($word = $words->fetch_object()) {
      echo $word->scrabble_name.'<br/>';
    }
  }
}
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1609 Messages

09 juin 2019, 21:21

On est bêtes, on écrase le $word du départ dans le while ($word = $words->fetch_object()). :P
Même avec plus de 15 ans d'expérience on peut se fail. :mrgreen:

$conn = new mysqli($servername, $username, $password, $dbname);

$searchedWord = isset($_GET['word']) ? $_GET['word'] : 'stalagmometres';
$query = 'SELECT * FROM dictionnaire WHERE sorted_letters IN (:combinations)';

for ($length = strlen($searchedWord) - 1; $length > 1; $length--)
{
  echo "<br/>Anagrams with <b>$length</b> letters<br/>";
  $combinations = array();
  $combination = new Combination($searchedWord, $length);

  while ($letters = $combination->next()) {
    $combinations[] = $letters;
  }

  $combinationQuery = str_replace(':combinations', "'".implode("', '", $combinations)."'", $query);
  echo 'Query:<br/>'.$combinationQuery.'<br/>';

  $words = $conn->query($combinationQuery);
  if (!$words)
    echo 'Error: '.$conn->error.'<br/>with query:<br/>'.$combinationQuery;
  else {
    echo 'Words:<br/>';
    while ($word = $words->fetch_object()) {
      echo $word->scrabble_name.'<br/>';
    }
  }
}
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

09 juin 2019, 21:30

YESSSSSSS Magnifique :)

Avatar du membre
Mammouth du PHP | 1609 Messages

09 juin 2019, 21:31

Un petit ORDER BY scrabble_name ASC pourrait être pas mal dans la requête : ^^
$query = 'SELECT * FROM dictionnaire WHERE sorted_letters IN (:combinations) ORDER BY scrabble_name ASC';

PS : il faut bien reset le tableau $combinations à chaque passage dans le for, sinon les mots s'ajoutent au fur et à mesure. :P
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

09 juin 2019, 22:15

Merci beaucoup pour ton aide Saian, c'est marrant à partir du moment où je l'intègre dans mon index, il se met à ramer grave ....

Avatar du membre
Mammouth du PHP | 1609 Messages

09 juin 2019, 22:18

Un petit problème d'intégration ? tu veux me montrer ton code complet ?
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

09 juin 2019, 22:22

Je crains que tu vas faire de grand yeux.. je te l'envoie en MP si tu veux :)

Avatar du membre
Mammouth du PHP | 1609 Messages

09 juin 2019, 22:23

Vas y on va voir ça ;)
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

09 juin 2019, 23:07

Merci pour tes conseils , effectivement il rame toujours .. bizarre....

Eléphant du PHP | 153 Messages

09 juin 2019, 23:24

En cherchant un petit mot, il m'a afficher une erreur :

Warning: mysqli::query(): Couldn't fetch mysqli in ...../index.php on line 265
Erreur

Warning: mysqli_close(): Couldn't fetch mysqli in ...../index.php on line 288

Avatar du membre
Mammouth du PHP | 1609 Messages

09 juin 2019, 23:28

Oué c'est le $conn->close(); que je t'ai dis de mettre à la fin. Comme tu fais un new mysqli il faut faire le close en objet et non pas avec la fonction mysqli_close.
Développeur web depuis + de 20 ans