Marche en local, mais pas en ligne ?

Eléphant du PHP | 148 Messages

07 avr. 2005, 17:39

Re-bonjour tout le monde,

voici mon problème:
suite aux divers conseils que j'avais obtenu pour tester la présence d'une adresse mail dans une table, j'avais fait ce script (inscription à une newsletter) qui marchait très bien en local.
<?php 
			include("Connections/distant/cnn.php");
			$mail=$_POST['mail'];
			$type=$_POST['type'];
			$reponse=$_POST['reponse'];
			// tests si les champs sont remplis correctement
			if (empty($mail)) {
				print("Formulaire incomplet : veuillez saisir votre adresse mail<br> <a href=\"javascript:history.go(-1)\">Retour au formulaire</a><br>");
				exit;
			}
			if (!(eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $mail))) 
			{
				echo ("L'adresse est invalide, veuillez re-saisir votre adresse, svp<br><a href=\"javascript:history.go(-1)\">Retour à la page précédente</a><br>");
				exit;
			}
			if (empty($type)) {
				print("Formulaire incomplet : veuillez cocher une case correspondant à votre type (ex : élève...), svp<br><a href=\"javascript:history.go(-1)\">Retour à la page précédente</a><br>");
				exit;
			}
			if (empty($reponse)) {
				print("Formulaire incomplet : veuillez cocher la case 'oui' ou 'non' svp. <br><a href=\"javascript:history.go(-1)\">Retour à la page précédente</a><br>");
				exit;
				}
			// fin des tests
			
			// Vérification du mail pour éviter les doublons			
			$requete = "SELECT * FROM abonne WHERE mail='".$mail."'";
			$trouve=mysql_query($requete);
			if (mysql_num_rows($trouve) != 0)
				{
					echo "Votre adresse est déjà présente dans la base, merci de votre intérêt et à très bientôt surmonsite.com !<br><a href=\"javascript:history.go(-1)\">Retour à la page précédente</a><br>";
					exit;
				}
				
			// si mail non présent
			// Ajoute la nouvelle fiche
			$query = "INSERT INTO abonne (mail, type, boutik)";
			$query .= "VALUES('$mail','$type','$reponse')"; 
			$result = mysql_query($query);
			print("Les informations suivantes ont bien été enregistrées :<br>");
			print("<b>Adresse mail : </b>".$mail."<br>"."<b>Catégorie :</b> ".$type."<br>"."<b>Voulez-vous recevoir des informations su la boutique? </b>".$reponse."<br>");
			print("<br>");
			print("Merci, <br>");
			print("vous recevrez prochainement des informations sur toutes les activités, les évènements etc...<br>");
			print("A bientôt !<br>");
			mysql_close();
		?>
Sauf que, en ligne, j'ai une erreur du type ligne 46 (correspond au if (mysql_num_rows..)
mysql_num_rows(): supplied argument is not a valid MySQL result resource in /web/Xf/Xo/Xl/public/www/news_ok.php on line 46
Quelqu'un sait-il pourquoi ?

J'avoue que je galère pas mal, je cherche dans le manuel de reférence de mysql, mais ça ne m'aide pas beaucoup...

Pliz Help !!
Et hop !

Mammouth du PHP | 859 Messages

07 avr. 2005, 18:26

Tu as bien changé les paramètres de connexion à ta bdd dans ton fichier cnn.php?

Eléphant du PHP | 205 Messages

07 avr. 2005, 18:28

Essaie:
if (mysql_num_rows($trouve) !== 0)
Si vous pensez que l'éducation coûte cher, essayez l'ignorance!

Mammouth du PHP | 859 Messages

07 avr. 2005, 18:30

Essaie:
if (mysql_num_rows($trouve) !== 0)
C'est moi qui lui avait changé ce code là et le != marche très bien sur le net. Je ne suis pas sûr que pour exprimer un "différent" il y ait besoin de 2 = mais peut-être que je me trompe...

Eléphant du PHP | 205 Messages

07 avr. 2005, 20:06

@flitox...Je pense que tu as entièrement raison.
Si vous pensez que l'éducation coûte cher, essayez l'ignorance!

Eléphant du PHP | 281 Messages

07 avr. 2005, 20:12

