EN DIRECT en ligne connexion / inscription
Connexion

Surnom/Pseudo
Mot de Passe :

[ Vous avez perdu votre mot de pass ? | Devenir membre ]

×

Utiliser un résultat vide sous PHP/MySQL

Aller à la page : 12  
CowcotLand topic RSS feed Surveiller les réponses de ce sujet
Misssardonik @
Saisonnier
Saisonnier

0 point

Inscrit le: 16 avril 2004
Messages: 769

Navigateur : n.c.

Hors ligne
Message Posté le: 01 novembre 2006 à 03:50  Lien permanent
Répondre en citant
Bonjour, ouais parce que cette section faut bien qu'elle serve un peu aussi, de temps en temps

En ce moment j'essaye un peu d'apprendre le PHP, et donc pour ce faire j'ai installé EasyPHP (qui intègre également MySQL).

Et donc le problème que je me pose est le suivant:

Disons que j'ai un utilisateur qui remplit un champ sur une page, et le contenu de ce champ doit être ajouté à une table de ma base. Ca je sais faire. Maintenant ce que je voudrais faire c'est ajouter ce champ SI un champ de même valeur n'a pas déja été ajouté, autrement dit la valeur n'existe pas déjà dans la table.

Exemple: j'ai une table "animaux" avec une seule clé "nom" (oui bon, c'est con, mais faisons simple). Là l'utilisateur rentre "vache" dans son formulaire, et donc "vache" se retrouve enregistré dans ma table. Et je voudrais que si "vache" est entré alors que "vache" est déjà dans la table, l'insertion soit ignorée (il ne pourrait y avoir qu'une seule occurence de chaque nom d'animal dans ma table).

Le seul truc auquel j'ai pensé pour faire ça est de faire (on suppose que $nom contient bien ce que l'utilisateur a tappé dans le forumlaire):

Code:
if (mysql_query("SELECT nom FROM animaux WHERE nom='$nom'") == null)
{
mysql_query("INSERT INTO animaux VALUES($nom)");
}


Ben ça, ça fonctionne pas, l'insertion est faite systématiquement Neutre

Je suppose qu'il s'agit d'une question de type, et que même quand la requête renvoit un résultat vide, ce n'est pas exactement du null.
Alors comment faire ?
Voir le profil de l'utilisateur Envoyer un message privé
Vanseb @
Cowcot Team
Cowcot Team

40333pts

Inscrit le: 09 novembre 2005
Age: 37
Messages: 8542

Navigateur : Opera

Hors ligne
Message Posté le: 01 novembre 2006 à 08:07  Lien permanent
Répondre en citant
J'ai arrêté SQL depuis longtemps, mais pourquoi ne pas insérer une valeur type null dans ton champs, et tu regardes si cette valeur est null ou autre Clin d'oeil
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur » Album Photos » Google Map
Misssardonik @
Saisonnier
Saisonnier

0 point

Inscrit le: 16 avril 2004
Messages: 769

Navigateur : n.c.

Hors ligne
Message Posté le: 01 novembre 2006 à 08:22  Lien permanent
Répondre en citant
hm... je ne comprends pas ce que tu veux dire, on mettra ça sur le compte de l'heure tardive, je reregarderai tout à l'heure.
Voir le profil de l'utilisateur Envoyer un message privé
Vanseb @
Cowcot Team
Cowcot Team

40333pts

Inscrit le: 09 novembre 2005
Age: 37
Messages: 8542

Navigateur : Opera

Hors ligne
Message Posté le: 01 novembre 2006 à 08:31  Lien permanent
Répondre en citant
Je refais, c'était pas clair.
Je me souviens plus comment marche null.
Mais si tu crées une valeur 0, qui serait == null dans ta tête, tu n'as qu'à chercher == 0

Il me semble pas qu'une clé vide soit une clé null.
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur » Album Photos » Google Map
beubeu @
Boss
Boss

12096pts

Inscrit le: 24 novembre 2003
Age: 47
Messages: 3409
Localisation: 2 chèvres...
Navigateur : n.c.

Hors ligne
Message Posté le: 01 novembre 2006 à 08:41  Lien permanent
Répondre en citant
Séb a vu juste, je crois que tu confonds null et rien

essaie :

Code:
if (!mysql_query("SELECT nom FROM animaux WHERE nom='$nom'") )
{
mysql_query("INSERT INTO animaux VALUES($nom)");
}


Un souci avec la modération? -> https://www.cowcotland.com/topic36431.html#649011
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur » Album Photos » Google Map
Misssardonik @
Saisonnier
Saisonnier

