Php et mysql dans une fonction javascript

Fermé
duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013 - 16 avril 2008 à 23:21
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 23 mai 2008 à 13:21
Bonjour,
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 .

29 réponses

Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 922
23 avril 2008 à 08:54
salut,

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>&nbsp;&nbsp;Références</td>"; 
	echo "<td width=50>&nbsp;&nbsp;Taille</td>"; 
	echo "<td width=50>&nbsp;&nbsp;Quantité</td>";
	echo"<td width=60>&nbsp;&nbsp;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>";  
	}
?>
0
duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013 1
24 avril 2008 à 03:20
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>&nbsp;&nbsp;Références</td>"; 
	echo "<td width=50>&nbsp;&nbsp;Taille</td>"; 
	echo "<td width=50>&nbsp;&nbsp;Quantité</td>";
	echo"<td width=60>&nbsp;&nbsp;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
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 922
24 avril 2008 à 08:48
salut,

ç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>&nbsp;&nbsp;R&eacute;f&eacute;rences</td>' , "\r\n";  
	echo "\t\t\t" , '<td width=50>&nbsp;&nbsp;Taille</td>' , "\r\n";  
	echo "\t\t\t" , '<td width=50>&nbsp;&nbsp;Quantit&eacute;</td>' , "\r\n"; 
	echo "\t\t\t" , '<td width=60>&nbsp;&nbsp;D&eacute;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"; 
?>
0
duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013 1
24 avril 2008 à 22:33
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
0
duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013 1
25 avril 2008 à 01:12
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 ?
0

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

Posez votre question
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 922
25 avril 2008 à 01:29
yep, 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 ?
0
duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013 1
25 avril 2008 à 14:54
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>&nbsp;&nbsp;R&eacute;f&eacute;rences</td>' , "\r\n";  
	echo "\t\t\t" , '<td width=50>&nbsp;&nbsp;Taille</td>' , "\r\n";  
	echo "\t\t\t" , '<td width=50>&nbsp;&nbsp;Quantit&eacute;</td>' , "\r\n"; 
	echo "\t\t\t" , '<td width=60>&nbsp;&nbsp;D&eacute;signation</td>' , "\r\n"; 
    echo "\t\t\t" , '<td width=60>&nbsp;&nbsp;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 .
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 922
25 avril 2008 à 22:14
salut,

surfement, l'info est pas ajoutée à '$_SESSION['achats']'…
$_SESSION['achats'][] =  array(	'ref' => $donnees['ref'] , 'qte' => $donnees['qte'] , 'taille' => $donnees['taille'] , 'designation' => $donnees['designation'] );
0
duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013 1
25 avril 2008 à 22:47
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
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 922
25 avril 2008 à 23:16
ah 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";  
0
duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013 1
19 mai 2008 à 21:23
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
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 922
22 mai 2008 à 21:47
salut,

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
0
duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013 1 > Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016
22 mai 2008 à 23:48
Salut, 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
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 922 > duxitto Messages postés 247 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 7 janvier 2013
23 mai 2008 à 13:21
salut,

BRAVO !!!
\o/

suis content que tu aies réussi et fier si j'ai pu t'y aider !

bon courage pour la suite !
-;o)
0