Savoir si une donnée existe dans une table

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Savoir si une donnée existe dans une table

par Ryle » 18 avr. 2006, 14:48

lol !!

Excellent ! :)

par omsi » 18 avr. 2006, 14:36

Merci beaucoup, chui laid ^^

Ma pénitence :
Notre PHP,
Qui est au site web
Que ton language soit codé,
Que ton reigne reste
Que tes fonctions marchent sur IE comme sur Firefox,
Pardonne nous nos "parse error",
Ou nous coderons en ASP,
Juste pour payer.
Alors ne nous soumet pas a cette dérision.
Delivre nous du HTMaL
Car c'est a toi qu'appartiennent
Internet, le Web et Google,
Pour des siècles et des siècles.
Amen();
Notre PHP,
Qui est au site web
Que ton language soit codé,
Que ton reigne reste
Que tes fonctions marchent sur IE comme sur Firefox,
Pardonne nous nos "parse error",
Ou nous coderons en ASP,
Juste pour payer.
Alors ne nous soumet pas a cette dérision.
Delivre nous du HTMaL
Car c'est a toi qu'appartiennent
Internet, le Web et Google,
Pour des siècles et des siècles.
Amen();
Je vous salue mysql,
Pleine de table,
Phpmyadmin est avec toi,
Vous êtres bénie entre toutes les BDD,
Et $sql le fruit de nos efforts est beni.
Sainte mysql mère de nos entrée,
Aidez nous pauvres codeurs,
Et $sql le fruit de nos efforts est beni.
Trop du mal a me rappeler de l'original ouf :P

par Ryle » 18 avr. 2006, 14:20

Utilise [ php ] au lieu de [ code ] pour mettre en couleur ton code php, c'est plus facile à relire :)

Bon pas grave, j'viens de trouver la requête qui n'allait pas ;)
$sql = "SELECT * FROM  WHERE pseudo='".$_SESSION['pseudo']."'";
Non mais franchement, les noms des tables dans les requêtes sql, c'est fait pour les nintendogs ?! ;)

Pour la peine, tu me feras deux "notre php" et un "je vous salut mysql" et tu me mettras la liste des champs que tu récupères à la place de l'étoile ! (ce qui de toute façon est un bon réflexe à prendre :))

par oms i » 18 avr. 2006, 13:57

Désolé pour le titre modo :oops:

Bon bin sinon ca marche toujours pas :D

J'en susi a me demander si l'erreur va bien de cette requete

regardez plutot
Erreur de syntaxe près de 'WHERE pseudo='Admin'' à la ligne 1
Et bien evidemment le code que j'ai
<?php
//Ne pas oublier de mettre le session_start()
session_start();

include('header.php');
require('config.inc.php');