0 point

Inscrit le: 16 avril 2004
Messages: 769

Navigateur : n.c.

Hors ligne
Message Posté le: 02 novembre 2006 à 17:46  Lien permanent
Répondre en citant
Vanseb a écrit:
Je refais, c'était pas clair.
Je me souviens plus comment marche null.
Mais si tu crées une valeur 0, qui serait == null dans ta tête, tu n'as qu'à chercher == 0


Je vois ce que tu veux dire, mais ça ne s'applique pas ici; en effet je ne "crée" rien.
Je regarde dans ma table si ce que je veux insérer existe déja, et s'il existe déja je n'insère pas.


Vanseb a écrit:
Il me semble pas qu'une clé vide soit une clé null.


C'est bien ça mon problème. Comment traiter un résultat vide ?


beubeu a écrit:

essaie :

Code:
if (!mysql_query("SELECT nom FROM animaux WHERE nom='$nom'") )
{
mysql_query("INSERT INTO animaux VALUES($nom)");
}


Que signifie précisément ce point d'exclamation ?

Bon, sinon j'ai essayé, et l'insertion se fait toujours à chaque fois, que le nom existe déjà, ou pas Neutre


Dernière édition par Misssardonik le 02 novembre 2006 à 17:58; édité 1 fois
Voir le profil de l'utilisateur Envoyer un message privé
Vanseb @
Cowcot Team
Cowcot Team

40333pts

Inscrit le: 09 novembre 2005
Age: 37
Messages: 8542

Navigateur : Opera

Hors ligne
Message Posté le: 02 novembre 2006 à 17:55  Lien permanent
Répondre en citant
Tu prends le résultat opposé à ta requête, si je ne m'abuse.

/edit -> fais un echo, pour voir ce que ça donne, au cas où Clin d'oeil
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur » Album Photos » Google Map
Misssardonik @
Saisonnier
Saisonnier

0 point

Inscrit le: 16 avril 2004
Messages: 769

Navigateur : n.c.

Hors ligne
Message Posté le: 02 novembre 2006 à 18:11  Lien permanent
Répondre en citant
Vanseb a écrit:
Tu prends le résultat opposé à ta requête, si je ne m'abuse.


Oui en fait la question est mal posée. Je me demandais en fait comment on faisait pour évaluer une condition telle que mysql_query("SELECT nom FROM animaux WHERE nom='$nom'"). Ca doit valoir 1 ou 0 et ça ça me semble pas évident.

Mon hypothèse est que ça renvoit 1 s'il y a un résultat non-vide, et 0 sinon (et donc l'inverse avec un !). Auquel cas ça répond au sujet du topic. Me reste à trouver pourquoi ça ne fonctionne pas chez moi.


Vanseb a écrit:
/edit -> fais un echo, pour voir ce que ça donne, au cas où Clin d'oeil


Tu veux que je le fasse où, l'echo ? si c'est dans le if ne pense pas que ce soit nécessaire, puisqu'on voit directement sur la page si l'insertion a été faite, et donc comment le if a été traité.
Voir le profil de l'utilisateur Envoyer un message privé
Vanseb @
Cowcot Team
Cowcot Team

40333pts

Inscrit le: 09 novembre 2005
Age: 37
Messages: 8542

Navigateur : Opera

Hors ligne
Message Posté le: 02 novembre 2006 à 18:16  Lien permanent
Répondre en citant
Un echo avec la requête, tout simplement, pour en voir le résultat.
Plus je réfléchis, et plus je me dis que ta requête est étrange. Tu veux récupérer le nom des animaux en fonction de leur nom. Donc nom est égal à $nom !
Non ?

hein ?

/edit -> désolé, j'ai sorti la requête du contexte. Dès que je suis plus au travail, je réfléchis au problème...
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur » Album Photos » Google Map
Misssardonik @
Saisonnier
Saisonnier

0 point

Inscrit le: 16 avril 2004
Messages: 769

Navigateur : n.c.

Hors ligne
Message Posté le: 02 novembre 2006 à 18:31  Lien permanent
Répondre en citant
Vanseb a écrit:
Un echo avec la requête, tout simplement, pour en voir le résultat.


Ah oui, je comprends. Mais en fait on ne peut pas faire directement un echo sur le résultat d'une requête (puisque le résultat d'une requête n'est pas une simple chaine de caractères). Faut utiliser une fonction mysql quivabien pour mettre le résultat en forme dans une variable tableau.
Et pour répondre: ça n'affiche rien de visible.
Voir le profil de l'utilisateur Envoyer un message privé
Vanseb @
Cowcot Team
Cowcot Team

