php fonction or

carmodelisme
Invité n'ayant pas de compte PHPfrance

13 juil. 2011, 10:41

bonjour

Je cherche à intégrer un OR dans une requête mais je n'y arrive pas. Je suis sous Mac. Voici la ligne qui me pose problème :

$sql = "SELECT * FROM table_name WHERE dossard = ' ".$_POST['dossard'] or nom = $_POST['nom']." '; ";

Merci de vos conseils

Eléphant du PHP | 275 Messages

13 juil. 2011, 11:02

Problème d'interface chaise clavier. Ton OR, c'est pas en php que tu le veux, c'est en sql.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

13 juil. 2011, 11:08

Bonjour, tu as une erreur de syntaxe. Voici la correction:
$sql = "SELECT * FROM table_name WHERE dossard = '" . $_POST['dossard'] . "' or nom = '" . $_POST['nom'] . "'; "; 
ça s'appelle la concaténation en PHP avec l'opérateur POINT (.) pour coller des chaines de caractères et des variables.

Il y a une autre façon sous PHP pour inclure des variables dans une chaine de caractère sans utiliser l'opérateur de concaténation (.) c'est en utilisant la fonction sprintf() comme ça:
$sql = sprintf("SELECT * FROM table_name WHERE dossard = '%s' or nom = '%s';" , $_POST['dossard'], $_POST['nom']);
Ici, la chaine SQL est écrite complètement avec des emplacement réservés aux variables par le symbole %s (qui veut dire : variable string ou texte)
le deuxième paramètre de la fonction sprintf() est la liste des variables à insérer dans la chaine donnée en premier selon l'ordre des symboles %s (pour un texte) ou %d (pour un numérique) dans notre cas on a listé les variables $_POST['dossard'], $_POST['nom'] respectivement.

Et tout ça n'a rien à voir ni avec Mac ni avec SQL. C'est de la pure programmation sous PHP.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

carmodelisme
Invité n'ayant pas de compte PHPfrance

13 juil. 2011, 11:39

Merci sadeq

Je débute en php, mysql. J'apprend petit à petit... Tes explication vont m'aider un peu plus...

Quant à Popy, d'après ta réponse, il a aussi un problème entre la chaise et le clavier et sa réponse acerbe n'apporte rien.

Eléphant du PHP | 275 Messages

13 juil. 2011, 13:21

Au contraire, ça veut dire que j'estime qu'avant de demander de l'aide, il faudrait se relire, si possible dans un éditeur proposant de la coloration syntaxique.

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

13 juil. 2011, 16:07

Au contraire, ça veut dire que j'estime qu'avant de demander de l'aide, il faudrait se relire, si possible dans un éditeur proposant de la coloration syntaxique.
Tu n'en restes pas moins sur le forum pour débutants.

C'est bien de lui faire remarquer qu'il ne s'agit pas un problème de php mais de syntaxe SQL, mais plutôt que de remettre en cause son niveau - sur un forum pour débutants -, tu ferais mieux de le guider vers la documentation ou mieux encore lui expliquer la syntaxe d'un "ou" en sql... (et je ne vois pas en quoi la coloration syntaxique pourrait l'aider à apprendre cette syntaxe)


@carmodelisme : Puisque ta question est résolue, je l'indique en ajoutant l'icône verte "Résolu" pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.

Tu peux réaliser cette opération toi-même en cliquant sur le bouton Image en haut à droite de la réponse qui te semble la plus pertinente, si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 2278 Messages

13 juil. 2011, 20:50

Approche différente :
mettre directement $_POST['dossard'] et $_POST['nom'] dans la requête sql suppose qu'on est certain qu'il y a bien quelque chose dans un des deux $_POST en question; sinon on aura une erreur mysql.
Mon approche serait plutôt de forcer des valeurs au cas où le $_POST ne serait pas satisfaisant, par exemple parce qu'on est arivé ici par erreur, ou qu'on a mal rempli le formulaire:
$dossard = isset($_POST['dossard']) ? $_POST['dossard'] : -1; // si dossard est un entier
$dossard = isset($_POST['dossard']) ? $_POST['dossard'] : "absent ; // si dossard est une chaine
$nom = isset($_POST['nom']) ? $_POST['nom'] : "absent";
$sql = "SELECT * FROM table_name WHERE dossard = $dossard or nom = '$nom'; "; // si dossard est un nombre
$sql = "SELECT * FROM table_name WHERE dossard = '$dossard' or nom = '$nom'; "; // si dossard est une chaine
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

15 juil. 2011, 01:16

Tu as raison Sirakawa, mais à ce moment là il faut éviter d'exécuter la requête en cas d'absence des valeurs du POST. Comme ça:
if (isset($_POST['dossard']) && !empty($_POST['dossard']) && isset($_POST['nom']) && !empty($_POST['nom'])) {
       $sql = sprintf("SELECT * FROM table_name WHERE dossard = '%s' or nom = '%s';" , $_POST['dossard'], $_POST['nom']);
       // suite de l'exécution de la requête
       // ...
}
else {
      echo "Données manquantes !";
}

--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène