Php et mysql dans une fonction javascript
en cherchant sur internet je suis finalement tombé sur un script qui correspond assez a ce que je cherchai( pour une page web ou les champs de saisie apparaissent automatiquement ), mais il me reste un soucis , il faut inclure dedans une recherche dans la base de données pour vérifier que la référence introduite existe bien :
si oui = afficher les informations qui correspondent a l'article ( désignation, couleur ...)
si non = faire apparaitre un message d'erreur
et ceci après chaque référence saisie il faudrait avoir la possibilité de changer ou d'annuler une référence déjà saisie .
bref , voile le code , ça serait vraiment très gentil si vous pouviez merci
<html>
<head>
<title>Document sans nom</title>
<script language="javascript">
<!--
function create_champ(i)
{
var i2 = i + 1;
document.getElementById('input_'+i).innerHTML = '<div id="champs_'+i+'"><table border="0"><tr><td>Produit '+i+'</td><td> :</td><td><input type="text" name="Produit_'+i+'" size="15"></td><td> Taille'+i+' </td><td>:</td><td><input name="Taille_'+i+'" type="text" size="7"/></td></tr></table></div></span>';
document.getElementById('input_'+i).innerHTML += (i <= 10) ? '<span id="input_'+i2+'"><input class="input2" type="button" onClick="javascript:create_champ('+i2+')" value="VALIDER"></span>' : '';
}
-->
</script>
</head>
<body>
<form name="toto">
<table border="0"><tr><td>
<div id="champs_1">
<div align="left"> Produit 1</td><td> :</td><td>
<input name="Produit_1" type="text" size="15"/></td><td>
Taille 1 </td><td>:</td><td>
<input name="taille_1" type="text"size="7"/></td></tr></table>
</div>
</div>
<div align="left"> <span id="input_2">
<input name="button" type="button" class="input2" onClick="javascript:create_champ(2)" value="VALIDER">
</span></div>
</form>
</body>
</html>
j'ai pensé a inclure du php dans la fonction qui fait que lorsqu'elle est appelé pour faire apparaitre un nouveau champ vérifie si la référence deja saisie est exact , mais cela ne marche pas , il y' a rien qui s'affiche .
Configuration: Windows XP Firefox 2.0.0.13
29 réponses
Vérification dynamique d'une référence saisie et affichage des informations associées (désignation, couleur) après interroge en base de données, avec gestion des erreurs et possibilité de modifier ou annuler une référence. Plusieurs réponses préconisent d'utiliser une variable de session pour conserver les références saisies et leurs détails afin d'éviter leur perte lors des rechargements de page. D'autres proposent d'ajouter une requête asynchrone via XMLHttpRequest ou fetch pour vérifier la référence en arrière-plan et afficher immédiatement les résultats ou le message d'erreur sans recharger. En cas de progression, certains évoquent l'utilisation d'un tableau côté client et d'objets JSON pour stocker les détails et faciliter l'incrémentation ou la suppression des références sans perturber l'affichage existant.
-
Désole si je pose ma question avec du retard ( examens obligent :) mais il y a un problème avec foreach qui est que lorsque j'affiche la page au début étant donné qu'il n y a encore rien de saisie
Warning: Invalid argument supplied for foreach() in C:\wamp\www\tests\references.php on line 170
foreach( $_SESSION['achats'] as $achats ) { echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['ref'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['taille'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['qte'] .'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['designation'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['prix'].'</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; } echo "\t" , '</table>' , "\r\n";
ça me met et ça disparait juste après avoir saisie ma première référence , tu aurais pas une idée sur un moyen d'eviter cela ? merci-
Contributeursalut,
pardon pour le delais, je ne traine plus autant qu'avant sur le forum…
je suppose que c'est parce que ta variable de session vaut soit null, soit est une chaine de caractère.
essaie de tester l'existence de la variable :if( isset( $_SESSION['achats'] ) ) { foreach( $_SESSION['achats'] as $achats ) { echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['ref'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['taille'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['qte'] .'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['designation'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['prix'].'</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; } echo "\t" , '</table>' , "\r\n"; }
ou si c'est bien un tableau :if( is_array( $_SESSION['achats'] ) ) { foreach( $_SESSION['achats'] as $achats ) { echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['ref'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['taille'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['qte'] .'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['designation'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['prix'].'</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; } echo "\t" , '</table>' , "\r\n"; }
à plus
-
@DalidaSalut, je voulais te dire merci pour ton aide , j'ai réussi ma soutenance et mon projet a été validé avec la mention très bien et ceci est en grande partie grâce a toi . Encore merci
-
Contributeur@duxittosalut,
BRAVO !!!
\o/
suis content que tu aies réussi et fier si j'ai pu t'y aider !
bon courage pour la suite !
-;o)
-
-
Contributeurah ba vi !!!
comme je ne teste rien et que ce n'est pas mon code je ne vois pas les évidences…
enlève ça :// je suppose que $donnees contient toutes les infos // à propos de l'article sélectionné // il suffit d'insérer la ligne avant les autres echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['ref'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['taille'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['qte'] .'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['designation'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['prix'] .'</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n";
-
Contributeursalut,
surfement, l'info est pas ajoutée à '$_SESSION['achats']'…$_SESSION['achats'][] = array( 'ref' => $donnees['ref'] , 'qte' => $donnees['qte'] , 'taille' => $donnees['taille'] , 'designation' => $donnees['designation'] );
-
exactement !! ça marche super mais il y a juste un truc la même ligne apparait deux fois , c'est a dire lorsque par exemple je choisi trois articles au tableau il y en a 4 , les trois que j'ai chois plus le dernier enregistré deux fois. ça vient de la boucle tu pense ?et pour le truc de l'input tu as une idée ? et 10000000000000000000 merci
-
-
oui bien sur le voila
<!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=iso-8859-1" /> <title>Client.html</title> <script language="Javascript1.2" type="text/javascript"> <!-- function codeTouche(evenement) { for (prop in evenement) { if(prop == 'which') return(evenement.which); } return(evenement.keyCode); } function scanTouche(evenement) { var reCarSpeciaux = /[\x00\x08\x0D]/; var reCarValides = /\d/; var codeDecimal = codeTouche(evenement); var car = String.fromCharCode(codeDecimal); var autorisation = reCarValides.test(car) || reCarSpeciaux.test(car); return autorisation; } --> </script><?php session_start(); mysql_connect('localhost','root') or die(mysql_error()); mysql_select_db('applicatif') or die(mysql_error()); if(isset($_POST) &&!empty($_POST['reference']) ) { $ref = $_POST['reference']; } $sql = "select * from produit where ref='".$ref."' " ; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $donnees = mysql_fetch_array($req); //voila la partie qui pose probleme $_SESSION['achats'][] = array('ref' => $_POST['reference'],'qte' => $_POST['qte'],'taille'=>$_POST['taille']); echo "<br>"; $i = 0; echo "\t" , '<table border=1 cellspacing=0 cellpadding=0 bordercolor=black>' , "\r\n"; echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td width=100> Références</td>' , "\r\n"; echo "\t\t\t" , '<td width=50> Taille</td>' , "\r\n"; echo "\t\t\t" , '<td width=50> Quantité</td>' , "\r\n"; echo "\t\t\t" , '<td width=60> Désignation</td>' , "\r\n"; echo "\t\t\t" , '<td width=60> Prix</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; // je suppose que $donnees contient toutes les infos // à propos de l'article sélectionné // il suffit d'insérer la ligne avant les autres echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['ref'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['taille'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['qte'] .'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['designation'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['prix'] .'</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; foreach( $_SESSION['achats'] as $achats ) { echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['ref'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['taille'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['qte'] .'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['designation'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['prix'].'</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; } echo "\t" , '</table>' , "\r\n"; echo "<a href=teste.php?action=session_unset();>Détruire les sessions</a>"; ?> <form action="teste.php" method="post"> Référence : <input type="text" name="reference" onKeyPress="return scanTouche(event)"><br> Taille : <input type="text" name="taille" onKeyPress="return scanTouche(event)" ><br> Quantite : <input type="text" name="qte" value="1" onKeyPress="return scanTouche(event)"><br> <input type="submit" name="submit" value="Validez"> </form>
Dans le tableau une fois affiché , on peut mettre la quantite dans un input du genre
<input type="text" value= "<?php echo $donnees['prenom']; ?>" name="prenom"; >
pour que la quantite soit dans un champ de sorte que pour l'annuler il suffit de mettre 0 . -
Contributeuryep, je comprends mieux le problème et suis d'accord avec le diagnostique.
peux-tu nous donner le bout de code qui se charge d'affecter les valeurs à la variable de session, stp ?
-
Ce n'est pas normal , je viens de vérifier et je me suis rendu compte que la désignation n'est pas enregistré dans la session ,il n y a que son affichage et non pas l'enregistrement => c'est donc normal qu'elle disparait a chaque fois , reste a savoir comment arranger ça . je planche dessus mais je pense que ça vient de la déclaration de la variable session non ?
-
Contributeursalut,
ça va venir !!!
je te propose deux petites optimisations : remplacer les guillemets par des apostrophes et ajouter des tabulations et des retours à la ligne à la sortie HTML (pour le moment ça ne doit pas être très lisible !).<?php echo "\t" , '<table border=1 cellspacing=0 cellpadding=0 bordercolor=black>' , "\r\n"; echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td width=100> Références</td>' , "\r\n"; echo "\t\t\t" , '<td width=50> Taille</td>' , "\r\n"; echo "\t\t\t" , '<td width=50> Quantité</td>' , "\r\n"; echo "\t\t\t" , '<td width=60> Désignation</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; // je suppose que $donnees contient toutes les infos // à propos de l'article sélectionné // il suffit d'insérer la ligne avant les autres echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['ref'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['taille'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['qte'] .'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$donnees['designation'].'</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; foreach( $_SESSION['achats'] as $achats ) { echo "\t\t" , '<tr>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['ref'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['taille'].'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['qte'] .'</td>' , "\r\n"; echo "\t\t\t" , '<td>'.$achats['designation'].'</td>' , "\r\n"; echo "\t\t" , '</tr>' , "\r\n"; } echo "\t" , '</table>' , "\r\n"; ?>-
SALUT , merci c'est beaucoup plus lisible comme ça ;)
mais je n'arrive toujours pas a comprendre pourquoi la désignation ne reste pas dans la case qui lui est approprié ? a chaque fois que je recherche une autre référence elle disparait malgré que la référence lui correspondante reste si tu vois ce que je veux dire .
Pour plus de détails ce qui se passe lorsque je clic sur valider , il y a devant moi la réf , la taille , la qt et la désignation , chacune dans une case , je recherche une autre réf ce que j'ai déjà noté descend d'une case ( c'est normal ) mais la désignation elle disparait . Pourtant sur le code il y a pas de différence
-
-
salut , enfin un résultat qui me remonte le moral , désormais il y a l'affichage de la référence , de la taille et de la quantité , pour ce qui est de la désignation ,elle s'affiche , mais le problème c'est que ça s'affiche pas dans le même tableau que les autres , c'est a dire ça s'affiche au dessus du tableau et une fois je cherche une autre référence ça change ( la référence déjà affiché ne reste pas elle disparait et laisse place a la nouvelle )je pense que le problème vient de cette partie du script
$i = 0; echo "<table border=1 cellspacing=0 cellpadding=0 bordercolor=black>"; echo "<tr>"; echo $donnees['designation']; // voila la partie en question echo "<td width=100> Références</td>"; echo "<td width=50> Taille</td>"; echo "<td width=50> Quantité</td>"; echo"<td width=60> Designation</td>"; echo "</tr>"; foreach( $_SESSION['achats'] as $achats ) // utilise foreach() c'est beaucoup plus simple { echo "<tr>"; echo "<td>".$achats['ref']."</td>"; echo "<td>".$achats['taille']."</td>"; echo "<td>".$achats['qte'] ."</td>"; echo "<td>".$achats['designation']."</td>"; echo "</tr>"; } echo "</table>";
Merci si tu arrive a trouver l'erreur et le moyen de sauvegarder la designation dans le tableau comme le reste, 100000000000merci en tout les cas -
Contributeursalut,
oups, j'avais pas vu !
il y a des choses que je ne comprends pas.<?php session_start(); mysql_connect('localhost','root') or die(mysql_error()); mysql_select_db('applicatif') or die(mysql_error()); if(isset($_POST) &&!empty($_POST['reference']) ) { $ref = $_POST['reference']; $sql = "select * from produit where ref='".$ref."' " ; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); if( mysql_numrows( $req ) > 0 ) { $donnees = mysql_fetch_array($req); //il n'y a forcement qu'un résultat, pas de boucle } $designation = $donnees['designation']; // si tu prends tout dans le $_POST, à quoi sert d'interroger la BDD ??? $ref = $_POST['reference']; // en plus, les vraiables ne servent à rien puisque tu ne les réutilises pas $qte = $_POST['qte']; $taille=$_POST['taille']; $_SESSION['achats'][] = array('ref' => $_POST['reference'],'qte' => $_POST['qte'],'taille'=>$_POST['taille'],'designation'=>$_POST['designation']); } echo "<br>"; $i = 0; echo "<table border=1 cellspacing=0 cellpadding=0 bordercolor=black>"; echo "<tr>"; echo "<td width=100> Références</td>"; echo "<td width=50> Taille</td>"; echo "<td width=50> Quantité</td>"; echo"<td width=60> Designation</td>"; echo "</tr>"; foreach( $_SESSION['achats'] as $achat ) // utilise foreach() c'est beaucoup plus simple { echo "<tr>"; echo "<td>".$achat['ref']."</td>"; echo "<td>".$achat['taille']."</td>"; echo "<td>".$achat['qte'] ."</td>"; echo "<td>".$achat['designation']."</td>"; echo "</tr>"; } echo "</table>"; echo "<a href=test.php?action=destroy>Détruire les sessions</a>"; } ?> -
salut , j'ai essayé tant bien que mal de rajouter la recherche dans la base de données au script.
Ce qui devrait ce passer : lorsque je tape une référence correcte en plus de l'afficher dans le tableau il doit aussi afficher la désignation de l'article .
Ce qui se passe , lorsque je tape une référence correcte il me l'affiche dans le tableau mais sans la désignation :(
par contre si je tape une référence erronée, le tableau disparait .je pense avoir un problème avec ma boucle while mais je ne sais pas ou exactement et en plus de ca je n'arrive pas a mettre la quantité affiché dans un champs de sorte a pourvoir mettre quantité 0 dans le cas ou je souhaite annuler un article .
Merci si vous arrivez a m'aider a trouver l'erreur .<!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=iso-8859-1" /> <title>Client.html</title> <script language="Javascript1.2" type="text/javascript"> <!-- function codeTouche(evenement) { for (prop in evenement) { if(prop == 'which') return(evenement.which); } return(evenement.keyCode); } function scanTouche(evenement) { var reCarSpeciaux = /[\x00\x08\x0D]/; var reCarValides = /\d/; var codeDecimal = codeTouche(evenement); var car = String.fromCharCode(codeDecimal); var autorisation = reCarValides.test(car) || reCarSpeciaux.test(car); return autorisation; } --> </script> </head> <body > <?php session_start(); //connexion a la base de données mysql_connect('localhost','root') or die(mysql_error()); mysql_select_db('applicatif') or die(mysql_error()); if(isset($_POST) &&!empty($_POST['reference']) ) $ref = $_POST['reference']; // on recupère la fiche correspondante au client $sql = "select * from produit where ref='".$ref."' " ; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // On fait une boucle pour lister tout ce que contient la table : while ($donnees = mysql_fetch_array($req) ) { $designation=$donnees['designation']; if ($_GET['action']=="destroy"){ session_unset(); session_destroy(); } $ref = $_POST['reference']; $qte = $_POST['qte']; $taille=$_POST['taille']; $_SESSION['achats'][] = array('ref' => $_POST['reference'],'qte' => $_POST['qte'],'taille'=>$_POST['taille'],'designation'=>$_POST['designation']); echo "<br>"; $i = 0; echo "<table border=1 cellspacing=0 cellpadding=0 bordercolor=black>"; echo "<tr>"; echo "<td width=100> Références</td>"; echo "<td width=50> Taille</td>"; echo "<td width=50> Quantité</td>"; echo"<td width=60> Designation</td>"; echo "</tr>"; do{ echo "<tr>"; echo "<td>".$_SESSION['achats'][$i]['ref']."</td>"; echo "<td>".$_SESSION['achats'][$i]['taille']."</td>"; echo "<td>".$_SESSION['achats'][$i]['qte'] ."</td>"; echo "<td>".$_SESSION['achats'][$i]['designation']."</td>"; echo "</tr>"; $i++; }while (isset($_SESSION['achats'][$i])); echo "</table>"; echo "<a href=test.php?action=destroy>Détruire les sessions</a>"; } ?> <form action="test.php" method="post"> Référence : <input type="text" name="reference" onKeyPress="return scanTouche(event)"><br> Taille : <input type="text" name="taille" onKeyPress="return scanTouche(event)" ><br> Quantite : <input type="text" name="qte" value="1" onKeyPress="return scanTouche(event)"><br> <input type="submit" name="submit" value="Validez"> </form> </body> -
Contributeurça c'est inutile
$ref = $_POST['choix']; $qte = $_POST['qte'];
et tu devrais utiliser 'foreach()' plutôt que 'do...while()'
ba sinon, ça se met gentiment en place !
-;o)
bonne nuit, bon courage pour la suite et à plus !
-
Salut , qu'est ce que tu pense de ce code ( il me reste a inclure la recherche dans la BD )
<?php session_start(); if ($_GET['action']=="destroy"){ session_unset(); session_destroy(); } $ref = $_POST['choix']; $qte = $_POST['qte']; $_SESSION['achats'][] = array('ref' => $_POST['choix'],'qte' => $_POST['qte']); echo "<br>"; $i = 0; echo "<table border=1 cellspacing=0 cellpadding=0 bordercolor=black>"; echo "<tr>"; echo "<td>&nbsp;Références</td>"; echo "<td>&nbsp;Quantités</td>"; echo "</tr>"; do{ echo "<tr>"; echo "<td>".$_SESSION['achats'][$i]['ref']."</td>"; echo "<td>".$_SESSION['achats'][$i]['qte']."</td>"; echo "</tr>"; $i++; }while (isset($_SESSION['achats'][$i])); echo "</table>"; echo "<a href=panier.php?action=destroy>Détruire les sessions</a>"; echo "<br><a href=formulaire.htm>Retour</a>" ?> <form action="panier.php" method="post"> Référence produit : <input type="text" name="choix"><br> Quantité : <input type="text" name="qte"><br> <input type="submit" name="submit" value="Validez"> </form>
Si tu as une critique ou une remarque je suis ok -
Contributeurt'es pas fâché j'espère
ba non, quand même !
même quand tu ajoutes un deuxième produit ?
-
oui c'est ca le problème , en général il prend pas un seul article,je pense qu'il faudra faire une boucle , étant donné que le nombre maximum d'articles est limité a 15 ( par commande ) la condition d'arrêt serait que i=15 , et a chaque tour on lit dans la variable session , si elle est pas vide alors on affiche ce qu'il y a dedans .
qu'en penses tu ? -
Contributeur@duxittomieux vaut tester avant d'ajouter le produit à la session.
si le tableau de la session a déjà une longueur de 15, alors tu refuses l'ajout et tu expliques pourquoi.
-
@DalidaOk , ça marche , tu n'as pas une idée sur un site ou il explique un peu ce que je veux faire ( session de type array ) ?
-
-
-
Désolé pour le bouton j'ai oublié :) t'es pas fâché j'espère
Je suis entièrement d'accord avec le sessions , c'est la seule solution que j'ai trouvé aussi pour garder les données extraites de la BD même après que la page se soit rechargé.Je suis entrain d'essayer de mettre ça en route, pour le code que tu m'as donné il m'a affiché le même résultat que celui que je t'avais envoyé . -
ContributeurGRRR !!! MAIS TU VAS L'UTILISER CE P***** DE BOUTON ?!
pour le code, si tu veux conserver les produits, d'une page à l'autre il faut les stocker dans une variable de session.
(t'es ok avec les sessions ?)
donc quand tu interroges la base, au lieu d'afficher le résultat, tu le stockes dans la session.
puis tu parcoures la variable session comme ça si il y déjà quelque chose dedans tu l'afficheras aussi.
est-ce que ça fonctionne ?
-
je n'ai pas bien compris cette partie , elle est censé faire quoi ?
if( !isset($_SESSION['produits']) )
{
$_SESSION['produits'] = array();
}
if( $nb === 1 ) // sinon plantera quand $req est vide
{
$_SESSION['produits'][] = $donnees = mysql_fetch_object( $req );
}
foreach( $_SESSION['produits'] as $produit ) // on boucle sur la variable de session
{ -
Contributeursalut,
indente ton code et pense à le mettre en forme sur le forum, c'est plus lisible !
pour stocker les produits, il faut une variable de session, comme on avait dit hier.<!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=iso-8859-1" /> <title>test</title> <script language="Javascript1.2" type="text/javascript"> <!-- function codeTouche(evenement) { for (prop in evenement) { if(prop == 'which') return(evenement.which); } return(evenement.keyCode); } function scanTouche(evenement) { var reCarSpeciaux = /[\x00\x08\x0D]/; var reCarValides = /\d/; var codeDecimal = codeTouche(evenement); var car = String.fromCharCode(codeDecimal); var autorisation = reCarValides.test(car) || reCarSpeciaux.test(car); return autorisation; } --> </script> </head> <body> <?php // ou verture de la connexion Mysql mysql_connect('localhost','root') or die(mysql_error()); mysql_select_db('applicatif') or die(mysql_error()); if( isset( $_POST ) && !empty( $_POST['reference'] ) ) // if( strtolower( $_SERVER['REQUEST_METHOD'] ) === 'post' ) est plus propre et utilise plutôt is_null(), empty() te renverra faux pour certaines valeurs comme "0" { $ref = $_POST['reference']; // on recupère la fiche correspondante au client $sql = "select * from produit where ref='".$ref."' " ; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $nb=mysql_numrows($req); // on ajoute la produit à la variable de session qui sera un tableau d'objets (pluspratique mais tu peux utiliser un tableau de tableau si tu préfères) // il faudra peut être initialiser le tableau pour la première utilisation /* if( !isset($_SESSION['produits']) ) { $_SESSION['produits'] = array(); } */ if( $nb === 1 ) // sinon plantera quand $req est vide { $_SESSION['produits'][] = $donnees = mysql_fetch_object( $req ); } foreach( $_SESSION['produits'] as $produit ) // on boucle sur la variable de session { ?> <table border="0"> <tr><td>Reference</td><td>:</td><td><strong><?php echo $produit->ref; ?></td> <td>Taille</td><td>:</td><td><strong><?php echo $produit->taille; ?></td> <td>Designation</td><td>:</td><td><strong><?php echo $produit->designation; ?></td> <td>Couleur</td><td>:</td><td><strong><?php echo $produit->couleur; ?></td> <td>Prix</td><td>:</td><td><strong><?php echo $produit->prix; ?></td> <td>Categorie</td><td>:</td><td><strong><?php echo $produit->categorie; }?></tr> <?php } // moi je préfère toujours ouvrir et fermer les accolades } ?> <form method="post" action="test.php"> <tr><td><input type="text" name="reference" maxlength="7" size="15" onKeyPress="return scanTouche(event)"/></td><td> <input type="submit" value="valider" /></td></td> </form> <?php mysql_close(); // inutile, il le fait tout seul ?> </table> </body> </html>
je n'ai pas trouver la condition pour afficher l'erreur. -
Contributeurallez, derniers conseils !
• commence par bien gérer l'identification sur toutes tes pages, que tu puisses être sûr que ce que tu affiches va à un utilisateur identifié ou non.
• crées tes propres classes, tes propres objets. le modèle objet est obligatoire pour ce genre de projet.
• ne fais jamais (mais alors jamais) confiance à tout ce qui peut provenir de l'utilisateur.
tout ce qui rentre comme paramètre est nettoyé avec 'filter()', tout ce qui est envoyé pour affichage à l'utilisateur est
protéger par 'htmlentities()' (ou équivalent, même ce qui sort de la bdd), tout ce qui rentre dans la bdd est protégé (il y a plusieurs techniques).
• respire, si ça suffit pas, re-respire !
bon courage pour la suite et à plus !
-
Bonjour , voila j'avance dans mon code , la il y a deux choses qui coincent :
1- étant donné que c'est la page qui se régénère si il y a une référence déjà affiché , en affichant une autre elle est effacé , il faut donc la stocker dans une variable pour éviter qu'elle ne disparaisse lorsqu'on régénère la page , je pense a faire une fonction qui met la référence trouvé ainsi que les données qui en résultent ( couleur ..) dans une session.qu'en penses tu ? la variable de session va s'auto incrémenter ( un truc du genre )
2- puisque j'ai mi mon script de recherche dans la base de donné sur la même page au début lorsque je pose la condition ( si la référence n'existe pas affiche message d'erreur ) il me l'affiche dés le début si tu vois ce que je veux dire , car au lancement de cette page,une recherche va être effectué sur la bd avec référence =0 puisque je n'ai encore rien saisie .
Voila pour le moment mon script
<!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=iso-8859-1" />
<title>test</title>
<script language="Javascript1.2" type="text/javascript">
<!--
function codeTouche(evenement)
{
for (prop in evenement)
{
if(prop == 'which') return(evenement.which);
}
return(evenement.keyCode);
}
function scanTouche(evenement)
{
var reCarSpeciaux = /[\x00\x08\x0D]/;
var reCarValides = /\d/;
var codeDecimal = codeTouche(evenement);
var car = String.fromCharCode(codeDecimal);
var autorisation = reCarValides.test(car) || reCarSpeciaux.test(car);
return autorisation;
}
-->
</script>
</head>
<body>
<?php
// ou verture de la connexion Mysql
mysql_connect('localhost','root') or die(mysql_error());
mysql_select_db('applicatif') or die(mysql_error());
if(isset($_POST) &&!empty($_POST['reference']) )
$ref = $_POST['reference'];
// on recupère la fiche correspondante au client
$sql = "select * from produit where ref='".$ref."' " ;
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$nb=mysql_numrows($req);
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array($req) ) {
?>
<table border="0">
<tr><td>Reference</td><td>:</td><td><strong><?php echo $donnees['ref']; ?></td>
<td>Taille</td><td>:</td><td><strong><?php echo $donnees['taille']; ?></td>
<td>Designation</td><td>:</td><td><strong><?php echo $donnees['designation']; ?></td>
<td>Couleur</td><td>:</td><td><strong><?php echo $donnees['couleur']; ?></td>
<td>Prix</td><td>:</td><td><strong><?php echo $donnees['prix']; ?></td>
<td>Categorie</td><td>:</td><td><strong><?php echo $donnees['categorie']; }?></tr>
<form method="post" action="test.php">
<tr><td><input type="text" name="reference" maxlength="7" size="15" onKeyPress="return scanTouche(event)"/></td><td>
<input type="submit" value="valider" /></td></td>
</form>
<?php mysql_close(); ?>
</table>
</body>
</html>
-
-
ContributeurAu fait c'est un projet de fin d'études
rolala mais t'es bargeot !!!
-;o)
d'autant plus si tu veux gérer le paiement !!!
tu te rends compte de l'usine à gaz que ça représente ?!
et niveau sécurité il faut être au top !!!
Donc tu es d accord avec moi que la solution pour garder chaque référence enregistré sur la page même après l'avoir rechargé est d'utiliser un tableau ?
le problème n'est pas tellement que ce soit un tableau ou pas mais plutôt sous quelle forme tu le rends persistant (fichier, bdd, session).
dans le cas d'une boutique je me demande si il faudrait pas en plus sécuriser ta session, tu attaques un gros morceau !!!
-
-
Contributeur@duxittoil ne sera jamais mis sur le net,c'est juste un projet personnel que j'ai choisi de réaliser
dans ce cas, VAS Y A FOND !!!
tu es d accord avec ce que je t'ai dit
ouais en gros mais je ne suis pas une référence en la matière !
mais si tu as besoin de conseil, tu sais où me trouver.
tu es au point côté technique ?
session, tableaux et même les bases de PHP ?
c'est important pour pouvoir réfléchir sérieusement à la solution à apporter.
autre chose, j'espère que tu codes avec la dernière version de PHP !!!
-
@DalidaMerci vraiment tu me remonte le moral , pour php j'utilise la dernière version ( php 5) et question code j'apprends comme tout le monde ;)
j'essaie de faire un truc pas trop compliqué c'est pour cela que j'ai préféré laisser tomber AJAX , je commence a coder la page références et j'espère ne te la montrer que pour te dire voila ça marche et non pas le contraire :) allez je m'y met
-
-
Contributeurah oki !
c'est comme un panier virtuel mais sans le paiement en fait ?!
tes articles tu peux les stocker dans une variable de session (unique pour chaque visiteur).
une variable de session peut être un tableau donc tu pourrais faire '$_SESSION['commande']' pour stocker les données.
à chaque article choisis, tu ajoutes un item au tableau en mettant l'id de l'article en clé et le détail de l'article en valeur.
comme il s'agit d'une session il faut sérialiser les données que tu vas entrer en valeur.<?php $id = 'blabla' // tu as récupéré l'id $detail = array( 'taille' => '38' , 'couleur' => 'bleu' , 'prix' => '18' ); //tu as récupéré les infos et les stockes dans un tableau $_SESSION['commande'][$id] = serialize( $detail ); // tu stockes les infos dans la session, tu pourras en faire ce que tu en veux de page en page ?>
ça correspond à ce que tu veux faire ?
-
oui c'est ça,pour le paiement ça va venir après sur une autre page, au fait il y a une page pour identifier le client , une autre pour son code remise, une pour enregistrer ses références, une pour son choix de livraison, une pour le paiement ( a reception seulement ) et une pour la synthèse( montant total ) puis tous les détails sont enregistrés dans un fichier. Au fait c'est un projet de fin d'études
Donc tu es d accord avec moi que la solution pour garder chaque référence enregistré sur la page même après l'avoir rechargé est d'utiliser un tableau ?
-
- 1
- 2