Page 1 sur 10

Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 07:36
par Jefekoi
Bonjour, voici mon code php , j'ai une erreur que je n'arrive pas à resoudre voilà des heures que je cherche mais rien.

Code : Tout sélectionner

<?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 sorted_letters = ".$sorted.";"; $motDico = $conn->query($selectDicoo); if ($motDico->num_rows > 0) { while($row = $motDico->num_rows()) { echo $row['mot'].'<br />'; } } // ---------------------------- ?>
Structure de la table

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, `sorted_letters` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


L'erreur :
Notice: Trying to get property of non-object in ............. on line 59

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


Pourriez vous m'éclairer ?

Merci pour votre aide.

Eric

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 10:03
par @rthur
Ce message t'indique que tu essayes d'accéder à une propriété d'un objet d'une variable qui n'est pas un objet...

Vu la ligne concernée, tu essayes donc d'accéder à la propriété "num_rows" de l'objet $motDico, et PHP te signale que $motDico n'est pas un objet donc tu as probablement un problème.

Tu peux faire un var_dump($motDico); pour voir qu'est-ce qu'il y a dans $motDico.
Si tu as "false" c'est qu'une erreur s'est produite, mais comme tu n'as rien fait dans ton code pour vérifier qu'il n' ait pas d'erreurs de requête SQL ce n'est pas très surprenant ;)
https://www.php.net/manual/fr/mysqli.examples-basic.php

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 10:20
par Jefekoi
Merci effectivement j'ai False, je regarde le lien que tu as mis pour essayer de comprendre..

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 10:23
par Jefekoi
Comme sur le lien j'ai ajouté ceci pour mieux comprendre l'erreur mais il ne m'affiche rien mis à par : Notice: Trying to get property of non-object in /

Code : Tout sélectionner