40333pts

Inscrit le: 09 novembre 2005
Age: 37
Messages: 8542

Navigateur : Opera

Hors ligne
Message Posté le: 02 novembre 2006 à 18:40  Lien permanent
Répondre en citant
Oui, tu mets ta requête dans une variable et tu fais fais un echo en PHP de cette variable :)

Code:
$sql = SELECT nom FROM animaux WHERE nom='$nom'
echo 'sql = ' . $sql
$requete = mysql_query ($sql)
echo 'requête = ' . $requete


J'ai vraiment du mal, je suis désolé.

/edit -> Mais pourquoi ne pas regarder si $nom est déjà présent dans la table, plutôt que l'inverse ?
/edit -> c'est la requête proposée par Benoît.... Je sors.
/edit -> tu peux extraire les clées NOM et les mettre dans un tableau et comparer avec ta variable $nom en cours M. Green Solution extrême je sais.
Y a pas if not en PHP ? Ou faut utiliser le ! obligatoirement ? D'ailleurs, faut pas l'utiliser avec une variable ???
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur » Album Photos » Google Map
Misssardonik @
Saisonnier
Saisonnier

0 point

Inscrit le: 16 avril 2004
Messages: 769

Navigateur : n.c.

Hors ligne
Message Posté le: 02 novembre 2006 à 19:27  Lien permanent
Répondre en citant
Vanseb a écrit:
Oui, tu mets ta requête dans une variable et tu fais fais un echo en PHP de cette variable :)