Franchement jpense que la meilleur méthode pour évité ces petits soucis c'est de mettre des test de connection a la base de donnée au moin lors de la mise en ligne du site ca prend pas beaucoup de temps de rajouté un petit truc puis ca te permetera d'avoir une vision du souci :)

[/code]

Eléphant du PHP | 148 Messages

11 avr. 2005, 17:23

Bonjour à tous !

Désolé pour le délai un peu long...merci pour vos réponses...

@slipndi : la connexion marche puisque je peux ajouter une adresse via mon formulaire, j'utilise le même fichier cnn.php...

@flitox : j'ai essayé avec f (mysql_num_rows($trouve) !== 0) et f (mysql_num_rows($trouve) != 0), mais ça ne change rien, apparemment, ce qui pose problème c'est le mysql_num_rows...

@ImBrOgLiO : merci, mais ça ne change rien.

Franchement, je vois pas...à part la connexion, rien ne change entre le local et le distant non?
Et hop !

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 avr. 2005, 19:02

il y a aussi la Bdd qui change

la requête seule marche ?

tu n'aurais pas par exemple en local un champ 'mail' correct, et dans ta base en ligne ce champ nommé cette fois 'email' par exemple...?

Eléphant du PHP | 148 Messages

13 avr. 2005, 15:12

Non, j'ai créé strictement les même tables, j'ai déjà vérifié tout ça... les deux bases sont identiques, je n'y comprends rien du tout...snif...

J'arrive pas à trouver pourquoi en local ça marche, et pas en ligne.
Et hop !

Eléphant du PHP | 148 Messages

14 avr. 2005, 12:51

Salut tout le monde,

ça y'est, j'ai enfin trouvé le problème !! Youpi, \:D/ (il en aura fallu du temps...) m'enfin, mieux vaut tard que jamais.

En fait, merci @ ouckileaou (et aux autres aussi !) qui m'a mis sur la voie, il n'y avait pas de base sélectionnée, donc c'était normal.
(Pb résolu par un mysql_db_query("mabase",$marequete) )

Mais la question qui me Hante (bien souffler le H...) est la suivante :
j'avais fait une connexion à ma base via un petit fichier (cnn.php), et au début de mon script, j'avais fait un include (le code doit être un peu plus haut). Pouquoi faut-il encore préciser la base à utiliser. Mon cnn.php n'a-t-il pas fonctionné?

pour info, voici le code du cnn.php
<?php
$hostname_cnn = "monserveurmysql";
$database_cnn = "mabase";
$username_cnn = "monlogin_";
$password_cnn = "monpass";
$cnn = mysql_pconnect($hostname_cnn, $username_cnn, $password_cnn) or die(mysql_error());
?>
En attendant vos réponse avec curiosité...
(je mettrai résolu après vous avoir lu...)

Merci encore !! :D
Et hop !

Mammouth du PHP | 859 Messages

14 avr. 2005, 12:58

Pouquoi faut-il encore préciser la base à utiliser. Mon cnn.php n'a-t-il pas fonctionné?
Non, tu utilises juste la variable qui stocke le nom de ta base dans cnn.php ce qui donne un code dans ce genre :
mysql_db_query($variable_nom_base,$marequete);

Eléphant du PHP | 148 Messages

14 avr. 2005, 13:06

Est-ce qu'il ne fallait pas le préciser dans le
$cnn= mysql_pconnect($hostname_cnn, $username_cnn, $password_cnn) or die(mysql_error()); ?

et faire un truc du genre
$cnn= mysql_pconnect($hostname_cnn, $database_cnn, $username_cnn, $password_cnn) or die(mysql_error());
:?:
Et hop !

Mammouth du PHP | 859 Messages

14 avr. 2005, 13:10

cnn.php :
<?php
$hostname_cnn = "monserveurmysql";
$database_cnn = "mabase";
$username_cnn = "monlogin_";
$password_cnn = "monpass";
?>
connexion à la base :
mysql_pconnect($hostname_cnn,$username_cnn,$password_cnn) or die("Impossible de se connecter");
mysql_select_db($database_cnn) or die("Impossible de se connecter à la base de données");
Tout bêtement ;)

Eléphant du PHP | 148 Messages

14 avr. 2005, 13:34

Ok...

Merci pour tout, :D

et très certainement à bientôt :wink:
Et hop !