Un utilisateur a demandé 👇

Pourquoi $wpdb renvoie-t-il une valeur nulle globale dans ce code ? Je ne peux pas faire la requête mysql car le monde est nul. Ci-dessous l’erreur dans le fichier journal des erreurs :

Erreur fatale PHP : erreur non détectée : appel à la fonction member() null null

public static function get_classifieds( $urls ) {

        global $wpdb;

        $dom_document = new DOMDocument();

        foreach($urls as $url) {

            if( ! function_exists( 'wp_remote_request' ) ) {

                $html = file_get_contents( $url );
                $dom_document->loadHTML( $html );

            } else {

                $response = wp_remote_request( $url );            
                $body = wp_remote_retrieve_body( $response ); 
                $dom_document->loadHTML( $body );

            } 

            $li_elements = $dom_document->getElementsByTagName( 'li' );

            foreach( $li_elements as $li_element ) {

                $pattern = '/itemsresult/';
                $class = $li_element->getAttribute( 'class' );

                if( preg_match( $pattern, $class ) ) {

                    $img_elements = $li_element->getElementsByTagName( 'img' );
                    $h3_elements = $li_element->getElementsByTagName( 'h3' );
                    $h4_elements = $li_element->getElementsByTagName( 'h4' );
                    $p_elements = $li_element->getElementsByTagName( 'p' );

                    foreach( $h3_elements as $h3_element) {

                        $h3_class = $h3_element->getAttribute( 'class' );
                        $is_null = $wpdb->query( "SELECT IFNULL( SELECT * FROM '{$wpdb->prefix}classifieds' WHERE title = {$h3_element->nodeValue})" , true );      

                        if( $h3_class == 'title' && $is_null ) {

                            echo "<h3>$h3_element->nodeValue</h3>";

                        }

                    }

                    foreach( $img_elements as $img_element) {

                        $src = $img_element->getAttribute( 'src' );

                        if( strpos( $src, 'img' ) && ! strpos( $src, 'no-img' ) ) {

                            echo "<img src="https://codeworpress.com/error-fatal-de-php-error-no-detectado-llamada-a-la-funcion-member-null-null-2/$src" />";

                        }

                    }

                    foreach( $p_elements as $p_element) {

                        $p_class = $p_element->getAttribute( 'class' );

                        if( $p_class == 'description' ) {

                            echo "<p>$p_element->nodeValue</p>";

                        } elseif( $p_class == 'locale' ) {

                            echo "<p><strong>$p_element->nodeValue</strong></p>";

                        } elseif( $p_class == 'timestamp' ) {

                            echo "<p>$p_element->nodeValue</p>";

                        }

                    }

                    foreach( $h4_elements as $h4_element) {

                        $h4_class = $h4_element->getAttribute( 'class' );

                        if( $h4_class == 'price' ) {

                            echo "<h4>$h4_element->nodeValue</h4>";

                        }

                    }

                }

            }

        }

    }


(@richdeveloper)

il y a 1 an, 6 mois

D’accord, je vais me répéter jusqu’à ce que nous trouvions la solution : ci-dessus se trouve le code qui devrait appeler la variable globale $wpdb pour mettre une requête dans la base de données. Je peux aussi le faire avec la fonction PHP, mais si j’utilise WordPress, je veux l’utiliser pour l’encodage. Maintenant, si j’appelle la variable globale $wpdb – comme dans ma classe de plugin personnalisé, PHP fonctionne mais il ne fonctionne pas de la même manière que WordPress car le plugin n’est pas chargé. Alors, comment pouvez-vous charger le plugin WordPress principal ? Juste pour pouvoir utiliser la fonction WordPress et dans une autre solution.

Enfin, si vous m’envoyez un e-mail, je peux partager mon code de plugin avec vous pour vous faciliter la tâche. Merci 🙂


(@ gaiement)

il y a 1 an, 6 mois

Nous sommes bénévoles, nous soutenons WordPress ici sur ces forums, nous ne lisons pas votre code dans un e-mail.

Si vous appelez ce code un plugin WordPress, le plugin doit être chargé par WordPress, pas le plugin chargeant WordPress. Vous devriez déjà être dans un environnement WordPress. Sinon, ce n’est pas un plugin WordPress. Pour que le code soit exécutable, il doit être appelé d’une manière ou d’une autre. Où s’appelle-t-il ? Y a-t-il quelque chose dans WordPress qui encourage l’exécution de code ? Si ce n’est pas le cas, trouvez où il devrait être et ajoutez-le. Ensuite, vous aurez défini votre variable $wpdb.


(@richdeveloper)

il y a 1 an, 6 mois

Désolé j’ai fait beaucoup de confusion, l’erreur est : Appeler la fonction membre insert() sur null que la fonction $wpdb->insert(); Retour.

