Livre d'or & envoi mail

Eléphant du PHP | 172 Messages

01 déc. 2005, 00:04

Bonsoir !!

Encore moi :D

Je suis de nouveau confronté à quelques problèmes.

J'ai fais un formulaire qui fonctionne presque parfaitement avec deux options un envoi par mail, et un affichage comme livre d'or, seuls bémols :

- Lors de l'envoi du formulaire pour le faire afficher en dessous, il m'affiche une page blanche, comment faire pour qu'il revienne à la page actualisée du nouveau message.

- Lors de l'essai de l"envoi par mail, il m'affiche carrément un message d'erreur :

Warning: mysql_close(): no MySQL-Link resource supplied in / .... on line 182

Je ne comprends pas puisque je ferme bien ma connection à la fin de mon code php.

Voici le code :
<?php 

if(!empty ($_POST['nom']) and !empty($_POST['mail']) and !empty($_POST['texte']))
{ 
	  if (isset($REMOTE_ADDR))
	  { 
	  		$ip = $REMOTE_ADDR;
	  }
	  else
	  {
	  		$ip = "";
	  }
	  $date = date("d/m/Y");
	  $heure = date("H:i");
	  $mail = htmlentities($_POST['mail']);
	  $nom = htmlentities($_POST['nom']);
	  $message = $_POST['texte'];
	
	  // vérification de l'e-mail 
	  $atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]';    // caractères autorisés avant l'arobase
	  $domain = '([a-z]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)
	  											
	  $regex = '^' . $atom . '+' .    // Une ou plusieurs fois les caractères autorisés avant l'arobase
	  '(\.' . $atom . '+)*' .         // Suivis par zéro point ou plus
	                                  // séparés par des caractères autorisés avant l'arobase
	  '@' .                           // Suivis d'un arobase
	  '(' . $domain . '{1,63}\.)+' .  // Suivis par 1 à 63 caractères autorisés pour le nom de domaine
	                                  // séparés par des points
	  $domain . '{2,63}$';            // Suivi de 2 à 63 caractères autorisés pour le nom de domaine
	  
	  // test de l'adresse e-mail
	  if (eregi($regex, $mail))
	  {
	  		$avis = htmlentities($_POST['texte']);
			  if($_POST['butMessage'] == 'avis')
  			{
  					include('../inclusion/loupe.inc');
  					mysql_connect($base, $user, $passe);
  					mysql_select_db('base');
  					mysql_query("INSERT INTO commentaires VALUES('', '$date', '$heure', '$nom', '$ip', '$avis')");
			  }
			  else
				{
						$to = 'mon mail';
						$sujet = 'message de'.$nom;				
						mail($to, $sujet, $mail);
				}
		}
  	else
    {		
    		echo "<p>L'adresse e-mail $mail n'est pas valide</p>";
    }
} 
else 
{


?>
  
// affichage du formulaire

<?php

		include('../inclusion/loupe.inc');
		mysql_connect($base, $user, $passe);
		mysql_select_db('ma base');
		$listage = mysql_query("SELECT * FROM commentaires");
		while($affichage = mysql_fetch_array($listage))
		{		
				echo'
				<div class="messageInter">
					<div class="hautMessage"><p class="hautMessageD"></p>
					<span>Message posté par '.$affichage["nom"].'</span>
					<span> Le '.$affichage["date"].' à '.$affichage["heure"].'</span>
					</div>
					<p class="messageCorps">'
					.$affichage["message"].
					'</p>
				</div>';
		}		
}

mysql_close();	

?>
Ps: j'avais aperçu sur le forum une autre façon de vérifier une adresse mail, mais je ne trouve plus le lien, si vous savez où est ce topic, merci :P

Mammouth du PHP | 1885 Messages

01 déc. 2005, 00:20

Pourquoi as-tu plusieurs connexions au serveur MySQL?

De plus, en regardant la documentation, la fonction mysql_close() prend un argument facultatif qui correspond à la ressource que l'on désire fermer. Dans ton cas, il faudrait dire quelle connexion tu désires fermer ou alors réduire à les connexions à une.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 172 Messages

01 déc. 2005, 00:35

Bah en fait, je l'ai réouverte une seconde fois, car j'avais un message me disant que mes variables de connection n'étaient pas définies.

Donc, j'ai remis l'include et réouvert la connection.
Quant à te dire pourquoi j'ai été obligé de le faire deux fois, je ne sais pas ...

Invité
Invité n'ayant pas de compte PHPfrance

01 déc. 2005, 01:04

En fait si j'enlève la deuxième connection, voici les messages :

Warning: mysql_query(): A link to the server could not be established in ... on line 164

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ... on line 165

Warning: mysql_close(): no MySQL-Link resource supplied in ... on line 180

164 : mysql_connect($base, $user, $passe);
165 : mysql_select_db('base');
180 : }

Par contre, j'avais oublié, dans ma partie formulaire, je réouvre une balise php pour faire juste un echo d'une variable.
Ca peut avoir une incidence ?

Eléphant du PHP | 172 Messages

01 déc. 2005, 21:56

Bonsoir !!

J'ai résolu mon 1er problème en faisant une redirection, mais j'ai toujours celui du message d'erreur.

Je reçois bien le mail envoyé de la page, mais il y a toujours ce message d'erreur indiqué en dessous.
$connect = mysql_connect($base, $user, $passe);
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in ... on line 89

Ligne 89 qui est bien sûr :
mysql_close($connect);
Voilà :?

j'ai ensuite encore un truc qui ne fonctionne pas, les sauts de lignes dans mon textarea.
J'ai fais :
$message = $_POST['texte'];
$message = nl2br($message);
Mais lors de l'enregistrement dans ma base, les sauts de lignes sont respectés, mais pas d'affichage de <br>.
Par contre j'ai essayé par mail, et là les <br> sont bien envoyés.

<edit>
Résolu !!
J'avais fais une petite erreur dans mon code :oops:
Me reste plus que le message d'erreur.
</edit>

Merci, si vous avez une soluce.

Eléphant du PHP | 172 Messages

02 déc. 2005, 07:23

C'est résolu, enfin :D

On m'a conseillé de fermer mysql juste après ma requête et en faisant ça, je n'ai plus de message d'erreur.