Correction php MySQL

Fermé
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 7 juil. 2011 à 22:51
 le père - 9 juil. 2011 à 16:37
Bonjour à tous !

Voilà, j'ai bidulé un script php et fais appel à des fonctions MySQL pour régler mon problème. Je suis arrivé presque mais je suis bloqué et j'ai besoin de votre aide pour finaliser ma page svp :

Voici ma table :
CREATE TABLE IF NOT EXISTS 'Key_Computrace' (
'id' int(10) NOT NULL AUTO_INCREMENT,
'ExistKey' varchar(29) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
'VerifKey' varchar(29) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO 'Key_Computrace' ('id', 'ExistKey', 'VerifKey') VALUES
(1,'3UNLD-3GSYQ-XDWAW-EUWZS-NZN2E','3UNLD-3GSYQ-XDWAW-EUWZS-NZN2E'),
(2,'TWDHG-7BG7J-OFM60-HPJ8L-D2EYI','TWDHG-7BG7J-OFM60-HPJ8L-D2EYI'),
(3,'PA0B8-I5PMC-JT90S-0B9PO-01VGP','0');


Voici ma page en intégrale :
<?php
if (isset($_POST["Valid"])) {
$Valid =  $_POST["Valid"];

mysql_connect("127.0.0.1", "root", "");
mysql_select_db("computracekey");  

/* 1- ExistKey = VerifKey */
$req=mysql_query("select * from key_computrace where ExistKey='$Valid' and VerifKey='$Valid'"); 
$nb= mysql_num_rows($req);
if ( $nb > 0 )
header ('Valide.php'); //Ouvre la page si conditions OK

/* 2- If Key not ExistKey then Refresh */
$req=mysql_query("select * from key_computrace where ExistKey<>'$Valid'"); 
$nb= mysql_num_rows($req);
if ( $nb > 0 )
header ('KeyProduct.php'); //Reouvre la page en cours

/* 3- If Key = ExistKey and VerifKey = 0 then Redirect to Verif.php */
$req=mysql_query("select * from key_computrace where ExistKey<>'$Valid' and VerifKey='0'"); 
$nb= mysql_num_rows($req);
if ( $nb > 0 )
header ('Valide.php');
Puis insert dans la base la clé inscrite dans $Valid dans le ValidKey

}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HightSecurity</title>
<style type="text/css">
<!--
body,td,th 			{font-family: Tahoma;font-size: 13px;}
body 				{margin: 0px;}
a.Verif				{background:url(BoutonVerifier.png) no-repeat; width:89px; height:25px; display:block;}
a.Verif:hover		{background-position: bottom center;}
-->
</style>
<script type="text/javascript">
function formatTexte(chaine) {
var p1 = chaine.substring(0,5);
var p2 = chaine.substring(5,10);
var p3 = chaine.substring(10,15);
var p4 = chaine.substring(15,20);
var p5 = chaine.substring(20,25);
document.getElementById('Valid').value = p1 + '-' + p2 + '-' + p3 + '-' + p4 + '-' + p5;
}
</script>
</head>

<body>
<table width="800" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="592" align="center" valign="middle" background="Ecran.jpg">
<form id="form1" name="form1" method="post" action="">
<table width="300" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td height="25" align="center" valign="middle" background="ZoneTexte.png">
    <input name="Valid" type="text" id="Valid" maxlength="30" style="border:none; width:98%; font-family:Consolas; font-size:17px;" onKeyUp="javascript:this.value=this.value.toUpperCase();" onChange="javascript:formatTexte(this.value.toUpperCase());" onFocus="this.value=''"/></td>
  </tr>
  <tr>
    <td align="center">&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><a href="#" class="Verif" onclick="document.getElementById('form1').submit();"></a></td>
  </tr>
</table>
</form>
</td>
</tr>
</table>
</body>
</html>

Mon problème se trouves sur 3 points qui sont les conditions MySQL du code :

1- Si la clé existe dans ExistKey et VerifKey alors la page se rafraîchit. (rien ne se passe)
2- Si la clé n'existe pas dans ExistKey, alors la page se rafraîchit. (rien ne se passe)
3- Si la clé entrée existe dans ExistKey et VerifKey = 0 alors il l'ajoute dans VerifKey et il est redirigé vers Valide.php

J'ai essayé de faire de mon mieux mais j'y arrives pas.
Les conditions 1 à 1 passaient mais il y a encore des erreurs.
Pouvez-vous m'aider svp à les corriger ?

A voir également:

5 réponses

Bonjour,

Je n'ai pas tout regardé en détail, mais je vois déjà un gros malaise au niveau des redirections.

header ('Valide.php'); : 'Valide.php' n'est pas un header http correct. Il faudrait faire header ('Location: Valide.php');

De plus, cette instruction ne provoque pas l'arrêt du script. Donc, comme tu n'as pas de exit() derrière, les autres tests sont effectués et éventuellement d'autres instructions 'header' sont exécutées. Le navigateur de ton visiteur recevra plusieurs "Location: ", je ne sais pas comment il réagira
Il faudrait donc faire (je ne donne que le premier) :
if ( $nb > 0 ) { 
  header ('Location: Valide.php'); //Ouvre la page si conditions OK 
  exit(); 
}
0
JoJoeyM Messages postés 60 Date d'inscription vendredi 18 mars 2011 Statut Membre Dernière intervention 8 juillet 2011 5
8 juil. 2011 à 17:14
Bonjour,

En passant, ton script est vulnérable à l'injection SQL. Il faut que tu protèges ta variable $valid. Plus d'info: https://fr.wikipedia.org/wiki/Injection_SQL
0
C'est tout à fait vrai, mais bon courage, tu peux poster cette remarque à 95% des fils de ce forum qui traitent de BDD. Il y a longtemps que j'ai baissé les bras.
0
JoJoeyM Messages postés 60 Date d'inscription vendredi 18 mars 2011 Statut Membre Dernière intervention 8 juillet 2011 5
8 juil. 2011 à 17:36
C'est un vrai fléau ces SQLi. J'espère qu'ils mettent pas l'adresse de leur site ;-)
0
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
8 juil. 2011 à 18:55
Merci à tous les deux.

