Fatal error: Call to a member function fetch() et mail smtp

Simax150
Invité n'ayant pas de compte PHPfrance

31 mars 2010, 04:58

Bonjour à tous !
J'ouvre ce topic car je suis en train de programmer un système d'activation de compte pour mon site. Pour activer un compte, php doit envoyer en mail au futur membre, avec le lien d'activation.

Je teste ce script localement, sur Wamp, et j'ai quelque problème pour l'envoi du mail. J'ai fait quelque recherche et j'ai trouvé qu'il fallait définir plusieurs paramètre. Je change donc php.ini :

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.mail.yahoo.fr
auth_username = *mon add. e-mail*
auth_password = *mon mot de passe*

; http://php.net/smtp-port
smtp_port = 465

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = *mon add. e-mail*


erreur :
Warning: mail() [function.mail]: Failed to connect to mailserver at "smtp.mail.yahoo.fr" port 465, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()


en essayant avec le port 25 au lieu d 465 :
Warning: mail() [function.mail]: SMTP server response: 530 authentication required - for help go to http://help.yahoo.com/help/us/mail/pop/pop-11.html
.

et mon autre problème est celui ci :


include("includes/connexion_mysql.php");//On se connecte à la base sql

if (isset($_GET['nbre']))
{
$clef = $_GET['nbre'];//on récupere la clef d'activation dans une variable si elle existe
}
else
{
$clef = false;//sinon, la variable clef est fausse
}



$activation = $bdd->query('SELECT activation FROM info_utilisateurs'); //On récupère le champs activation, pour le comparer avec la clef d activation
//du $_GET

if ($clef != false)//si la variable clef n'est pas fausse :
{
while ($abc = $activation->fetch())
{
if (in_array ($clef, $activation) == true)//si la clef est trouvée dans l'array :
{
$trouve = true;//la variable trouve est juste
}

}
}

$abc->closeCursor();


erreur :
Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\alea\activation.php on line 25


Merci d'avance pour votre aide !

ViPHP
ViPHP | 1136 Messages

31 mars 2010, 07:57

Slt ,
SMTP = smtp.mail.yahoo.fr
auth_username = *mon add. e-mail*
auth_password = *mon mot de passe*
Tu tentes d'utiliser directement le smtp de yahoo ( d'ailleurs l'adresse ne semble pas correcte ).
De plus les connexions passent en clair ( ce que yahoo doit refuser je pense ? ) utilisateurs de yahoo .. plus d'infos ?

Commences donc pas mettre le smtp de ton FAI , pour tester localement ce sera parfait .

Cependant n'hésites pas à utiliser une bibliothèque solide pour forger tes mails tel que Rmail


Ch.

Mammouth du PHP | 881 Messages

31 mars 2010, 08:14

Après m'être cassé les dents souvent à essayer de faire comme toi, j'ose répéter: utilise les coordonnées (SMTP) de ton Fournisseur d'Accès Internet. Avec certains, c'est la seule façon de faire. Tu y mettras donc les mêmes paramètres smtp que ceux que tu as mis dans ton logiciel de courriel.
Soyez artisans de paix

Simax150
Invité n'ayant pas de compte PHPfrance

31 mars 2010, 12:24

Alors voila :
j'ai essayé avec ça :
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.orange.fr

; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = [email protected]
et l'erreur :
Warning: mail() [function.mail]: SMTP server response: 554 5.7.1 <[email protected]>: Recipient address rejected: Missing Authentication in C:\wamp\www\alea\testarrondis.php on line 32
pourtant, sur http://www.commentcamarche.net/faq/893- ... fai#orange :

