Page 1 sur 1

Array?

Posté : 06 févr. 2007, 10:14
par Albat90
Bonjour,

Je me pose une question depuis un certain temps et j'espère bien que quelqu'un sait y répondre :D...

Je voulais savoir si c'est possible de passer de :
$Base = "SELECT * FROM tarif$ WHERE Marques = '$form1'";
et mettre le résultat comme ça :
$marques[0] => Canon
$marques[1] => Lexmark
$marques[17] => Abaton
En gros, je veux savoir comment récuperer des informations dans une base puis construire un tableau avec array ^^.

Cela me permettrais ensuite d'effectuer un array_unique...

Merci de vos réponses ;)

Posté : 06 févr. 2007, 10:17
par ouckileou
suffit de regarder dans la doc des fonctions MySQL si c'est ça que tu utilises : mysql_fetch_array() et mysql_fetch_assoc() permettent de construire des tableaux

Maintenant, pourquoi utiliser array_unique() alors que tu as la possibilité dès la requête SQL de ne pas prendre de doublons ?

Posté : 06 févr. 2007, 10:37
par Albat90
Merci pour tes liens je vais y jeter un oeil :D...

Bah pour les doublons direct depuis sql, il faut que j'utilise la commande DISTINCT dans mon SELECT.

Mais le problemes c'est que quand j'écris :
$Base = "SELECT DISTINCT * FROM tarif$ WHERE Marques = '$form1'";
Le DISTINCT ne fonctionne pas vue que ce n'est pas le champs Marques que je veux faire afficher mais le champs à coté qui dépend de Marques.
Et en plus, si je veux faire marcher le DISTINCT, faudrais que je l'ecris comme ça :
$Base = "SELECT DISTINCT Marques = '$form1' FROM tarif$";
Mais même ça, je ne suis même pas sur que ça marche vue qu'il y a une condition...

Donc mon but, c'est de selectionner la marque choisie par l'utilisateur dans $form1 puis de faire afficher toute les reference de cette marque donc moi là j'ai :
echo '<select>';
$base3 = "SELECT * FROM tarif$ WHERE Marques = '$form1'";
$req3 = mysql_query($base3) or die('Erreur SQL !'.$sql.''.mysql_error());
while($data3 = mysql_fetch_array($req3)){
echo '<option>'.$data3['Références Machines'].'</option>';
}
echo '</select>
Mais j'ai des doublons dans Reference Machines :?.
Donc je veux faire intervenir Array_unique sur les resultat de Reference à moin qu'il existe une solution plus simple?

Merci de vos réponses ;).

Posté : 06 févr. 2007, 13:00
par Albat90
Bon il me semble que j'ai trouvé une solution qui en n'est pas une :?...

Voila mon code :
<?php
@$form1 = $_GET['type'];
$_GET['type'] = $form1;
@$form2 = $_GET['cartouche'];
$_GET['cartouche'] = $form2;
$based = "localhost";
$admin = "root";
$password = "";
$bdd = "base";
$connect = mysql_connect($based,$admin,$password);
mysql_select_db($bdd, $connect) or die("Impossible de se connecter");
echo '<div class="menu">
<form id="menuselect1" action="'.$_SERVER['PHP_SELF'].'" method="get"> 
<div align="center">
<select name="type" method="GET" onchange="document.forms[\'menuselect1\'].submit()"> ';
$base = "SELECT DISTINCT Types FROM tarif$";
$req = mysql_query($base) or die('Erreur SQL !'.$sql.''.mysql_error());
echo '<option selected="selected">'.$form1.'</option>';
while($data = mysql_fetch_array($req)){
echo '<option>'.$data['Types'].'</option>';
}
echo '</select>
<noscript><input type="submit" name="ok" value="ok" /></noscript>';
if ($form1 == "") {
die();
}
else {
	echo '<div class="menu">
	<div align="center">
	<select name="cartouche" method="GET" onchange="document.forms[\'menuselect1\'].submit()"> '; 
	$base2 = "SELECT * FROM tarif$ WHERE Types = '$form1'";
	$req2 = mysql_query($base2) or die('Erreur SQL !'.$sql.''.mysql_error());
	echo '<option selected="selected">'.$form2.'</option>';
	while($data2 = mysql_fetch_array($req2)){
	$tab[] = $data2['Marques'];
	}
	$i = 0;
	$tab2 = array_unique($tab);
	while(array($tab2)) {
	if ($tab2[$i] == ""){
	$i++;
	}
	else {
	echo '<option>'.$tab2[$i].'</option>';
	$i++;
	}
	}
	echo '</select>
	<noscript><input type="submit" name="ok" value="ok" /></noscript>';
		if ($form2 == "") {
		die();
		}
		else{
		echo '<div class="menu">
		<div align="center">
		<select>';
		$base3 = "SELECT * FROM tarif$ WHERE Marques = '$form2'";
		$req3 = mysql_query($base3) or die('Erreur SQL !'.$sql.''.mysql_error());
		while($data3 = mysql_fetch_array($req3)){
		echo '<option>'.$data3['Références Machines'].'</option>';
		}
		echo '</select>
		</form>';
		}
}
?>
Et voila la partie concerner pour eviter les doublons :
$base2 = "SELECT * FROM tarif$ WHERE Types = '$form1'";
	$req2 = mysql_query($base2) or die('Erreur SQL !'.$sql.''.mysql_error());
	echo '<option selected="selected">'.$form2.'</option>';
	while($data2 = mysql_fetch_array($req2)){
	$tab[] = $data2['Marques'];
	}
	$i = 0;
	$tab2 = array_unique($tab);
	while(array($tab2)) {
	if ($tab2[$i] == ""){
	$i++;
	}
	else {
	echo '<option>'.$tab2[$i].'</option>';
	$i++;
	}
	}
