Page 1 sur 1
Comparer deux inputs
Posté : 04 sept. 2006, 18:58
par lacfab
Salut,
Pour faire simple ... j'ai un script d'ajouts de produits. J'ai deux champs de prix : "prix" qui contient le prix des produits, et "promo" qui content le prix de promotion (et qui vaut sur la page publique le prix normal barré avec le prix promo en rouge à côté). Je voudrais qu'à l'ajout ou à la modification (dans la partie de gestion) que si mon prix promo est plus élevé que le prix normal, ça me fasse une erreur (alert par exemple, ou message rouge) m'obligeant à rectifier avant d'enregistrer ...
j'ai recherché sur le forum, sur le net, essayé divers trus mais je n'y arrive pas ...
Merci d'avance de vos lumières

Posté : 04 sept. 2006, 19:21
par Ryle
En javascript il te suffit de comparer les deux champs, d'afficher un message d'alerte et de bloquer l'envoi du formulaire s'il y a une erreur.
te permet de récupérer la valeur d'un champ
En php, tu récupères tes données et tu fais le même test. En cas d'erreur, au lieu d'enregistrer les données, tu réaffiches ta page avec les données erronées et un message d'erreur
Posté : 04 sept. 2006, 19:22
par lacfab
Euh oui j'ai déjà essayé en javascript ... personne n'aurais la fonction complète à me montrer ? Je sais j'abuse mais je suis sur du php depuis ce matin et là je calcule plus rien
Merchiiiiiiiiiiiiiiii
Posté : 04 sept. 2006, 20:28
par zeus
euh, si un champ est identique à un autre, on peut dire qu'un champ est égal à un autre donc que
champ1 = champ2
Rien de bien plus compliqué

Posté : 05 sept. 2006, 16:53
par lacfab
Bon voilà j'ai ce que je voulais ... il me fait un message d'erreur si le prix promo est plus élevé que le prix normal. Par contre si dans mon textarea j'ai un ' alors ça me plante tout au retour de la page (si on fait une erreur ...)
Comment faire pour que le ' passe dans l'url sans problème ?
Merci
Code : Tout sélectionner
case "modifier":
if ($AH!="ok"){
// Requête pour trouver les coordonnées correspondantes au id
$requete = mysql_query("select * FROM shop_produits where id_prod='$id_prod'") or die ('ERREUR 2<br>'. mysql_error());
// Sorties des coordonnées
$id_prod = mysql_result($requete,0,"id_prod");
$souscat_prod = mysql_result($requete,0,"souscat_prod");
$activ_prod = mysql_result($requete,0,"activ_prod");
$ref_prod = mysql_result($requete,0,"ref_prod");
$titre_prod = mysql_result($requete,0,"titre_prod");
$detail_prod = mysql_result($requete,0,"detail_prod");
$prix_prod = mysql_result($requete,0,"prix_prod");
$promo_prod = mysql_result($requete,0,"promo_prod");
}
// Affichage
echo "<form action='produits_ajout.php?page=2&mode=modifier2&id_prod=$id_prod' method=post>
<center><table border=0 class=texte>
<tr><td align=right valign=top>Référence</font></td><td><input type='text' name='ref_prod' value='$ref_prod' size=15></td></tr>
<tr><td align=right valign=top>Titre</font></td><td><input type='text' name='titre_prod' value='$titre_prod' size=30></td></tr>
<tr><td align=right valign=top>Détail </td><td><textarea name='detail_prod' cols=50 rows=4 value=''>$detail_prod</textarea></td></tr>
<tr><td align=right valign=top>Prix</font></td><td><input type='text' name='prix_prod' value='$prix_prod' size=4 onKeypress='if(event.keyCode < 45 || event.keyCode > 57) event.returnValue = false; if(event.which < 45 || event.which > 57) return false;'>€</td></tr>
<tr><td align=right valign=top>Prix promo</font></td><td><input type='text' name='promo_prod' value='$promo_prod' size=4 onKeypress='if(event.keyCode < 45 || event.keyCode > 57) event.returnValue = false; if(event.which < 45 || event.which > 57) return false;'>€</td></tr>
<tr><td colspan=2 valign=top align=center>
<input type='submit' value='Modifier ce produit'></td></tr>
</table></center></form>";
break;
case "modifier2":
$soustraction = $promo_prod - $prix_prod;
if ($soustraction >= "0.0") {
echo "<center><font color=red><b>ERREUR</b><br>Le prix de promotion est plus élevé que le prix normal.<br>
Recommencez la saisie.</font><br><br>
<a href='produits_ajout.php?page=2&mode=modifier&AH=ok&id_prod=$id_prod&ref_prod=$ref_prod&titre_prod=$titre_prod&detail_prod=$detail_prod&prix_prod=$prix_prod&promo_prod=$promo_prod'>Retour à la page de modification</a>";
}
else{
$resultat = mysql_query("update shop_produits set souscat_prod='$souscat_prod', ref_prod='$ref_prod', titre_prod='$titre_prod', detail_prod='$detail_prod', prix_prod='$prix_prod', promo_prod='$promo_prod' where id_prod='$id_prod'") or die ('ERREUR 3<br>'. mysql_error());
echo "<center>Les changements ont été pris en compte<p><a href='produits_ajout.php' target='b'>Retour aux produits</a></p></center><BR>";
}
break;
Posté : 05 sept. 2006, 16:59
par Ryle
Il te faut protéger les chaines que tu récupères en mettant des antislash devant les apostrophes (voire les guillemets)... Tu peux pour cela utiliser les fonctions addslashes(), htmlspecialchars(), mysql_escape_string() ...
A toi de voire celle qui te convient le mieux et les paramètres à passer selon ce que tu veux faire de la chaine