Serveur POP : pop.orange.fr
Serveur SMTP : smtp.orange.fr
Serveur SMTP sécurisé : smtp-msa.orange.fr Port : 587 (activer l'authentification smtp)
Serveur IMAP : imap.orange.fr

Je vais télécharger rmail de ce pas.
Merci pour vos réponses !

ViPHP
ViPHP | 5462 Messages

31 mars 2010, 13:30

et en mettant avec le port 587

Mammouth du PHP | 881 Messages

31 mars 2010, 17:53

Si tu mets orange.fr dans ton smtp, il faut que tu donnes aussi l'adresse courriel orange.fr qui t'es fournie.
Soyez artisans de paix

Simax150
Invité n'ayant pas de compte PHPfrance

02 avr. 2010, 11:41

D'accord, je vais essayer ça.
Mais comment régler ce problème de fetch ?
Merci d'avance :D

Simax150
Invité n'ayant pas de compte PHPfrance

02 avr. 2010, 16:09

include('includes/connexion_mysql.php');
if ((isset ($_POST['pseudo'])) AND (isset ($_POST['mot_de_passe'])))
	{
	
		$pseudo = $_POST['pseudo'];
		$mot_de_passe = $_POST['mot_de_passe'];
		
		$reponse = $bdd->query("SELECT * FROM info_utilisateurs");
		
		while ($donnees = $reponse->fetch())
		{
		
			
		
		}
erreur : "Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\alea\index.php on line 20"

ligne 20 :
while ($donnees = $reponse->fetch())
Aidez moi, s'il vous plait :cry:

Mammouth du PHP | 881 Messages

02 avr. 2010, 17:30

Si c'est du code que t'as emprunté, on doit supposer qu'il fonctionne.
S'il fonctionne, ce n'est donc pas dans la référence à l'objet fetch qu'il chercher, mais dans la requête qui lui est soumise.

As-tu essayer ta requête séparément du programme?

Il faudrait que tu soumettes SELECT * FROM info_utilisateurs à PHPMyAdmin pour t'assurer que c'est bon (faute de frappe, manque caractère, etc).
Soyez artisans de paix

Mammouth du PHP | 985 Messages

02 avr. 2010, 17:57

Il y a trop de parenthèses ici:
if ((isset ($_POST['pseudo'])) AND (isset ($_POST['mot_de_passe'])))
:
if (isset($_POST['pseudo']) && isset($_POST['mot_de_passe']))
Tu peux aussi simplifier:
if (isset($_POST['pseudo'], $_POST['mot_de_passe']))
Ensuite je te conseille de toujours prendre comme habitude de mettre ton include juste au dessus de tes requêtes et de ne surtout pas les séparer par un test quelconque.

Sinon que ce passe t-il si ton test est négatif?
-> Eh bien connexion SQL sans requête...
include('includes/connexion_mysql.php');
$reponse = $bdd->query("SELECT * FROM info_utilisateurs");
En partant du principe que ce qui est dans ton fichier connexion_mysql.php est correct évidemment :)

Je sais, je me contredis un peu pour le AND, mais finalement, autant utiliser AND et OR quand cela est nécessaire.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Simax150
Invité n'ayant pas de compte PHPfrance

03 avr. 2010, 04:50

include('includes/connexion_mysql.php');

if (isset($_GET['deco'])) //déconnexion
{
	if ($_GET['deco'])
	{
		session_destroy();
	}
}

if (isset ($_POST['pseudo']) AND isset ($_POST['mot_de_passe']))
	{
	
		$pseudo = $_POST['pseudo'];
		$mot_de_passe = $_POST['mot_de_passe'];
		
		include('includes/connexion_mysql.php');
		$reponse = $bdd->query("SELECT * FROM info_utilisateurs");
		
		while ($abc = $reponse->fetch())
		{
		
			
		
		}
			
	}
et toujours l'erreur :
Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\alea\index.php on line 21
Phpmyadmin accepte ma requete.

Mon problème serait-il sans solution ? :?

Mammouth du PHP | 985 Messages

03 avr. 2010, 04:55

Tu as mis deux fois ton include, donc 1 connexion SQL de trop.
La première est inutile.

Maintenant, montre ton fichier connexion_mysql.php.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Simax150
Invité n'ayant pas de compte PHPfrance

03 avr. 2010, 12:17

:lol: :lol: :lol:
Vous n' allez pas le croire... en fait, depuis le début, je ne me connectais pas à la bonne base...
(j'ai honte...).
Maintenant ça marche, merci énormément pour votre aide à tous !

Simax150
Invité n'ayant pas de compte PHPfrance

03 avr. 2010, 12:22

Heu, une dernière question, qui n'as pas trop rapport au sujet principal : comment faire la partie graphisme de mon site en sachant que je ne suis vraiment pas doué pour ce genre de chose ? Puis-je trouver quelqu'un d'intéressé sur un forum de graphisme ? C'est gratuit ?
Merci pour vos réponses et encore désolé pour la bdd :D

Mammouth du PHP | 881 Messages

03 avr. 2010, 17:28

Tu peux recourir à un CMS. Joomla est très répandu, bâti sur PHP/MySQL et fort bien garni en templates. Joomla.org
Soyez artisans de paix