Bon, me demander pas de l'expliquer car c'est en faisant des test que j'ai trouver ça...
Ensuite, la fonction array_unique fonctionne bien, je n'ai plus de doublons mais le script est mauvais je pense car il met bien 3minutes avant d'afficher la page et la suite du script ne fonctionne plus, c'est a dire que le troisième formulaire ne s'affiche plus...

Vous pouvez m'eclairer???

Merci de vos réponse ;)

Posté : 06 févr. 2007, 14:51
par Maitrepylos
Et comme ceci
$Base = "SELECT DISTINCT(Marques),autreChamp,autesChamp FROM tarif$ WHERE Marques = '$form1'"; 


Posté : 07 févr. 2007, 10:26
par Albat90
Merci pour ta réponse, ça marche du tonnerre XD...
A dire que je cherche depuis trois ou quatre jour un moyen et c'était aussi simple que ça :D

Bon je dois faire un système de cadie maintenant.

Je vous remerci de m'avoir répondu ;)

Posté : 07 févr. 2007, 10:46
par albat
Y a des fois, j'ai l'impression de parler tout seul dans le désert ...

ON SORT LES VARIABLES DES CHAÎNES DE CARACTÈRES !!! |*()
$Base = "SELECT DISTINCT(Marques), autreChamp, autresChamps FROM tarif$ WHERE Marques = '".$form1."'";
Et puis tarif$, c'est un peu curieux comme nom de table, non ?... :-k

Posté : 07 févr. 2007, 10:49
par Maitrepylos
Y a des fois, j'ai l'impression de parler tout seul dans le désert ...

ON SORT LES VARIABLES DES CHAÎNES DE CARACTÈRES !!! |*()
Heu :oops: désolé, j'ai pas fait attention, je me suis contenté du DISTINCT

Posté : 07 févr. 2007, 16:41
par Albat90
Je ne comprend pas pourquoi tu dis ça Albat???
Tu peux m'éclairer???
Oui je sais c'est un peu bizarre comme nom de table mais bon, je ne peux rien y faire, mon patron ma filer la base de données, il m'a dis tu n'y touche pas et tu me fais un système de commande avec selection multiple puis tu met un système de panier.
Bon ça va, jusqu'à maintenant, j'ai tirer pas mal de mon stage mais faut dire que j'essaye de trouver une solution pour les paniers et je cale un peu.

Merci de vos réponse ;)

Posté : 07 févr. 2007, 17:48
par albat
Le nom de cette table me paraît étrange parce qu'il n'est pas courant
d'utiliser le symbole $ en position finale d'un identifiant.

On sait qu'en début, il désigne une variable, mais en fin, c'est du jamais vu.
Maintenant, si ça marche... Pourquoi pas ?

Peut-être que celui qui a créé la base est un ancien accro au BASIC... ;)

Je me souviens, sur mon Commodore 64... :roll:

Code : Tout sélectionner

10 REM ---- Fond noir ---- 20 POKE 53280,0 30 REM ---- texte blanc ---- 40 POKE 53281,15 50 A$ = "Hello, World !" 60 FOR A = 1 TO 20 STEP 2 70 PRINT A$ 80 NEXT A 90 GOTO 60

Posté : 07 févr. 2007, 18:21
par Albat90
Oui c'est pensable, en même temps c'est une conversion excel.
Peut etre que celui qui l'a fais est un accro au dollars, il voit son argent dans le $ de ses tarifs :P...
Bon le principale, c'est que ça marche ;)

En tout cas, j'ai au moin bossé sur un truc innovant :D, un dollars à la fin d'une table 8-) ...