comparaisons d'un formulaire avec la base sql
merci pour votres indulgence car je debute seul dans mon coin avec mes bouquins et le net! j'essai de comparer les champs d'un formulaire avec des donnée d'une base sql et une erreur sbsiste que je ne parvient pas a corriger un oeuil averti me serais d'un grand secour!
voici mon code
<?php
$hote = 'localhost';
$user = 'root';
$pass = '';
$base = 'test';
$link = mysql_connect($hote,$user,$pass);
if (!$link)die('could not connect:'.mysql_error());
mysql_select_db($base);
if (isset($_POST['identifiant']) && isset($_POST['mot_de_passe']))
$sql = 'SELECT identifiant,mot_de_passe FROM inscription WHERE nom = '.$_POST['identifiant'].' AND '.$_POST['mot_de_passe'].'';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while ($data = mysql_fetch_array($req)) {
mysql_free_result ($req);
mysql_close ();
{
if ($data == $_POST['identifiant'] && $data == $_POST['mot_de_passe']) {
header ('location: test formulaire html.html');
}
else {
echo '<body onLoad="alert(\'mot de passe ou identifiant incorrect...\')">';
echo '<meta http-equiv="refresh" content="identification.html">';
}
}
?>
merci d'avance pour toutes les explication que vous voudrez bien me donner
cedcyr
Quelle est l'erreur ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
quelle est l'erreur! c'est justement ce que je me demande car quand j'effectue le test sur ma machine il me donne une erreur ligne 16 ce qui correspond a la ligne suivante
$sql = 'SELECT identifiant,mot_de_passe FROM inscription WHERE nom = '.$_POST['identifiant'].' AND '.$_POST['mot_de_passe'].'';
et donc la requette qui consiste a verifier si l'identifiant at le mot de passe saisi dans le formulaire sont présent dans ma base sql echout alors que le formulaire qui permet de les inscrire li fonctionne trés bien voila tous le problème !!
cedcyr
Grrr... tu vas finir sur ma collection de lamelles :D
J'ai modifié ton message pour que le code soit mieux présenté. Essaye de faire attention.
Je ne t'ai pas demandé la solution à ton problème, mais le message d'erreur que tu rencontrais. Si je copie-colle ton code, et que je le lance avec php -l, j'ai le message d'erreur suivant :
PHP Parse error: syntax error, unexpected $end in tmp/toto.php on line 41
Parse error: syntax error, unexpected $end in tmp/toto.php on line 41
Cette erreur est due à l'accolage qui traîne ligne 25 (il faut que tu reprennes les cours sur les structures de contrôle et les blocs).
Au fait, n'utilises pas ce code en production, il est bourré de trous de sécurité.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
merci beaucoup car j'avance pas a pas et ce genre de bétise ne saute pas au yeux quand a la securité je travaillerai ca un peut plus tard et j'en suis contient que le premier passant venue pourrai fracasser ce bout de code ! si je peut je vais abuser un peut , j'ai donc condensser mon code pour plus mettre des , ; ou autre en trop ce qui donne ceci :
<?php
if (isset($_POST['login']) && isset($_POST['pass']))
$hote = 'localhost';
$user = 'root';
$pass = '';
$base = 'test';
$link = mysql_connect($hote,$user,$pass);
if (!$link)die('could not connect:'.mysql_error());
mysql_select_db($base);
$sql = 'SELECT login,pass FROM inscription WHERE nom = '.$_POST['login'].' AND '.$_POST['pass'].'';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while ($data = mysql_fetch_array($req)) {
mysql_free_result ($req);
mysql_close ();
if ($data == $_POST['login'] && $data == $_POST['pass']) {
header ('location: test formulaire html.html');
}
else {
echo '<body onLoad="alert(\'mot de passe ou identifiant incorrect...\')">';
echo '<meta http-equiv="refresh" content="identification.html">';
}
}
?>
mais quand je le lance je reçois le message d'erreur suivant :Erreur SQL !
SELECT login,pass FROM inscription WHERE nom = che AND 123
Unknown column 'che' in 'where clause'
comme si php n'allait pas lire dans ma base alors que les données login (che) et pass (123) son bien présent dans ma table
et si j'enleve WHERE nom = '.$_POST['login'].' AND '.$_POST['pass'].' pour simplifier mon code l'erreur devient Warning: mysql_fetch_array(): 3 is not a valid MySQL result resource in C:\wamp\www\perso1\login.php on line 12 et ca je doit dire !!!
si tu as quelque explication car même en parcourant les cours je ne vois pas pourquoi le 3 du pass le bloc merci
cedcyr
Il faut entourer les chaines de caractères par des quotes lors des conditions en SQL.
Exemple :
<?php
$sql = "SELECT login,pass FROM inscription WHERE nom = '".mysql_real_escape_string($_POST['login'])."' AND '".mysql_real_escape_string($_POST['pass'])."'";
?>
(quand tu dis que tu travailleras la sécurité plus tard, crois moi, d'après mon expérience, c'est un truc que l'on ne fait jamais, car c'est barbant : si ce n'est pas fait au moment de l'écriture du code, ca ne sera jamais fait. Bref utilise au moins mysql_real_escape_string pour protéger tes requetes, c'est le minimum syndical pour éviter les injections).
Quant à l'erreur sur le mysql_fetch_array, c'est parce que tu fais un mysql_free_result ($req); en plein milieu du while.
Il est plus sage de libérer la mémoire une fois que tous les rows sont traités et non en plein milieu du traitement (de même, mysql_close est également à positionner après le while).
PS : pense à utiliser le BB-Code pour "balancer" ton code, il en sera beaucoup plus lisible.
je vais abuser encore un peut, aprés avoir corriger avec l'aide des cours et vos conseils la verrification de ma base se passe bien mais si les info transmises son incorrect les message d'erreur utilisateur ne saffiche pas il n'apparait qu'une page blache!
mon code:
<?php
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion')
{
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])))
{
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('test', $base);
$sql = 'SELECT count(*) FROM inscription WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
mysql_free_result($req);
mysql_close();
if ($data[0] == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: http://www.attelage-astuce.com/accueilnotice.html');
exit();
}
elseif ($data[0] == 0) {
$erreur = 'identifiant ou mot de passe incorrect.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
de plus j'ai constater que dans les formulaires au niveau des champs dans la value vous y mettiez du code php le probleme dans ce cas c'est que ce code apparait dans le champ de saisi
ex: identifiant : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
quel est l'interré et comment peut on cacher le php de la ligne de saisi
merci
cedcyr
finalement avec de la perseverance tous baigne ou persque les messages d'erreurs fonctionne mais je ne sais pas comment puis-je faire pour que les message destinné aux utilisateur saffiche sur la même page qe le formulaire plustôt que dans une page différente,voir même pouvoir choisir l'emplacement de l'affichage dans la page
cedcyr
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: