else et if

numix
Invité n'ayant pas de compte PHPfrance

09 août 2011, 11:56

Bonjour à tous,

Je début en php !
j'ai fait une page pour mon site avec une fonction qui verifie si un mail existe déja dan ma table.
j'ai fait le code ci-dessous pour que si le mail n'existe pas je l'enregistre sinon, je met un petit message.

le probleme avec mon code, c'est que lorque le mail n'existe pas, il est bien enregistré dans ma base mais que j'ai un autre enregistrement vide qui se met aussi dans ma base.
et lorsque le mail existe, j'ai un enregistrement vide dans ma base.

Je n'arrive pas à voir d'ou vient le probleme ???

Merci de votre aide.

<?php

if ($totalRows_verifmail == 0)
{
$email = $_POST["email"] ;
//création de la requête SQL:
$sql = "INSERT INTO clients (email) VALUES ( '$email') " ;

//exécution de la requête SQL:
$requete = mysql_query($sql, $conect) or die( mysql_error() ) ; }
else { echo 'mon texte'; } ?>

ViPHP
ViPHP | 2577 Messages

09 août 2011, 12:06

Bonjour,

Mon impression, c'est que tu passes 2 fois dans la partie de code que tu montres : 1 fois avec l'email et 1 fois sans.

Pour le vérifier, ajoutes un message après l'insert.

numix
Invité n'ayant pas de compte PHPfrance

09 août 2011, 12:19

Oui apparament, lorsque l'email existe deja dans la base il me fait tout de meme un enregistrement sans la variable email. pourtant j'ai bien mon message du ELSE qui s'affiche.

ViPHP
xTG
ViPHP | 7331 Messages

09 août 2011, 13:05

C'est logiquement impossible (et par là j'entends une certitude numérique), vérifies les ouvertures et fermetures d'accolades.

ViPHP
ViPHP | 4039 Messages

09 août 2011, 13:27

Je début en php !
Alors n'hésite pas à indenter ton code et à utiliser un éditeur qui offre la coloration syntaxique (style notepad++) :wink:

<?php 

if ($totalRows_verifmail == 0) 
    {
    $email     = $_POST["email"] ;
    //création de la requête SQL:
    $sql = "INSERT  INTO clients (email)  VALUES ( '$email') " ;
    //exécution de la requête SQL:
    $requete = mysql_query($sql, $conect) or die( mysql_error() ) ; 
    }
else 
    { 
    echo 'mon texte'; 
    } 
?>
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

numix
Invité n'ayant pas de compte PHPfrance

09 août 2011, 13:34

Les accolade me paraissent pourtant correctement positionné !

Bon, je met mon code complet et si une âme charitable veut bien prendre le temps de l'étudier pour me dire d'ou vient le probleme :