Maintenant, voici ma modification : Array ( PHP Fatal error: Uncaught Error: Call to a member function query() on null => Huqvarna 610 cross blocco motore https://wordpress.org/support/topic/php-fatal-error-uncaught-error-call-to-a-member-function-query-on-null/page/2/
=> Vendo blocco motore husqvarna 610 cross tenuto di scorta sempre in magazzino usato pochissimo perfetto [locale] => Riccione [timestamp] => Oggi, 19:15 [price] => 500 € [ad_type] => 1 )
et voici mon code :

<?php

class The_Crawler {

    public function __construct() { }

    public static function get_classifieds( $urls ) {

        global $wpdb;

        $dom_document = new DOMDocument();

        foreach($urls as $url) {

            if( ! function_exists( 'wp_remote_request' ) ) {

                $html = file_get_contents( $url );
                $dom_document->loadHTML( $html );

            } else {

                $response = wp_remote_request( $url );            
                $body = wp_remote_retrieve_body( $response ); 
                $dom_document->loadHTML( $body );

            } 

            $li_elements = $dom_document->getElementsByTagName( 'li' );

            foreach( $li_elements as $li_element ) {

                $pattern = '/itemsresult/';
                $class = $li_element->getAttribute( 'class' );

                if( preg_match( $pattern, $class ) ) {

                    $classified = [];

                    $img_elements = $li_element->getElementsByTagName( 'img' );
                    $h3_elements = $li_element->getElementsByTagName( 'h3' );
                    $h4_elements = $li_element->getElementsByTagName( 'h4' );
                    $p_elements = $li_element->getElementsByTagName( 'p' );

                    foreach( $h3_elements as $h3_element) {

                        $h3_class = $h3_element->getAttribute( 'class' );
                                                        
                        if( $h3_class == 'title' ) {

                            $classified['title'] = $h3_element->nodeValue;
                            // echo "<h3>$h3_element->nodeValue</h3>";
        
                        }

                    }

                    foreach( $img_elements as $img_element) {

                        $src = $img_element->getAttribute( 'src' );
                                                        
                        if( strpos( $src, 'img' ) && ! strpos( $src, 'no-img' ) ) {

                            $classified['src'] = $src;
                            // echo "<img src="https://codeworpress.com/error-fatal-de-php-error-no-detectado-llamada-a-la-funcion-member-null-null-2/$src" />";
                                
                        }

                    }

                    foreach( $p_elements as $p_element) {

                        $p_class = $p_element->getAttribute( 'class' );
                                                        
                        if( $p_class == 'description' ) {

                            $classified['description'] = $p_element->nodeValue;
                            // echo "<p>$p_element->nodeValue</p>";
        
                        } elseif( $p_class == 'locale' ) {

                            $classified['locale'] = $p_element->nodeValue;
                            // echo "<p><strong>$p_element->nodeValue</strong></p>";
        
                        } elseif( $p_class == 'timestamp' ) {

                            $classified['timestamp'] = $p_element->nodeValue;
                            // echo "<p>$p_element->nodeValue</p>";
        
                        }

                    }

                    foreach( $h4_elements as $h4_element) {

                        $h4_class = $h4_element->getAttribute( 'class' );
                                                        
                        if( $h4_class == 'price' ) {

                            $classified['price'] = $h4_element->nodeValue;
                            // echo "<h4>$h4_element->nodeValue</h4>";
        
                        }

                    }
                    
                    $classified['ad_type'] = 1;
                    print_r($classified);
                    $query = $wpdb->insert( 'wp_classifieds', $classified );
                    echo $query;

                }

            }

        }

    }

}

$urls = [
    'https://www.kijiji.it/motori/moto-e-scooter/',
    'https://www.kijiji.it/elettronica/'
];

The_Crawler::get_classifieds( $urls );

La requête transmise à la fonction d’insertion n’est pas nulle comme le montre la sortie du tableau ci-dessus, mais l’erreur indique qu’un membre a été transmis à la fonction nulle : pourquoi ? Est-ce que je n’ai pas compris quelque chose ?


(@richdeveloper)

il y a 1 an, 6 mois

Mise à jour : j’avais l’habitude de var_dump() postuler pour $wpdb variable globale et retours null. Parce que?


(@ gaiement)

il y a 1 an, 6 mois

Encore une fois, je ne vois pas quand ni où votre code est demandé. Cela dépend de vous.

À ce stade, nous avons atteint des limites que la plupart de la communauté ici est prête à offrir pendant son temps libre (tout le monde ici est bénévole).

Vous pouvez obtenir plus d’yeux de développeur sur http://wordpress.stackexchange.com/

Cela a-t-il résolu votre problème ?

Was this helpful?

0 / 0

Leave a Reply 0

Your email address will not be published. Required fields are marked *