Existe-t-il un équivalent de DIM (du langage basic) en PHP ?

Petit nouveau ! | 5 Messages

10 mai 2012, 22:14

Bonjour à Tous

Pour la conception d'un site, vu que rien n’avançait comme je le voulais, j'ai décidé de mettre les mains dans le cambouis (et en plus j'y prend goût).

Il y a quelques années (disons plutôt une bonne décennie), j'ai pratiqué le langage basic (ayant débuté avec un ZX81 avec 1 Ko de RAM, si si, ça a existé #-o ).

J'ai un tableau assez complexe a mettre en page et la récupération des données n'est pas un souci (avec PHP/SQL).

Le tableau ce compose techniquement de 10 colonnes : la première comporte le numéro (les deux lignes sont fusionnées) et la seconde sur deux lignes, le nom et prénom (le numéro étant centré sur les deux lignes). Voilà grosso modo ce que cela pourrait donner (répéter sur plusieurs lignes) :

Code : Tout sélectionner

+--------------+-------------+-------------+-------------+-------------+ |1 Nom |2 Nom |3 Nom |4 Nom |5 Nom | | Prénom | Prénom | Prénom | Prénom | Prénom | +--------------+-------------+-------------+-------------+-------------+
En basic, il y avait une instruction qui s’appelait DIM. Elle ressemble beaucoup à Array (il s'agit aussi de tableau).

Seulement cette fonction permettait de stocker les valeurs et de les appeler directement par leur numéro.

Le code aurait ressemblé à ça :
Dim nom$(50) (on demande la création de 50 variables nom)
Dim prenom$(50) (idem pour le prénom)
Open (on ouvre le fichier avec un les instructions qui vont bien avec name$ et first$ par exemple pour les deux champs que j'ai besoin de récupéré)
For i%=1 to 50 (ou l'instruction pour aller à la fin du fichier, on pouvait aussi utiliser une boucle While ou Do/loop)
lecture de la ligne i% du fichier
nom$(i%)=name$
prenom$(i%)=first$
Next i% (la valeur s'incrémente de 1 on passe à la lecture de la ligne suivant dans le fichier)
Close (on ferme le fichier)

L'avantage de Dim est qui vous vouliez afficher la valeur du 45e champs, il suffisait de faire :
Print nom$(45)
Print prenom$(45)

Ma question : existe-t-il un moyen de lire les données et de les stockés de manière similaire ce qui serait très pratique pour mon tableau ? :P

Un GRAND MERCI d'avance pour votre aide =D>

Stef

ViPHP
xTG
ViPHP | 7331 Messages

11 mai 2012, 06:59

En gros travailler avec l'index ?
$array = array(
 0 => 'zéro',
 1 => 'un',
 2 => 'deux',
 'test' => 'gah !'
);
echo $array[1]; // un
echo $array['test']; // gah
Heureusement cela existe dans tout langage. ;)

Petit nouveau ! | 5 Messages

11 mai 2012, 21:15

Merci beaucoup pour ton aide, je vais tester ça !!! :wink:

Petit nouveau ! | 5 Messages

11 mai 2012, 23:22

J'ai voulu tester et comme j'ai toujours les vieilles habitudes du basic #-o , le code ne fonctionne pas... #-o #-o #-o

Code : Tout sélectionner

$toto = $bdd->query('SELECT * FROM fichier'); $a=1 $name =array( while ($donnees = $mabase->fetch()) { $zorro=$donnees['nom']// j'ai essayé de manière directe sans passer par $zorro $a => '$zorro', // avec $a=>$donnees['nom'] entouré ou non de ', c'est la même chose ?> <p>Index : <?php echo $donnees['index']; ?><br /> Nom : <?php echo $donnees['nom']; ?><br /> Prénom : <?php echo $donnees['prenom']; ?><br /></p> <?php $a++ } ); echo $name(45); $toto->closeCursor();
En fait, la base étant existante, je voudrai automatiser la récupération des données (comme avec la boucle for/next de mon premier exemple) d'où le $a qui est le numéro de l'index et $zorro qui est censé récupérer le nom (ce qui dans mon esprit revient à 0 => 'prénom 1').

Ayant deux variables, je voulais faire deux boucles pour récupérer les deux variables (l'index étant commun).

J'ai viré l'affichage que j'avais mis pour vérifier que la base était bien lu... dès fois que :roll: :roll: . Perdu ! :non: :non:

Est-ce grave Docteur ? 8-| 8-|

Merci d'avance pour votre aide =D>

Stef

ViPHP
xTG
ViPHP | 7331 Messages

12 mai 2012, 07:48

Ouyalaba ! Bon... Une solution ! Allons désapprendre le basic ! :mrgreen:

L'array autour de ta boucle while n'a aucun intérêt, il devrait même te générer une erreur.
L'index du tableau que tu cherches à récupérer avec $a est en fait connu, c'est l'index nommé "nom".
Attention aussi, une variable entre simple quote est en fait du texte et ne sera pas interprétée.

Aussi pour ce que tu souhaites faire, la fonction fetchAll() de PDO te construira un array des résultats sans avoir à faire de boucle.
Sinon voilà la méthode correcte :
<?php
$toto = $bdd->query('SELECT * FROM fichier');
$name =array();
while ($donnees = $toto->fetch())
{
  $name[] = $donnees; // on copie l'array $donnees dans un nouvel index (incrémenté tout seul) de $name, on aurait aussi pu mettre le $a de ton code entre les crochets cela aurait eu le même effet
?>
<p>Index : <?php echo $donnees['index']; ?>

Nom : <?php echo $donnees['nom']; ?>

Prénom : <?php echo $donnees['prenom']; ?>
</p>
<?php
}
);
if( isSet($name[45]) )
  echo $name[45];
else
  echo 'Aucun index 45';

$toto->closeCursor();

Petit nouveau ! | 5 Messages

12 mai 2012, 12:03

MERCI BEAUCOUP xTG =D> =D> =D> =D>

J'ai un peu de mal à "désaprendre" le basic... #-o #-o

Surtout que le PHP est beaucoup plus simple avec la fonction fetchAll() !! Je peux récupérer toute les données avec une seule instruction ! Trop cool !!

Merci Encore :wink:

Petit nouveau ! | 5 Messages

12 mai 2012, 12:45

Coucou, c'est encore moi.... :tir2:

Lorsque j'utilise :

Code : Tout sélectionner

f( isSet($name[45]) ) echo $name[45]; else echo 'Aucun index 45';
J'ai en retour Array...

Et j'ai compris "l'erreur", je n'indique pas quelle valeur variable à récupérer dans le tableau comme avec :

Code : Tout sélectionner

<p>Index : <?php echo $donnees['index']; ?> Nom : <?php echo $donnees['nom']; ?> Prénom : <?php echo $donnees['prenom']; ?> </p>
Voilà comment afficher les données :

Code : Tout sélectionner

if (isSet($name[45])) echo $name[45]['nom']; else echo 'A rien';
Attention cependant car les valeurs ne sont pas de 1 à 50 mais de 0 à 49...

Merci encore xTG pour ton aide :wink: