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

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 14:46

Essaie comme ça :
$selectDicoo = "SELECT * FROM $lettre WHERE sorted_letters = '$sorted';";
$motDico = $conn->query($selectDicoo);
if (!$motDico)
  echo 'Mysqli error '.$conn->error.' with query '.$selectDico.'<br/>';

PS : Une variable dans une chaine ne sera interprétée que si la variable est entourée de ". Avec des ' les variables ne sont pas interprétées.
Développeur web depuis + de 20 ans

Mammouth du PHP | 2703 Messages

25 mai 2019, 14:52

il suffit de mettre ce qui a été donné dans ce fil :
$selectDicoo = "SELECT * FROM $lettre WHERE sorted_letters = '".$sorted_letters."';";

Eléphant du PHP | 153 Messages

25 mai 2019, 16:42

Notice: Trying to get property of non-object in /Applications/MAMP/htdocs/ana2.php on line 59

Ligne 59 : if ($motDico->num_rows > 0)

Merci pour votre aide messieurs ;)

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 17:12

Je commence à me demander si tu ne te moques pas de nous jefekoi car avec le dernier code que je t'ai collé, si le if ($motDico->num_rows > 0) provoque l'erreur Trying to get property of non-object alors tu devrais avoir avant ça le message d'erreur sql ainsi que la requête.

Je vais aller un peu plus loin une dernière fois et si tu n'as rien de nouveau à apporter avec ça, alors personne ici ne pourra t'aider. :non:
$selectDicoo = "SELECT * FROM $lettre WHERE sorted_letters = '$sorted';";
$motDico = $conn->query($selectDicoo);
if (!$motDico)
  echo 'Mysqli error '.$conn->error.' with query '.$selectDico.'<br/>';


if ($motDico && $motDico->num_rows > 0)
{
  while($row = $motDico->num_rows())
  {
    echo $row['mot'].'<br />';
  }
}

Si avec ce code tu as encore un Trying to get property of non-object y a un gros problème. :evil:
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 17:21

Sincèrement non, je ne suis pas dans le style d'embêter les personnes qui ont la gentillesses de m'aider.
Ce qui vous prend du temps.

Je crois que j'ai tellement cherché que je dois avouer que je suis perdu .

Je vais abandonné, je préfère ne pas continuer de plus j'ai testé cette partie que tu m'as donné et j'ai quand même une autre erreur ... Je suis à bout là ...

Code : Tout sélectionner

Mysqli error Unknown column 'sorted_letters' in 'where clause' with query SELECT * FROM dictionnaire WHERE scrabble_lettre LIKE 'c%'

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 17:31