Alors voici la modification :
<?php
if (isset($_POST["Valid"])) {$Valid =  $_POST["Valid"];

mysql_connect("127.0.0.1", "root", ""); mysql_select_db("computracekey");  

$req=mysql_query("select * from key_computrace where ExistKey='$Valid' and VerifKey='$Valid'"); // ExistKey = 1 | VerifKey = 1 = NO
$nb= mysql_num_rows($req); if ( $nb > 0 ) {header ('Location: KeyProduct.php'); }

$req=mysql_query("select * from key_computrace where ExistKey<>'$Valid'");  					// ExistKey = 0 | VerifKey = 0 = NO
$nb= mysql_num_rows($req); if ( $nb > 0 ) {header ('Location: KeyProduct.php'); }

$req=mysql_query("select * from key_computrace where ExistKey<>'$Valid' and VerifKey='0'");  	// ExistKey = 0 | VerifKey = 0 = NO
$nb= mysql_num_rows($req); if ( $nb > 0 ) {header ('Location: KeyProduct.php'); }

$req=mysql_query("select * from key_computrace where ExistKey='$Valid' and VerifKey='0'");  	// ExistKey = 1 | VerifKey = 0 = YES
$nb= mysql_num_rows($req); if ( $nb > 0 ) {header ('Location: Validite.php'); }
//Puis insert dans la base la clé inscrite dans $Valid dans le ValidKey
}
?>

Lorsque je met
exit();
à chaque condition, il ne fonctionne pas. J'ai essayé de l'enlever et il fonctionne. Je voudrais savoir si c'est normal.
Aussi, lorsque les
ExistKey = 1 | VerifKey = 0 = YES
, comment je peux ajouter $Valid dans la table ?

