8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis nouvelle sur votre forum et débutante autodidacte en développement web...
Je reprends laborieusement le travail sur mon site après le départ de mon ancien webmaster. Problème : je me retrouve donc confrontée à son code que je ne comprends pas toujours.

Ce qui m'embête : certains scripts qui fonctionnent en ligne me renvoient des erreurs sur le serveur local. J'imagine qu'il s'agit d'une différence de version de PHP.
J'utilise EasyPHP et PHPMyAdmin en serveur local, il tourne avec PHP 5.2.0.
Mon serveur distant utilise PHPMyAdmin lui aussi, je ne suis pas certaine de la version de PHP utilisée même s'il y a des chances qu'elle soit un peu plus ancienne (j'ignore où trouver cette information mais si vous avez une idée, je pourrai vous la fournir comme info complémentaire).

Deux extraits du code qui me renvoient la même erreur, Notice: Trying to get property of non-object (j'ai mis en gras les lignes signalées comme comportant une erreur).

$requete_alias = "SELECT nom FROM forum_alias WHERE alias = \"".stripslashes($article_topic->nom)."\" OR nom = \"".stripslashes($article_topic->nom)."\""; 
$result_alias = mysql_query($requete_alias,$loulubie_db) or loulubie_mysql_die();
$article_alias = mysql_fetch_object($result_alias);
[b]if ($article_alias->nom == "") {[/b]
...

et
$requete_caract_lubien = "SELECT type FROM contacts WHERE lower(nom) = \"".strtolower(stripslashes($lubien['nom']))."\""; 
$result_caract_lubien = mysql_query($requete_caract_lubien,$loulubie_db) or loulubie_mysql_die();
$article_caract_lubien = mysql_fetch_object($result_caract_lubien);
[b]if (strpos($article_caract_lubien->type,"webmaster") !== false) {[/b]
$modicone="icone_despote.gif";
	$mododesc="Créatrice";
}
[b]elseif (strpos($article_caract_lubien->type,"modo") !== false) {[/b]
	$modicone="icone_modo.gif";
	$mododesc="Modo du forum";
}

Auriez-vous une idée de ce qui coince avec ma configuration locale ?

D'avance merci !
Modifié par loulubie (12 Feb 2013 - 12:18)
Le message d'erreur signifie que tu essais d'accéder à une propriété d'un élément qui n'est pas un objet. Dans ton cas c'est simplement que ta requête SQL ne renvoi pas de résultat. Probablement que ta base de données locale est une version plus ancienne de ta base de données en ligne.

Pour connaitre la version de PHP tu as la fonction phpinfo().
Merci jb_gfx,

Renseignements pris avec phpinfo(), la version est plus ancienne en ligne qu'en local comme je le pensais :
En local : PHP Version 5.3.2
En ligne : PHP Version 4.4.9

J'ai également découvert que l'instruction mysql_fetch_object est désormais obsolète, or elle est présente dans tous les codes incriminés. Sans doute est-elle responsable du problème en ne rapportant pas l'objet demandé (quoique elle semble fonctionner dans d'autres parties du code).

Ceci dit, je me demande s'il ne vaut pas mieux que je rétrograde ma version de PHP locale pour l'aligner sur celle du serveur ? Et si oui comment ? (easyPHP n'est plus en download dans une version avec PHP 4)
Modifié par loulubie (12 Feb 2013 - 15:10)
Ce n'est pas la fonction myslq_fetch_object() qui est obsolète, ce sont toutes les fonctions de l'extension mysql() (l'extension elle même est obsolète). Il faut utiliser PDO à la place (disponible à partir de PHP 5.x).

Pour ton serveur il faut clairement mettre à jour ta version de PHP et passer en 5.4.x. Idem pour ta version de PHP locale.
Mmmh... Ça risque d'être un peu compliqué étant donné que je suis vraiment très débutante Smiley decu

Mais merci déjà pour tes éclairages qui m'ont permis de déterminer le problème, à partir de là je verrai si j'arrive à m'en sortir / à trouver de l'aide autour de moi !
jb_gfx a écrit :
Ce n'est pas la fonction myslq_fetch_object() qui est obsolète, ce sont toutes les fonctions de l'extension mysql() (l'extension elle même est obsolète). Il faut utiliser PDO à la place (disponible à partir de PHP 5.x).

Pour ton serveur il faut clairement mettre à jour ta version de PHP et passer en 5.4.x. Idem pour ta version de PHP locale.

ou utiliser l'extension mysqli qui a l'avantage d'être beaucoup plus proche de l'ancienne mysql Smiley cligne
Oui, il y aussi d'autres avantages à utiliser mysqli plutôt que PDO. Mais PDO l'extension qui a le vent en poupe et qui sera mise plus en avant dans les futures versions de PHP.

Le mieux reste d'utiliser une couche d’abstraction qui permet de changer facilement d'extension sans réécrire tout son code.