Posté : 05 sept. 2006, 17:23
par lacfab
super on y est presque !
Alors maintenant il convertit bien les apostrophes mais si j'ai une erreur de différence entre les prix ... au retour il affiche ça :
c\\\'est super cool
alors que le texte d'origine vous vous en doutez bien c'est
c'est super cool
voici mon code :
Code : Tout sélectionner
case "modifier":
if ($AH!="ok"){
// Requête pour trouver les coordonnées correspondantes au id
$requete = mysql_query("select * FROM shop_produits where id_prod='$id_prod'") or die ('ERREUR 2<br>'. mysql_error());
// Sorties des coordonnées
$id_prod = mysql_result($requete,0,"id_prod");
$souscat_prod = mysql_result($requete,0,"souscat_prod");
$activ_prod = mysql_result($requete,0,"activ_prod");
$ref_prod = mysql_result($requete,0,"ref_prod");
$titre_prod = mysql_result($requete,0,"titre_prod");
$detail_prod = mysql_result($requete,0,"detail_prod");
$prix_prod = mysql_result($requete,0,"prix_prod");
$promo_prod = mysql_result($requete,0,"promo_prod");
}
// Affichage
echo "<form action='produits_ajout.php?page=2&mode=modifier2&id_prod=$id_prod' method=post>
<center><table border=0 class=texte>
<tr><td align=right valign=top>Référence</font></td><td><input type='text' name='ref_prod' value='$ref_prod' size=15></td></tr>
<tr><td align=right valign=top>Titre</font></td><td><input type='text' name='titre_prod' value='$titre_prod' size=30></td></tr>
<tr><td align=right valign=top>Détail </td><td><textarea name='detail_prod' cols=50 rows=4 value=''>$detail_prod</textarea></td></tr>
<tr><td align=right valign=top>Prix</font></td><td><input type='text' name='prix_prod' value='$prix_prod' size=4></td></tr>
<tr><td align=right valign=top>Prix promo</font></td><td><input type='text' name='promo_prod' value='$promo_prod' size=4></td></tr>
<tr><td colspan=2 valign=top align=center>
<input type='submit' value='Modifier ce produit'></td></tr>
</table></center></form>";
break;
case "modifier2":
$soustraction = $promo_prod - $prix_prod;
$detail_prod = HTMLentities($detail_prod,ENT_QUOTES);
if ($soustraction >= "0.0") {
echo "<center><font color=red><b>ERREUR</b><br>Le prix de promotion est plus élevé que le prix normal.<br>
Recommencez la saisie.</font><br><br>
<a href='produits_ajout.php?page=2&mode=modifier&AH=ok&id_prod=$id_prod&ref_prod=$ref_prod&titre_prod=$titre_prod&detail_prod=$detail_prod&prix_prod=$prix_prod&promo_prod=$promo_prod'>Retour à la page de modification</a>";
}
else{
$resultat = mysql_query("update shop_produits set souscat_prod='$souscat_prod', ref_prod='$ref_prod', titre_prod='$titre_prod', detail_prod='$detail_prod', prix_prod='$prix_prod', promo_prod='$promo_prod' where id_prod='$id_prod'") or die ('ERREUR 3<br>'. mysql_error());
echo "<center>Les changements ont été pris en compte<p><a href='produits_ajout.php' target='b'>Retour aux produits</a></p></center><BR>";
}
break;
Posté : 12 sept. 2006, 13:09
par lacfab
Salut
Toujours pas d'idée sur ma dernière question ?

Posté : 12 sept. 2006, 14:42
par Ryle
Quand tu envois des variables au serveur, par défaut php va protéger les apostrophes avec des "\", ce qui est plus simple pour les utiliser dans du sql (cf la config de ton serveur)
Toutefois, si tu veux les réafficher, cela n'est pas commode du tout. Tu peux regarder du côté de fonction comme stripslashes() pour les retirer

Posté : 12 sept. 2006, 16:35
par lacfab
Alors j'ai mis ceci :
Code : Tout sélectionner
$detail_prod = stripslashes(HTMLentities($detail_prod,ENT_QUOTES));
et maintenant il m'affiche :
c\'est super cool
Déjà deux slash de moins mais il en reste malheureusement encore un ... grrr
Posté : 12 sept. 2006, 17:17
par lacfab
c bon j'ai trouvé j'ai mis stripslashes dans mon textarea également

Merci tout plein