$sorted_letters = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) ); $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_errno) { // La connexion a échoué. Que voulez-vous faire ? // Vous pourriez vous contacter (email ?), enregistrer l'erreur, afficher une jolie page, etc. // Vous ne voulez pas révéler des informations sensibles // Essayons ceci : echo "Désolé, le site web subit des problèmes."; // Quelque chose que vous ne devriez pas faire sur un site public, // mais cette exemple vous montrera quand même comment afficher des // informations lié à l'erreur MySQL -- vous voulez peut être enregistrer ceci echo "Error: Échec d'établir une connexion MySQL, voici pourquoi : \n"; echo "Errno: " . $conn->connect_errno . "\n"; echo "Error: " . $conn->connect_error . "\n"; // Vous voulez peut être leurs afficher quelque chose de jolie, nous ferons simplement un exit exit; }

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 10:34
par Jefekoi

Code : Tout sélectionner

$sorted_letters = $conn->real_escape_string( sort_alpha_noaccent_tolower($mot) ); $conn = new mysqli($servername, $username, $password, $dbname); $selectDicoo = "SELECT * FROM $lettre WHERE sorted_letters = ".$sorted_letters.";"; $motDico = $conn->query($selectDicoo); var_dump($motDico); if (!$result = $conn->query($selectDicoo)) { // Oh non ! La requête a échoué. echo "Désolé, le site web subit des problèmes."; // Denouveau, ne faite pas ceci sur un site public, mais nous vous // montrerons comment récupérer les informations de l'erreur echo "Error: Notre requête a échoué lors de l'exécution et voici pourquoi :<br/>"; echo "Query: " . $selectDicoo . "<br/>"; echo "Errno: " . $conn->errno . "<br/>"; echo "Error: " . $conn->error . "<br/>"; exit; }
Désolé, le site web subit des problèmes.Error: Notre requête a échoué lors de l'exécution et voici pourquoi :
Query: SELECT * FROM dictionnaire WHERE sorted_letters = acehnrt;
Errno: 1054
Error: Unknown column 'acehnrt' in 'where clause'

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 11:51
par Saian
Salut, dans la requête les chaines de caractères doivent être entourées de guillemets simple ou double.
SELECT * FROM dictionnaire WHERE sorted_letters = 'acehnrt';

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 12:04
par Jefekoi
Merci Salan, mais non , j'ai toujours l'erreur : Notice: Trying to get property of non-object in /

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 12:11
par Saian
Sur ton précédent message tu avais une erreur de requête, tu l'as toi même collé.
Query: SELECT * FROM dictionnaire WHERE sorted_letters = acehnrt;
Errno: 1054
Error: Unknown column 'acehnrt' in 'where clause'

Maintenant si tu as une erreur Trying to get property of non-object, c'est que tu essaies d'accéder à une propriété d'objet alors que la variable n'est pas un objet. Tu as donc un problème dans ton code. Mais on ne peut pas t'aiguiller plus sans savoir dans quelle fichier et à quelle ligne et sans voir le code correspondant...
De plus le message d'erreur est une notice, c'est donc une erreur non bloquante, mais cela peut quand même poser un problème de logique, tout dépend du code.

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 12:21
par Jefekoi
Tout cela est compliqué pour ma petite tête (58 ans c'est pas aussi facile de plus je touche un peu sur des petites interventions mais là) , j'ai mis tout ce que j'avais dans mon premier poste avec ce qu'il fallait pour la base de données

Je vais essayer encore et encore mais je ne sais plus par quoi commencer :(

Merci pour ton aide ;)

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 12:24
par @rthur
Fais un echo de ta requête SQL et teste la dans phpmyadmin

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 12:33
par Saian
As tu apporté une correction à ton code suite à ma suggestion sur les chaines de caractères dans une requête ?
Si tu n'as rien changé tu as forcément toujours la même erreur. Si tu as fait un changement, quel changement as tu fais ?
A priori tu as juste à faire ça :
$selectDicoo = "SELECT * FROM $lettre WHERE sorted_letters = '".$sorted_letters."';";

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 14:29
par Jefekoi
Fais un echo de ta requête SQL et teste la dans phpmyadmin
Faire un echo ???? et surtour tester dans phpmyadmin .. bigree j'ai bien peur de ne rien comprendre :(

J'ai bien un echo $row['mot'].'<br />';

Mais tester dans phpmyadmin ????

Oui Saian

Code : Tout sélectionner

$selectDicoo = "SELECT * FROM $lettre WHERE sorted_letters = '$sorted';";
Et cela ne change absolument rien :(

Image

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 14:36
par Saian
Ce que te propose @rthur c'est de faire ça par exemple :
$selectDicoo = "SELECT * FROM $lettre WHERE sorted_letters = '$sorted';";
echo $selectDicoo;
Ainsi la requête sera affichée et tu pourras la copier et la tester dans phpmyadmin afin de voir si elle te fait une erreur. Mais apparemment tu ne vois pas ce qu'est phpmyadmin.
Alors comment gères tu la base de données ? comment as tu créé les tables ? n'utilises tu pas un outils pour pouvoir consulter ta base ?

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 14:40
par Jefekoi
Si phpAdmin je connais mais tester la formule dans phpadmin je n'avais pas compris

Merci Sain voilà le resultat :

Code : Tout sélectionner

Notice: Undefined variable: sorted in /Applications/MAMP/htdocs/ana2.php on line 55 SELECT * FROM dictionnaire WHERE sorted_letters = ''; Notice: Trying to get property of non-object in /Applications/MAMP/htdocs/ana2.php on line 60

Re: Notice: Trying to get property of non-object in

Posté : 25 mai 2019, 14:44
par Jefekoi
J'ai essayé de cette manière aussi et là même problème

Code : Tout sélectionner

$selectDicoo = 'SELECT * FROM $lettre WHERE sorted_letters = "$sorted";';
SELECT * FROM $lettre WHERE sorted_letters = "$sorted";
Notice: Trying to get property of non-object in /Applications/MAMP/htdocs/ana2.php on line 60