Ajax + mysql = ?

Bonjour,

Je commence l’ajax avec mes notions en mysql et je ne m’en sors pas. Je voudrais additionner les prix obtenu par ajax.

Merci d’avance

Code :

<?php $connection = @mysql_connect('localhost','XxX',''); if (!$connection) { die('erreur sur la connection serveur '.mysql_error()); } if(!mysql_select_db('emotiong', $connection)) { die('erreur sur la connection database '.mysql_error()); } /* met a jour la liste deroulante d'articles ************************************************/ $requetarticles = 'select * from soft_articles'; $listarticle = mysql_query($requetarticles); $listarticle1 = mysql_query($requetarticles); /* met a jour la le prix ************************************************/ $prixarticle = 'select * from soft_articles where description = "'.$_POST["prix"].'"'; $prixarticles = mysql_query($prixarticle); $rarticles = mysql_fetch_array($prixarticles); ?> #prix1 { position:absolute; /* top:8; right:8; */ border-style:solid; border-width:thin; background:lightgrey; width: 187px; height: 30px; left: 465px; top: 0; } #prix2 { position:absolute; /* top:8; right:8; */ border-style:solid; border-width:thin; background:lightgrey; width: 187px; height: 30px; left: 471px; top: 46px; } #selectarticle { position:absolute; top:0; left: 0; } #selectarticle1 { position:absolute; top:50; left: 0; } #total { border-style:solid; border-width:thin; background:lightgrey; position:absolute; top:150; } <?php while ($rarticles = mysql_fetch_array($listarticle)) { echo "".$rarticles['description'].""; } ?> <?php while ($rarticles1 = mysql_fetch_array($listarticle1)) { echo "".$rarticles1['description'].""; } ?>

Bon alors, déjà avec les [code/] ca serais plus lisible !
Ensuite, je pense qu’il faut que tu revois ta façon de faire ton code avant de passé à faire de l’Ajax ou autre.
Des choses du style :


$listarticle = mysql_query($requetarticles);
$listarticle1 = mysql_query($requetarticles);

C’est intolérable :). Si tu as besoin de la liste deux fois (Et que tu comptes la modifier, c’est pas le cas chez toi) tu peut faire :


$listarticle = mysql_query($requetarticles);
$listarticle1 = $listarticle;

Mais dans ton cas, tu utilises juste en lecture, rien de t’empeche de faire un foreach() 2 fois de suite (sachant que la fonction s’occupe de remettre le pointeur du tableau au debut toute seule ).
Après, tu refais une requête pour récupérer les articles qui ont une description égale au “prix” passé en POST. Si je met de coté le fait que dans ta table, tu met les prix dans un champ nommé description… tu vérifies pas ce qui se trouve dans ton $_POST[‘prix’] et c’est grave. En plus on sait pas trop d’où vient ce “prix” mais passons, essayons de régler ton “soucis”.

Donc, si j’ai bien compris, tu veux afficher deux fois les articles avec deux et affiche le prix de chacun d’entre eux dans une div, puis faire la somme de ces deux valeurs. Je tien à te préciser que “Ajax” n’intervient aucunement dans tout ca !

<?php
// Connexion à la base de donnée.

// ...

// Configs
$numArticle = 2; // Nombre d'article au choix

// On récupère la liste des articles, ainsi que leurs prix. Pas besoin de plus.
$sql = 'SELECT `description`, `prix` FROM `soft_articles`'; // La requête en question
$req = mysql_query( $sql ); // On éxécute la requete, et on met la ressouce du résultat dans $req
$result = mysql_fetch_array( $req ); // On recupéré les données et on les met dans un tableau

?>
<html>
<head>
<script type="text/javascript">

var numArticle = <?php echo $numArticle; ?>; // On passe le nombre d'article à Javascript pour le calcul du total.

function maj() {
	var total = 0;
	for( var i = 0; i < numArticle; i++ ) {
		value = document.getElementById( 'select_'+i ).value;
		total -= -parseFloat(value);
		setPrix( 'prix_'+i, parseFloat( value ) );
	}
	setPrix( 'total', total );
}
function setPrix( id, prix ) {
	document.getElementById( id ).innerHTML = prix;
}
</script>
</head>
<body>
<form action="" method="post">
	<?php

	for( $i = 0; $i < $numArticle; $i++ ) {
		// On crée autant de select que d'article voulut.
		?>
		Article <?php echo $i; ?> : <select onchange="javascript:maj()" id="select_<?php echo $i; ?>">
			<?php
			// On parcours la tableau pour faire les options du select.
			foreach( $result as $article ) {
				// On crée les options avec comme valeur le prix et comment label la description de l'article
				?>
					<option value="<?php echo $article['prix']; ?>"><?php echo $article['description']; ?></option>
				<?php
			}
			?>
		</select>
		<br/>
		<?php
	}
	?>
</form>

<div id="values">
	<?php
	for( $i = 0; $i < $numArticle; $i++ ) {
		?>Article n°<?php echo $i; ?> : <div id="prix_<?php echo $i; ?>"></div><?php
	}
	?>
</div>
Prix Total :
<div id="total"></div>
</body>

J’ai pas testé, j’ai pas de BD pour le faire, et ca me fait chier de faire un jeu d’essais. Je me suis un peu emporté sur le script, mais c’est pour te faire voir ce que ca peu donner comme script en y mettant du sien.

PS : Je dit pas que ma methode est la meilleure toussa. Mais c’est déjà plus carré :slight_smile:
Edité le 15/05/2009 à 16:26

:super:Merci d’avoir répondu, je teste ça quand je reviens