<?php require_once('Connections/csonjob.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$colname_verifmail = "-1";
if (isset($_POST['email'])) {
  $colname_verifmail = $_POST['email'];
}
mysql_select_db($database_csonjob, $csonjob);
$query_verifmail = sprintf("SELECT email FROM clients WHERE email = %s", GetSQLValueString($colname_verifmail, "text"));
$verifmail = mysql_query($query_verifmail, $csonjob) or die(mysql_error());
$row_verifmail = mysql_fetch_assoc($verifmail);
$totalRows_verifmail = mysql_num_rows($verifmail);
?>
<?php include 'header.php'; ?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
      <td valign="top" class="textebleu">
        <table width="100%" border="0" cellspacing="0" cellpadding="20">
          <tr>
            <td width="50%" align="center" valign="top"><?php // Show if recordset empty
			if ($totalRows_verifmail == 0) 
			{ // Show if recordset empty 
			//récupération des valeurs du champ email
  $email     = $_POST["email"] ;
  //création de la requête SQL:
  $sql = "INSERT  INTO clients (email)
            VALUES ( '$email') " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $csonjob) or die( mysql_error() ) ;
			?>
              <table width="100%" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td height="15" background="images/tab2_hg.png"></td>
                  <td height="15" background="images/tab2_h.png"></td>
                  <td height="15" background="images/tab2_hd.png"></td>
                  </tr>
                <tr>
                  <td width="15" background="images/tab2_g.png"></td>
                  <td align="center" valign="top"><p class="titrebleu"><img src="images/dequelpro.png" width="317" height="60" /></p>
                    <p class="titrebleu"><span class="textebleu">Un Email contenant vos identifiants de connexion<br />
                      vient de vous être envoyé à l'adresse suivante : </span><?php echo  $_POST['email'];  ?></p>
                    <p class="titrebleu"><span class="textebleu"><br />
                      </span></p></td>
                  <td width="15" background="images/tab2_d.png"></td>
                  </tr>
                <tr>
                  <td height="15" background="images/tab2_bg.png"></td>
                  <td height="15" background="images/tab2_b.png"></td>
                  <td height="15" background="images/tab2_bd.png"></td>
                  </tr>
                </table>
              <?php } else { // Show if recordset empty ?>
              <table width="100%" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td height="15" background="images/tab2_hg.png"></td>
                  <td height="15" background="images/tab2_h.png"></td>
                  <td height="15" background="images/tab2_hd.png"></td>
                  </tr>
                <tr>
                  <td width="15" background="images/tab2_g.png"></td>
                  <td align="center" valign="top"><p class="titrebleu"><img src="images/dequelpro.png" width="317" height="60" /></p>
                    <p class="titrebleu"><span class="textebleu">Cette adresse existe déja dans notre base de données !<br />
                      <br />
                      Un Email de rappel contenant vos identifiants de connexion<br />
                      vient de vous être envoyé à l'adresse suivante :</span> <?php echo  $_POST['email'];  ?></p>
                    <p class="titrebleu"><br />
                      </p></td>
                  <td width="15" background="images/tab2_d.png"></td>
                  </tr>
                <tr>
                  <td height="15" background="images/tab2_bg.png"></td>
                  <td height="15" background="images/tab2_b.png"></td>
                  <td height="15" background="images/tab2_bd.png"></td>
                  </tr>
                </table><?php } ?>
              <p>&nbsp;</p></td>
            </tr>
        </table>
        <p class="titrebleu"><br />
        </p>
<p class="titrebleu">&nbsp;</p>
<p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>&nbsp;</p></td>
      <td>&nbsp;</td>
    </tr>
</table>
<?php
mysql_free_result($verifmail);
?>
<?php include 'footer.php'; ?>

Mammouth du PHP | 2278 Messages

09 août 2011, 14:33

Modifie ainsi cette partie du code:
$query_verifmail = sprintf("SELECT email FROM clients WHERE email = %s", GetSQLValueString($colname_verifmail, "text"));
print "<br>requete =>$query_verifmail<=="; // pour s'assurer de ce qu'on demande
$verifmail = mysql_query($query_verifmail, $csonjob) or die(mysql_error());
$row_verifmail = mysql_fetch_assoc($verifmail);
$totalRows_verifmail = mysql_num_rows($verifmail);
print "nb lignes==>$totalRows_verifmail<=="; 
et on cherchera ...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

numix
Invité n'ayant pas de compte PHPfrance

09 août 2011, 19:10

Salut !

en modifiant le code comme tu me le demandes, j'obtiens le message suivant sur la page :
requete =>SELECT email FROM clients WHERE email = '[email protected]'<==nb lignes==>0<==

et j'ai toujours un enregistrement vide en supplément de l'enregistrement avec l'e-mail.

Si tu as une solution, je suis preneur.

Merci.

numix
Invité n'ayant pas de compte PHPfrance

09 août 2011, 20:12

bon, j'ai testé sur mon hébergement et le résultat est le même.
si vous avez un script à me poser,c'est avec plaisir que je l'essayerait.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 août 2011, 20:59

salut,

ça sens l'utilisation d'un truc que l'on ne comprend pas ?

GetSQLValueString ça vient d'où ? : pour info faudrais que l'auteur la mette a jour car php6 n'est pas prévue pour demain ^^

ta requete peut être crée simplement :
$sql = 'select count(email) as nbmail from clients where email =\''.mysql_real_escape_string($_POST['email']).'\';';

avec cette requete tu va avoir le nombre d'email correspondant à ce qui a été rentré dans le champ input email du formulaire.

la requete s'execute "normalement"
<?php
$sql = 'select count(email) as nbmail from clients where email =\''.mysql_real_escape_string($_POST['email']).'\';';
$ret = mysql_query($sql);
if ($ret === false) echo '<p>Erreur SQL : '.mysql_error().'<br />'.$sql.'</p>';
else {
$data = mysql_fetch_assoc($ret);
if ($data['nbmail'] === 0) '
// OK
}
else {
// KO
}
?>
commence par tester juste le formulaire et ça dans un fichier php voir ce que ça donne (vire tous le reste pour les tests :) )

@+
Il en faut peu pour être heureux ......

numix
Invité n'ayant pas de compte PHPfrance

10 août 2011, 07:37

merci pour ce bout de code, je l'essaye ce matin et je vous tiens au courant.

Invité
Invité n'ayant pas de compte PHPfrance

10 août 2011, 08:37

bonjour,
j'ai essayé le bout de code que tu m'a donné ci-dessus, mais il me retourne une erreur.

Voilà le code que j'ai mis sur ma page :
<?php
include 'Connections/conect.php';
$sql = 'select count(email) as nbmail from clients where email =\''.mysql_real_escape_string($_POST['email']).'\';';
$ret = mysql_query($sql);echo $ret;
if ($ret === false) echo '<p>Erreur SQL : '.mysql_error().'<br />'.$sql.'</p>';
else {
$data = mysql_fetch_assoc($ret);
if ($data['nbmail'] === 0) {
// OK
}
else {
// KO
}
?>
Et voici le code erreur retourné :

Parse error: syntax error, unexpected $end in /home/csonjobn/public_html/recinscription.php on line 14

aurais-je encore commis une erreur ?

Mammouth du PHP | 19672 Messages

10 août 2011, 09:08

Si tu mettais une indentation dans ton code, tu aurais vu tout de suite le problème, regarde bien :
<?php
include 'Connections/conect.php';
$sql = 'select count(email) as nbmail from clients where email =\''.mysql_real_escape_string($_POST['email']).'\';';
$ret = mysql_query($sql);echo $ret;
if ($ret === false)
{
    echo '<p>Erreur SQL : '.mysql_error().'<br />'.$sql.'</p>';
}
else
{
    $data = mysql_fetch_assoc($ret);
    if ($data['nbmail'] === 0)
    {
        // OK
    }
    else
    {
        // KO
    }
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

numix
Invité n'ayant pas de compte PHPfrance

10 août 2011, 10:33

c'est bon, j'y suis arrivé.
je vous remercie tous pour votre aide qui m'a été très précieuse.

À bientôt !