Merci encore pour votre aide !
0
Bonjour

Ce n'est pas normal que ça ne marche pas avec exit(). Ou alors, c'est que la page que tu nous montres est elle-même KeyProduct.php, mais alors je ne vois pas l'intérêt de refaire une redirection.
Qu'est-ce qui ne fonctionne pas quand tu ajoutes le exit() ? S'il te plaît, chaque fois que tu dis qu'il y a quelque chose qui ne va pas, décris exactement quoi.
Dans ton premier script, il y avait une redirection vers Valide.php qui me semblait assez logique; c'est devenu KeyProduct.php. Je ne comprends pas pourquoi.

Enfin, pour mettre à jour ta dernière clé, la syntaxe serait (à mettre DANS le if)
$ligne=mysql_fetch_array($req); // pour récupérer enregistrement avec Validkey=0
$requete="UPDATE key_computrace SET Verifkey =ExistKey WHERE id=$ligne[id]";
mysql_query($req) or die (mysql_error());
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
9 juil. 2011 à 10:33
Bonjour,

Effectivement, ma page est KeyProduct.php
Pardonne moi, je suis tellement nouveau en php que je me perd encore même dans mes explications.

Voilà par fini ce qui en est du code :
<?php
if (isset($_POST["Valid"])) {$Valid =  $_POST["Valid"];

mysql_connect("127.0.0.1", "root", ""); mysql_select_db("Key_Computrace"); 

$delai=1;
$url='http://mondomaine.com/KeyProduct.php';

$req=mysql_query("select * from Key_Computrace where ExistKey='$Valid' and VerifKey='$Valid'");
$nb=mysql_num_rows($req); if ( $nb > 0 ) {header("Refresh: $delai;url=$url"); }

$req=mysql_query("select * from Key_Computrace where ExistKey<>'$Valid'"); 
$nb=mysql_num_rows($req); if ( $nb > 0 ) {header("Refresh: $delai;url=$url"); }

$req=mysql_query("select * from Key_Computrace where ExistKey<>'$Valid' and VerifKey='0'");
$nb=mysql_num_rows($req); if ( $nb > 0 ) {header("Refresh: $delai;url=$url"); }

$req=mysql_query("select * from Key_Computrace where ExistKey='$Valid' and VerifKey='0'");
$nb=mysql_num_rows($req); if ( $nb > 0 ){
$req=mysql_query("INSERT INTO Key_Computrace (VerifKey, Nom, Email, Vente) VALUES ('$Valid','$Nom','$Email','$Vente')");  
header ('Location: Validite.php'); }
}
?>

Pour la vérification des requettes, il fonctionne, mais lorsqu'il arrive à ajouter dans la table les enregistrements, là il "saute", pourtant il vérifie bien
$req=mysql_query("select * from Key_Computrace where ExistKey='$Valid' and VerifKey='0'");

Je suis perdu je te promet !
0
Je ne comprends toujours pas ce que tu dis

là il "saute" Qu'est-ce que ça veut dire ? Ton PC se met à faire des bonds ?

pourtant il vérifie bien
$req=mysql_query("select * from Key_Computrace where ExistKey='$Valid' and VerifKey='0'");
Qu'est-ce que ça veut dire ? Une ligne de code PHP ne se vérifie pas. Elle s'exécute ou ne s'exécute pas, Elle produit une erreur ou non, la requête retourne un résultat ou pas.. Il y a 36 interprétations possible. Et qui est ce "il" qui "vérifie bien" ?

D'autre part, je t'ai expliqué au début pourquoi il fallait mettre exit. Visiblement tu n'en tiens pas compte. Et si tu dis que ça ne marche pas avec, moi je te répète que ça devrait. Si ça ne marche pas avec, c'est qu'il y a un autre problème et ça n'est pas en le négligeant que ton script marchera mieux.
0