J’ai fait des petite modif, et j’ai fait un jeu d’essais


$result = array( array( 'description' => 'article1', 'prix' => 50 ),
		array( 'description' => 'article2', 'prix' => 10 ),
		array( 'description' => 'article3', 'prix' => 90 ),
		array( 'description' => 'article4', 'prix' => 40 ),
		array( 'description' => 'article5', 'prix' => 100 ));

et ca marche comme sur des roulettes.
Edité le 15/05/2009 à 16:30

j’ai un probleme avec le tableau que fait mysql
Array
(
[0] => 1
[id] => 1
[1] => site A
[description] => Ours
[2] => crea
[type] => crea
[3] => A
[categorie] => A
[4] => 250
[prix] => 250
)

car dans mes listes j’ai que des lettres et nombres, j’ai compris le probleme mais je ne sais pas pourquoi il y est :

1 1 s s c c A A 2 2

je découpe mon tableau n’importe commen t :frowning:
Edité le 15/05/2009 à 17:35

Comment tu crée ce tableau ?

il sort de mysql :

$sql = 'SELECT `description`, `prix` FROM `soft_articles`'; // La requête en question
$req = mysql_query( $sql ); // On éxécute la requete, et on met la ressouce du résultat dans $req
$result = mysql_fetch_array( $req ); // On recupéré les données et on les met dans un tableau
print_r ($result);

http://nsa07.casimages.com/img/2009/05/15/09051505561755998.jpg

merci de ton aide
Edité le 15/05/2009 à 17:58

Fait voir ton code complet, avec des balise [code/] stp.

<?php
//	*  PHP and MYSQL
//	
	
   $connection = @mysql_connect('10.0.0.8','laurent','');
	 if (!$connection)
	 {
	   die('erreur sur la connection serveur '.mysql_error());
	 } 
	 
	 if(!mysql_select_db(babana, $connection)) 
	 {
		 die('erreur sur la connection database '.mysql_error()); 
	 }

// Connexion à la base de donnée.

// ...

// Configs
$numArticle = 2; // Nombre d'article au choix

// On récupère la liste des articles, ainsi que leurs prix. Pas besoin de plus.
$sql = 'SELECT `description`, `prix` FROM `soft_articles`'; // La requête en question
$req = mysql_query( $sql ); // On éxécute la requete, et on met la ressouce du résultat dans $req
$result = mysql_fetch_array( $req ); // On recupéré les données et on les met dans un tableau
?>
<html>
<head>
<script type="text/javascript">

var numArticle = <?php echo $numArticle; ?>; // On passe le nombre d'article à Javascript pour le calcul du total.

function maj() {
	var total = 0;
	for( var i = 0; i < numArticle; i++ ) {
		value = document.getElementById( 'select_'+i ).value;
		total -= -parseFloat(value);
		setPrix( 'prix_'+i, parseFloat( value ) );
	}
	setPrix( 'total', total );
		setPrix( 'totalTTC', total*0.196+total );

}
function setPrix( id, prix ) {
	document.getElementById( id ).innerHTML = prix;
}
</script>
</head>
<body>
<form action="" method="post">
	<?php

	for( $i = 0; $i < $numArticle; $i++ ) {
		// On crée autant de select que d'article voulut.
		?>
		Article <?php echo $i; ?> : <select onchange="javascript:maj()" id="select_<?php echo $i; ?>">
			<?php
			// On parcours la tableau pour faire les options du select.
			foreach( $result as $article ) {
				// On crée les options avec comme valeur le prix et comment label la description de l'article
				?>
					<option value="<?php echo $article['prix']; ?>"><?php echo $article['description']; ?></option>

				<?php
			}
			?>prix
		</select>
		<br/>
            

		<?php
	}
	?>
    </form>
    
</form>

<div id="values">
	<?php
	for( $i = 0; $i < $numArticle; $i++ ) {
		?>Article n°<?php echo $i; ?> : <div id="prix_<?php echo $i; ?>"></div><?php
	}
	?>
</div>
Prix Total HT:
<div id="total"></div>
Prix Total TTC:
<div id="totalTTC"></div>

</body>
</html>

Edité le 15/05/2009 à 18:40

Envois un create table et les insert pour que je test en vrai. Mais je vois pas ce qui marcherais pas. Dans le print_r que tu as donné, tu as Description qui à “Ours”, je me demande d’ou ca sort, tu modifie le tableau à un endroit ?
Edité le 15/05/2009 à 18:48

INSERT INTO `emotiong`.`soft_articles` (
`id` ,
`description` ,
`type` ,
`categorie` ,
`prix` 
)
VALUES (
NULL , 'fraise', 'srv', 'fruit', '5.8'
);

voici le print_r de la requet (ours été un test)

Array
(
    [0] => site A
    [description] => site A
    [1] => 250
    [prix] => 250
)

Edité le 15/05/2009 à 18:53

c’est quoi l’erreur alors, je comprend pas ou ca coince ?

l’erreur est que dans les listes il n’y a pas se qu’il devrait avoir;
j’ai :

select onchange="javascript:maj()" id="select_0">
<option value="s">s</option>
<option value="s">s</option>
<option value="2">2</option>
<option value="2">2</option>
</select>

au lieu de :

select onchange="javascript:maj()" id="select_0">
<option value="s">article 1</option>
<option value="s">article 2</option>
<option value="2">article 3</option>
<option value="2">article 4</option>
</select>

enfait il me prend la premiere lettre des valeurs dans le tableau :

(
 [0] => site A
 [description] => site A
 [1] => 250
 [prix] => 250
)

lesquelles ? :idee: