Array?

Eléphant du PHP | 145 Messages

06 févr. 2007, 10:14

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 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 févr. 2007, 10:17

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 ?

Eléphant du PHP | 145 Messages

06 févr. 2007, 10:37

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 ;).
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Eléphant du PHP | 145 Messages

06 févr. 2007, 13:00

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 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Mammouth du PHP | 1029 Messages

06 févr. 2007, 14:51

Et comme ceci
$Base = "SELECT DISTINCT(Marques),autreChamp,autesChamp FROM tarif$ WHERE Marques = '$form1'"; 

L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 145 Messages

07 févr. 2007, 10:26

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 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 févr. 2007, 10:46

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

Mammouth du PHP | 1029 Messages

07 févr. 2007, 10:49

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
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 145 Messages

07 févr. 2007, 16:41

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 ;)
La culture, c'est comme la confiture, moins on en a, plus on l'étale.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 févr. 2007, 17:48

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

Eléphant du PHP | 145 Messages

07 févr. 2007, 18:21

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-) ...
La culture, c'est comme la confiture, moins on en a, plus on l'étale.