function accents_replace($string)
			{
			$Caracs = array("(" => " ", ")" => " ", "$" => " ", "<" =>
           " ", ">" => " ", "<" => " ", "&" => " ", "*" => " ", "!" =>
           " ", "#" => " ", "'" => " ", """ => " ");
               
           $string  = strtr("$string", $Caracs);
           
           return $string;
           }

//Ensuite on vérifie que la variable $_SESSION['logged'] existe et vaut bien true.
if (isset($_SESSION['logged']) && $_SESSION['logged'] == true)
{

	mysql_connect($host,$username,$password);
	mysql_select_db($bdd_name);
			
	$sql = "SELECT * FROM  WHERE pseudo='".$_SESSION['pseudo']."'";
	$req = mysql_query($sql) or die(mysql_error());
	$data = mysql_fetch_assoc($req);
	
	$team = $data['team'];

	if ($team == "Fils de Midgard" )
	{
		$pseudo=$_SESSION['pseudo'];
		$pseudo=strtolower($pseudo);
		$general=$_POST['general'];
		$attaque=$_POST['attaque'];
		$defense=$_POST['defense'];

		$general2=accents_replace($general);
		$attaque2=accents_replace($attaque);
		$defense2=accents_replace($defense);

		if($general2 == $general AND $attaque2 == $attaque AND $defense2 == $defense)
		{
			$structure = mysql_query("SELECT * FROM classement WHERE pseudo='".$pseudo."'");
			$row = mysql_num_rows($structure);
			function pseudo_exist($pseudo) 
			{
				//Tant qu'on est pas sûr que le pseudo n'existe pas dans la base, on part du fait qu'il peut exister
				$pseudo_exist = TRUE;
				//Construction de la requete
				$str_requete = "SELECT * FROM classement WHERE pseudo='".$pseudo."'";
				//Execution de la requete
				$o_result = mysql_query($str_requete) or die(mysql_error());
				//Si la requete a fonctionnée ET si il le pseudo n'existe pas
				if (mysql_num_rows($o_result) == 0 ) 
				{
					$pseudo_exist = TRUE;
				} 
				else 
				{ //La requete a échouée OU si le pseudo existe déjà
					$pseudo_exist = FALSE;
				}
				return $pseudo_exist;
			}

			if(!$general OR !$attaque OR !$defense)
			{
				echo '<center><br><br><br>Vous n\'avez pas rempli toutes les parties.<br><br><a href="javascript:history.back()">Retour</a></center>';
			}
			elseif (pseudo_exist($pseudo) != TRUE)
			{
				mysql_query("UPDATE classement SET general='".$general."', attaque='".$attaque."', defense='".$defense."' WHERE pseudo='".$pseudo."'");		
				echo '<center><br><br><br>C\'est ok!<br><br><a href="classement.php?b=1" target="centre">Retour</a></center>';
			}
			else
			{
				mysql_query("INSERT INTO classement ( pseudo, general, defense, attaque )VALUES ('$pseudo','$general','$defense','$attaque')");
				echo"<center><br><br><br>C'est ok!<br><br><a href="classement.php?b=1" target="centre">Retour</a></center>";
			}
		}
		else
		{
			echo"<center><br><br><br>Il y a des caractères interdits.<br><br><a href="javascript:history.back()">Retour</a></center>";
		}
	}
	else
	{
		echo ' Vous n\'êtes pas autorisés a aller ici!';
	}
}
else
{
   echo 'Erreur : vous devez être connecté pour accéder à cette page !';
}
include('footer.htm');
?>

par Ryle » 18 avr. 2006, 12:23

lol !! j'aime beaucoup l'image du coup de clavier qui part tout seul ! :)

Pis ne t'en fais pas, je le prenais pas comme une critique, je disais que j'adhérais à ta façon de l'écrire même si je n'avais pas pris la peine de le faire dans mon premier message :)

Bon.. à part ça... il vient ce tag résolu ?! ;)

par zeus » 18 avr. 2006, 11:42

Je me suis contenté de reprendre son code et de signaler ce qui n'allait pas, j'ai pas dit que la façon de faire était bien ;) En cas d'erreur le die va nous renvoyer une valeur probablement considérée comme supérieure à 0 (pis quand bien même, sinon elle irait dans le else)
Mais je ne critiquais pas, j'essayais juste d'apporter ma pierre :oops:
Je suis également partant pour la décomposition des choses de manière claire :) Par contre quitte à la décomposer, je remplacerais le SELECT * par un SELECT count(*) qui retournera 1 ou 0 selon que l'enregistrement soit trouvé ou non, et évitera de ramener inutilement les données de l'enregistrement :)
Vu l'utilisation, je suis plus partisant du COUNT que du mysql_num_rows() pour la simple raison que mysql stocke cette données dans la table est cette requete est donc quasi instantannée
Pis j'en profite pour pinailler un peu, si le pseudo existe, ta fonction "pseudo_exist" renvoit "FALSE" et "TRUE" quand il n'existe pas :P
euh ... non mais oh, c'est pas zuste :oops:
Je nettoyais mon clavier, le coup est parti tout seul ;)

par Ryle » 18 avr. 2006, 11:19

Je me suis contenté de reprendre son code et de signaler ce qui n'allait pas, j'ai pas dit que la façon de faire était bien ;) En cas d'erreur le die va nous renvoyer une valeur probablement considérée comme supérieure à 0 (pis quand bien même, sinon elle irait dans le else)

Je suis également partant pour la décomposition des choses de manière claire :) Par contre quitte à la décomposer, je remplacerais le SELECT * par un SELECT count(*) qui retournera 1 ou 0 selon que l'enregistrement soit trouvé ou non, et évitera de ramener inutilement les données de l'enregistrement :)

Pis j'en profite pour pinailler un peu, si le pseudo existe, ta fonction "pseudo_exist" renvoit "FALSE" et "TRUE" quand il n'existe pas :P

par zeus » 18 avr. 2006, 10:33

modération : omsi, je te demanderais de faire attention lorsque tu ouvre un sujet : ton titre était presque illisible. Je l'ai modifié pour toi mais pense-y la prochaine fois.

@Ryle : je ne suis pas sûr que ce code soit très stable en cas d'échec de la requete ;)
elseif( mysql_num_rows(mysql_query("SELECT * FROM classement WHERE pseudo='$pseudo'") or die(mysql_error())) > 0)
Je suis plutôt partisant de la séquenciation des actions :
function pseudo_exist($pseudo) {
  //Tant qu'on est pas sûr que le pseudo n'existe pas dans la base, on part du fait qu'il peut exister 
  $pseudo_exist = TRUE;
  //Construction de la requete
  $str_requete = "SELECT * FROM classement WHERE pseudo='".$pseudo."'";
  //Execution de la requete
  $o_result = mysql_query($str_requete) or die(mysql_error());
  //Si la requete a fonctionnée ET si il le pseudo n'existe pas
  if (mysql_num_rows($o_result) == 0 ) {
    $pseudo_exist = TRUE;
  } else { //La requete a échouée OU si le pseudo existe déjà
    $pseudo_exist = FALSE;
  }

  return $pseudo_exist;
}

if (...) {
  ...
} elseif(pseudo_exist($pseudo)) {
  ..
}

par Ryle » 18 avr. 2006, 10:15

Si on s'en réfère la documentation, la méthode mysql_num_rows() prend pour argument la ressource de résultat qui vient d'être évaluée. Ce résultat vient de l'appel à la fonction mysql_query().

Toi tu lui passes le résultat de la méthode mysql_fetch_assoc() qui est un tableau (ce qui non seulement ne fonctionne pas, mais en l'occurence ne sert à rien ;))
elseif( mysql_num_rows(mysql_query("SELECT * FROM classement WHERE pseudo='$pseudo'") or die(mysql_error())) > 0)

Savoir si une donnée existe dans une table

par omsi » 17 avr. 2006, 23:40

Alors je vous expose tout d'abord les faits.

V'la mon code :
<?php
//Ne pas oublier de mettre le session_start()
session_start();

include('header.php');
require('config.inc.php');

function accents_replace($string)
{
    $Caracs = array("(" => " ", ")" => " ", "$" => " ", "<" => " ", 
                    ">" => " ", "<" => " ", "&" => " ", "*" => " ", 
                    "!" => " ", "#" => " ", "'" => " ", "\"" => " ");

    $string  = strtr("$string", $Caracs);

    return $string;
}

//Ensuite on vérifie que la variable $_SESSION['logged'] existe et vaut bien true.
if (isset($_SESSION['logged']) && $_SESSION['logged'] == true)
{

    mysql_connect($host,$username,$password);
    mysql_select_db($bdd_name);

    $sql = "SELECT * FROM  WHERE pseudo='".$_SESSION['pseudo']."'";
    $req = mysql_query($sql) or die(mysql_error());
    $data = mysql_fetch_assoc($req);

    $team = $data['team'];

    if ($team == "Fils de Midgard" )
    {
        $pseudo=$_SESSION['pseudo'];
        $pseudo=strtolower($pseudo);
        $general=$_POST['general'];
        $attaque=$_POST['attaque'];
        $defense=$_POST['defense'];

        $general2=accents_replace($general);
        $attaque2=accents_replace($attaque);
        $defense2=accents_replace($defense);

        if($general2 == $general AND $attaque2 == $attaque AND $defense2 == $defense)
        {
            if(!$general OR !$attaque OR !$defense)
            {
                echo '<center><br><br><br>Vous n\'avez pas rempli toutes les parties.<br><br><a href=\"javascript:history.back()\">Retour</a></center>';
            }
            elseif( mysql_num_rows(mysql_fetch_assoc(mysql_query("SELECT * FROM classement WHERE pseudo='".$pseudo."'") or die(mysql_error()))) > 0)
            {
                mysql_query("UPDATE classement SET general='$general' WHERE pseudo='$pseudo'");
                mysql_query("UPDATE classement SET attaque='$attaque' WHERE pseudo='$pseudo'");
                mysql_query("UPDATE classement SET defense='$defense' WHERE pseudo='$pseudo'");

                echo '<center><br><br><br>C\'est ok!<br><br><a href=\"classement.php?b=1\" target=\"centre\">Retour</a></center>';
            }
            else
            {
                mysql_query("INSERT INTO classement ( pseudo, general, defense, attaque )VALUES ('$pseudo','$general','$defense','$attaque')");
                echo"<center><br><br><br>C'est ok!<br><br><a href=\"classement.php?b=1\" target=\"centre\">Retour</a></center>";
            }
        }
        else
        {
            echo"<center><br><br><br>Il y a des caractères interdits.<br><br><a href=\"javascript:history.back()\">Retour</a></center>";
        }
    }
    else
    {
        echo ' Vous n\'êtes pas autorisés a aller ici!';
    }
}
else
{
    echo 'Erreur : vous devez être connecté pour accéder à cette page !';
}
include('footer.htm');
?>
Vla la ligne qui pose probleme :
<?php
//...
                        elseif( mysql_num_rows(mysql_fetch_assoc(mysql_query("SELECT * FROM classement WHERE pseudo='".$pseudo."'") or die(mysql_error()))) > 0)
                        {
                                mysql_query("UPDATE classement SET general='$general' WHERE pseudo='$pseudo'");
                                mysql_query("UPDATE classement SET attaque='$attaque' WHERE pseudo='$pseudo'");
                                mysql_query("UPDATE classement SET defense='$defense' WHERE pseudo='$pseudo'");
                               
                                echo '<center><br><br><br>C\'est ok!<br><br><a href=\"classement.php?b=1\" target=\"centre\">Retour</a></center>';
                        }
//...
?>

Il faudrait que le else veuille dire : "Si ce pseudo est deja dans la BDD, alors on modifie le truc" (et ensutie le else si il y est pas)

Seulement la methode que j'ai essayée ne marche pas, je fais comment?

Merci de votre réponse