Le problème que j'évoquais ne se situe pas là. Ce que je voulais dire c'est que tu ne peux pas faire directement un echo pour afficher le résultat d'une requête. Dit autrement, "résultat de requête mySQL" n'est pas un type de données que la fonction echo sait traiter. Exemple avec ton exemple (que j'ai rendu un peu plus parsable en mettant des points-virgule M. Green ).

Code:

$sql = "SELECT nom FROM animaux WHERE nom='$nom'";
echo 'sql = ' . $sql;
$requete = mysql_query ($sql);
echo 'requête = ' . $requete;


Ca nous renvoit invariablement:

sql = SELECT nom FROM animaux WHERE nom='Hippopotame'requête = Resource id #3

echo ne sait ici pas comment afficher ce qu'on lui demande.

Par contre, en modifiant un peu en utilisant avec la fonction qui va bien pour rendre le résultat de la requête "compréhensible" par echo:

Code:
$sql = "SELECT nom FROM animaux WHERE nom='$nom'";
echo 'sql = ' . $sql;
$requete = mysql_query($sql);

while ($donnees = mysql_fetch_array($requete) )
{
echo $donnees['nom'];
}


La ça nous répond bien:

sql = SELECT nom FROM visiteurs WHERE nom='Hippopotame'

quand Hippopotame n'est pas dans la base. Rien de visible donc, j'ai bien l'impression qu'on n'est pas bien avancés :s

Citation:
J'ai vraiment du mal, je suis désolé.


C'est déja sympa d'essayer de m'aider :)

Vanseb a écrit:
/edit -> Mais pourquoi ne pas regarder si $nom est déjà présent dans la table, plutôt que l'inverse ?

Parce que c'est s'il est absent qu'on fait quelque chose (en l'occurence ici: l'insertion).
Mais de toutes façons à une inversion près c'est la même chose.

Vanseb a écrit:

/edit -> c'est la requête proposée par Benoît.... Je sors.


Je ne crois pas, justement (sous réserve que j'ai bien compris comment fonctionne la condition dans son if).

Citation:

/edit -> tu peux extraire les clées NOM et les mettre dans un tableau et comparer avec ta variable $nom en cours M. Green Solution extrême je sais.


Ca me semble possible, mais ça me semble aussi plutôt lourd.


Citation:
Y a pas if not en PHP ?


Ben, y'a le else M. Green.


Citation:
D'ailleurs, faut pas l'utiliser avec une variable ???


Pas compris la question :?
Voir le profil de l'utilisateur Envoyer un message privé
Vanseb @
Cowcot Team
Cowcot Team

40333pts

Inscrit le: 09 novembre 2005
Age: 37
Messages: 8542

Navigateur : Opera

Hors ligne
Message Posté le: 02 novembre 2006 à 19:34  Lien permanent
Répondre en citant
Mort de rire
J'avais oublié le mysql_fetch_array !!! Duel Je le mérite.

...

La dernière question renvoie au !, il me semblait qu'on devait l'utiliser avec une variable et non une requête SQL.

Pour le coup de regarder s'il est présent. Le résultat ne sera pas le même puisqu'on va chercher qqch de présent, donc aucun soucis avec le "vide", ou le "rien".

Pour le if not, c'est, à mes yeux, différent du else, puisque tu peux faire uen requête simple où tu ne prendras pas la réponse, aors que le else t'oblige à faire une bonne requête dès le début, et surtout à prendre dans le then (qui n'est pas présent).

Chui clair ou non ? M. Green

Mais... Est-ce que tu codes en bleu ? parce que si c'est pas bleu...

/edit -> c'est la quille ! Je répondrai de chez moi Clin d'oeil
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur » Album Photos » Google Map
Misssardonik @
Saisonnier
Saisonnier

0 point

Inscrit le: 16 avril 2004
Messages: 769

Navigateur : n.c.

Hors ligne
Message Posté le: 02 novembre 2006 à 19:51  Lien permanent
Répondre en citant
Vanseb a écrit:

La dernière question renvoie au !, il me semblait qu'on devait l'utiliser avec une variable et non une requête SQL.


Une condition tu veux dire (un truc évaluable à 1 ou 0) ? Si c'est ça que tu veux dire, alors:

Dans mon premier post c'était bien le cas, puisque je regardais si le résultat d'une requête était égal à null (donc si égal à null >> on renvoit 1, le contenu de if est exécuté, si différent de null on renvoit 0, le contenu du if est ignoré, on va au else s'il y en a un). Bon il s'avère que ce n'était pas à null qu'il fallait comparer, visiblement M. Green Mais c'est un autre problème (et l'objet du topic, accessoirement M. Green ).


Vanseb a écrit:
Pour le coup de regarder s'il est présent. Le résultat ne sera pas le même puisqu'on va chercher qqch de présent, donc aucun soucis avec le "vide", ou le "rien".


Je vois ce que tu veux dire, et en fait j'y avais pensé et même déjà tenté, mais je n'arrive à rien de concluant (ce qui ne veut pas dire que c'est une mauvaise idée, juste que je ne sais pas l'écrire). J'avais essayé ça il me semble:

Code:
if (mysql_query("SELECT nom FROM animaux WHERE nom='$nom'") == $nom)
{}
else
{
mysql_query("INSERT INTO animaux VALUES($nom)");
}

Mais ça fonctionne pas. Ca insère systématiquement, là aussi.






Vanseb a écrit:

Pour le if not, c'est, à mes yeux, différent du else, puisque tu peux faire uen requête simple où tu ne prendras pas la réponse, aors que le else t'oblige à faire une bonne requête dès le début, et surtout à prendre dans le then (qui n'est pas présent).

Chui clair ou non ? M. Green


Euh non, je ne comprends pas ce que tu pourrais faire avec un if not que tu ne puisses pas faire avec un else...pour moi c'est exactement la même chose...
Voir le profil de l'utilisateur Envoyer un message privé
beubeu @
Boss
Boss

12096pts

Inscrit le: 24 novembre 2003
Age: 47
Messages: 3409
Localisation: 2 chèvres...
Navigateur : n.c.

Hors ligne
Message Posté le: 02 novembre 2006 à 20:07  Lien permanent
Répondre en citant
essaie ça :

Code:
if (mysql_query("SELECT nom FROM animaux WHERE nom='$nom'") == "")
{
mysql_query("INSERT INTO animaux VALUES($nom)");
}


Un souci avec la modération? -> https://www.cowcotland.com/topic36431.html#649011
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur » Album Photos » Google Map
Aller à la page : 12  
Sauter vers: 
Surveiller les réponses de ce sujet CowcotLand topic RSS feed  

Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sujets similaires

Sujet Auteur Forum Réponses Posté le
Pas de nouveau message Présentation Grippe-Sous Grippe-Sous Présentation 0 26 août 2021 à 17:43
Pas de nouveau message Estimation ryzen 2600 , b450m mortar ( sous garantie ) DizzyG Estimations 2 10 juin 2021 à 23:42
Pas de nouveau message PC qui freeze aléatoirement (mais souvent) sous Ubuntu GeraldDeRabouillet Divers Hardware 21 12 mai 2021 à 11:56
Pas de nouveau message Quels slots M.2 et quels slots PCIe utiliser ? Spouny Divers Hardware 2 23 avril 2021 à 17:09
Pas de nouveau message Sous-titres Yoshikan Amélioration du site 4 28 janvier 2021 à 13:36