Ah bah déjà le résultat est différent mais même là la sortie est ubuesque.
Unknown column 'sorted_letters' in 'where clause' alors que la requête serait SELECT * FROM dictionnaire WHERE scrabble_lettre LIKE 'c%' (requête qui ne correspond d'ailleurs pas à SELECT * FROM $lettre WHERE sorted_letters = '$sorted';). Ce n'est pas possible.
A la limite un Unknown column 'scrabble_lettre' in 'where clause', d'accord mais pas un Unknown 'sorted_letters' qui ne figure pas dans la where clause...
Donc à moins que tu exécutes une autre requête entre 2...?

De plus d'après le create table que tu as collé dans ton premier message, les 2 colonnes existent bel et bien dan la table dictionnaire. Tu ne peux donc pas avoir une erreur Unknown column 'sorted_letters' in 'where clause' sur la table dictionnaire.
Tu devrais vérifier ta table dans la base de données.


PS : c'est normal que tu ais cette nouvelle erreur avec le dernier code que je t'ai donné. Le but était justement de voir quelle était l'erreur et de voir quelle était la requête. Mais malheureusement même là ça ne colle pas. J'imagine que tu modifies le code un peu dans tous les sens et du coup c'est le bazar.
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 17:50

Autant pour moi je suis désolé j'avais supprimé la colonne " sorted_letters " pour en remettre une autre vraiment désolé ....

Maintenant il ne m'affiche rien en résultat :

Code : Tout sélectionner

<!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 // ---------------------------- $mot="chanter"; $lettre="dictionnaire"; $motDico=""; 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'); // ---------------------------- // 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 WHERE scrabble_lettre LIKE '$mot[0]%'"; $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['scrabble_name']) ); $updateDico = "UPDATE $lettre SET sorted_letters = ".$sorted_letters.";"; $conn->query($updateDico); } } // ---------------------------- echo '<br />...<br />'; $sorted = $conn->real_escape_string(sort_alpha_noaccent_tolower($mot)); $conn = new mysqli($servername, $username, $password, $dbname); $selectDicoo = "SELECT * FROM $lettre WHERE scrabble_lettre = '$sorted';"; $motDico = $conn->query($selectDicoo); if (!$motDico) echo 'Mysqli error '.$conn->error.' with query '.$selectDico.'<br/>'; if ($motDico && $motDico->num_rows > 0) { while($row = $motDico->num_rows()) { echo $row['scrabble_lettre'].'<br />'; } } ?> </body> </html>

Code : Tout sélectionner

CREATE TABLE `dictionnaire` ( `scrabble_id` int(11) NOT NULL, `scrabble_lettre` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `scrabble_nbr` int(1) NOT NULL, `scrabble_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `scrabble_vb` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `scrabble_anagramme` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `sorted_letters` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Eléphant du PHP | 153 Messages

25 mai 2019, 17:52

J'ai mis les deux colonnes `scrabble_anagramme` et `sorted_letters` pour ne plus me faire avoir


un extrait de ma table :

Code : Tout sélectionner

INSERT INTO `dictionnaire` (`scrabble_id`, `scrabble_lettre`, `scrabble_nbr`, `scrabble_name`, `scrabble_vb`, `scrabble_anagramme`, `sorted_letters`) VALUES (1, 'a', 2, 'aa', '', 'aa', ''), (2, 'a', 8, 'aelenienna', '', 'aelenienna,aalenienne', ''), (3, 'a', 10, 'aalenienne', '', 'aelenienna,aalenienne', ''), (4, 'a', 11, 'aaleniennes', '', 'aaleniennes', ''), (5, 'a', 9, 'aaleniens', '', 'aaleniens', ''), (6, 'a', 3, 'aas', '', 'aas,asa', ''), (7, 'a', 5, 'abaca', '', 'abaca', ''), (8, 'a', 6, 'abacas', '', 'abacas', ''), (9, 'a', 7, 'abacost', '', 'abacost,cabotas,tabasco', '');

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 17:57

Ok ça avance =D>

Donc maintenant si tu n'as rien qui s'affiche c'est que $motDico->num_rows est égale à 0, il n'y a donc aucune ligne qui a été retournée.

Tu dois donc maintenant vérifier la requête. Pour ce faire tu peux forcer l'affichage de la requête juste le temps de tester.
$selectDicoo = "SELECT * FROM $lettre WHERE scrabble_lettre = '$sorted';";
echo $selectDicoo.'<br/>';
$motDico = $conn->query($selectDicoo);
if (!$motDico)
  echo 'Mysqli error '.$conn->error.' with query '.$selectDico.'<br/>';

En regardant bien le WHERE tu devrais comprendre pourquoi aucune ligne n'est retournée. Cela dépend de la clause WHERE et du contenu de la table.
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 18:00

SELECT * FROM dictionnaire WHERE scrabble_lettre = 'acehnrt';

Yessss je commence à voir clair :) Merci merci :)

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 18:02

PS : si le message d'erreur ne contenait pas la bonne requête c'est parce que la variable $selectDico ne correspond pas à la bonne requête, la bonne requête étant dans $selectDicoo (avec 2 o). Ma faute désolé... :P

Le code aurait du être :
$selectDicoo = "SELECT * FROM $lettre WHERE scrabble_lettre = '$sorted';";
$motDico = $conn->query($selectDicoo);
if (!$motDico)
  echo 'Mysqli error '.$conn->error.' with query '.$selectDicoo.'<br/>';// $selectDicoo et non $selectDico
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 18:06

Si j'ai bien compris il faut que je fasse ceci :

Code : Tout sélectionner

echo '<br />...<br />'; $sorted = $conn->real_escape_string(sort_alpha_noaccent_tolower($mot)); $conn = new mysqli($servername, $username, $password, $dbname); $selectDicoo = "SELECT * FROM $lettre WHERE scrabble_lettre = '$sorted';"; echo $selectDicoo.'<br/>'; $motDico = $conn->query($selectDicoo); if (!$motDico) echo 'Mysqli error '.$conn->error.' with query '.$selectDicoo.'<br/>';// $selectDicoo et non $selectDico if ($motDico && $motDico->num_rows > 0) { while($row = $motDico->num_rows()) { echo $row['scrabble_lettre'].'<br />'; } }

Et j'obtiens ceci :

Code : Tout sélectionner

SELECT * FROM dictionnaire WHERE scrabble_lettre = 'acehnrt';

Avatar du membre
Mammouth du PHP | 1609 Messages

25 mai 2019, 18:14

Et donc à la vue de la requête et du contenu de la table tu comprends pourquoi aucune ligne n'est retournée ?
En fait que cherches tu as faire avec cette requête ?
Moi ce que je vois c'est que sont les lettres du mot chanter triées par ordre alphabétique.
Mais que veux tu en faire ? tu voudrais sortir la liste des mots qui pourraient être accolés au mot chanter ? ou bien sortir une liste de mots contenant cette liste de lettres ?
Développeur web depuis + de 20 ans

Eléphant du PHP | 153 Messages

25 mai 2019, 18:19

Et bien comme tu as peut être deviné je voudrais ajouter dans ma BD les anagrammes (existant) des mots recherché
Pour l'exemple que j'ai essayé "Chanter" et il m'a sorti "acehnrt" mot qui n'existe pas dans la BD d'où une page blanche .

Eléphant du PHP | 153 Messages

25 mai 2019, 18:24

Et si je peux rajouter je veux faire cette sauvegarde des anagrammes en local puis le mettre dans ma BD sur mon site.