Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1047 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Faire une boucleuu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP]Faire une boucleuu

n°936210
kiruah
Posté le 04-01-2005 à 00:58:51  profilanswer
 

Bonsoir,
 
je dois faire un script en php
pour calculer la taille quee va prendre un nom  
derrière un maillot de football :
 
 
j'ai un tableau excel avec les 25 caractères de l'alphabet et la taille k'il prendront
en fonction de la lettre précedente
 
la tableau se presente comme ca :
 

Code :
  1. a    b    c    d    e    f    g   h   i   j.... espace
  2. a      1    1    1    1    1    1    1   1   1   1....   1
  3. b      1    1    1    1    1    1    1   1   1   1....   1
  4. c      1    1    1    1    1    1    1   1   1   1....   1
  5. d      1    1    1    1    1    1    1   1   1   1....   1
  6. e      1    1    1    1    1    1    1   1   1   1....   1
  7. f      1    1    1    1    1    1    1   1   1   1....   1
  8. g      1    1    1    1    1    1    1   1   1   1....   1
  9. h      1    1    1    1    1    1    1   1   1   1....   1
  10. i      1    1    1    1    1    1    1   1   1   1....   1
  11. j      0.9  0.9  0.9  0.9  0.9  0.9  0.9 0.9 0.9 0.9.... 0.9
  12. .
  13. .
  14. .
  15. espace 0.4  0.4  0.4  0.4  0.4  0.4  0.4 0.4 0.4 0.4.... 0.4


 
 
si la personne s'apelle jaja ca fera 0.4 + 0.9 + 1 + 0.9 = 3.4
 
0.4(avant le j un espace)
+
0.9(avant le a un j)
+
1(avant le j un a)
+
0.9(avant le a un j)
 
donc pour l'instant cette chaine est dans une variable ,
j'utilise la fonction strlen pour compter le nombre de caractères et j'aimerais bien faire une boucle

Code :
  1. $nbchainer=strlen($chaineDecaractere)
  2. for($i=1;$i<$nbchainer;$i++)
  3. {
  4. echo $chaineDecaractere[$i];
  5. }


 
merci


Message édité par kiruah le 11-01-2005 à 14:48:56
mood
Publicité
Posté le 04-01-2005 à 00:58:51  profilanswer
 

n°936212
sielfried
Posté le 04-01-2005 à 01:16:33  profilanswer
 

Heuu... ben il faudrait déjà peut-être stocker l'équivalent de ton tableau Excel dans un tableau PHP, du style :
 

Code :
  1. $a_long = array();
  2. $a_long['a']['a'] = 1;
  3. $a_long['a']['b'] = 1;
  4. ...
  5. $a_long[' '][' '] = 0.4;


 
Ensuite une fonction de type :
 

Code :
  1. function longueur_nom($nom, $a_long) {
  2.    $long = $a_long[$nom[0]][' '];
  3.    $nb_car = strlen($nom);
  4.      
  5.    for ($i = 1; $i < $nb_car; $i++) {
  6.       $long += $a_long[$nom[$i]][$nom[i - 1]];
  7.    }
  8.    return $long;
  9. }


 
(aucune vérification d'erreur ici, ça suppose que tu sais ce que tu fais de la fonction [par ex., pas de chaîne vide ou comprenant des caractères non compris dans le tableau.])


Message édité par sielfried le 04-01-2005 à 01:18:21

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°936220
kiruah
Posté le 04-01-2005 à 02:15:30  profilanswer
 

Merci pour la réponse  :)  
 
une question pour le tableau n'y aurait t'il pas un moyen plus "efficace" pasque la j'en ai pour des lignes et des lignes.
 
avec cette ecriture on peux faire une sorte de tableau editable ki ressemblerai " a s'y méprendre" au fichier exel ?  
 
ou mettre ca en base de donné mais je suis pas très inspiré
j'ai fait 26 tables a,b,c,d,e,fg,.... avec 26 champs avec un enregistrement par chant ki est la longeur
 
le but de la demarche etant de pouvoir avoir visuellement l'equivalent du fichier excel pour changer les données aisément


Message édité par kiruah le 04-01-2005 à 02:21:53
n°936260
sielfried
Posté le 04-01-2005 à 08:55:57  profilanswer
 

En fait vu comme ça les valeurs de ton tableau ne dépendent que de la lettre précédente et jamais de la lettre "courante". En gros une ligne contient partout la même valeur.
 
Si c'est le cas alors ton tableau peut être réduit à une seule dimension.
 
Dans tous les cas, pour optimiser la création de ce genre de tableaux, tu peux te faire une fonction qui remplie des parties entières de celui-ci en utilisant les valeurs ASCII des caractères (qui te permettent de faire des boucles). Pour ça tu as chr() et ord() qui devraient t'être utiles.


Message édité par sielfried le 04-01-2005 à 08:56:36

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°950247
kiruah
Posté le 10-01-2005 à 18:45:11  profilanswer
 

j'ai essayé de mettre le tableau dans le fichier php mais ayant besoin de pouvoir le modifier a partir d'une interface administrateur le mieux serait de mettre ce tableau ->

Code :
  1. a    b    c    d    e    f    g   h   i   j.... espace
  2. a      1    1    1    1    1    1    1   1   1   1....   1
  3. b      1    1    1    1    1    1    1   1   1   1....   1
  4. c      1    1    1    1    1    1    1   1   1   1....   1
  5. d      1    1    1    1    1    1    1   1   1   1....   1 
  6. e      1    1    1    1    1    1    1   1   1   1....   1
  7. f      1    1    1    1    1    1    1   1   1   1....   1
  8. g      1    1    1    1    1    1    1   1   1   1....   1
  9. h      1    1    1    1    1    1    1   1   1   1....   1
  10. i      1    1    1    1    1    1    1   1   1   1....   1
  11. j      0.9  0.9  0.9  0.9  0.9  0.9  0.9 0.9 0.9 0.9.... 0.9


 
dans une base de donnée mais je c pas trop comment faire sachant que j'ai besoin du tableau a deux dimensions, j'ai fait une table par lettre mais je trouve pas ca super optimisé ....


Message édité par kiruah le 11-01-2005 à 14:48:16
n°950337
sielfried
Posté le 10-01-2005 à 20:37:26  profilanswer
 

Hmm... ben ça fait effectivement un sacré joli nombre d'infos à stocker. Ce que tu peux aussi faire c'est stocker ça à l'intérieur d'un fichier. Il faudrait bien sûr sérialiser le tableau (voir www.php.net/serialise).
 
Ca peut aussi se faire en bdd mais une table avec un seul champ pas atomique, bof. [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°950787
kiruah
Posté le 11-01-2005 à 14:51:56  profilanswer
 

je vien de créer la base ci dessous  

Code :
  1. CREATE TABLE `caractere` (
  2.   `id` int(3) NOT NULL auto_increment,
  3.   `AVANT` char(1) NOT NULL default '',
  4.   `A` char(3) NOT NULL default '',
  5.   `B` char(3) NOT NULL default '',
  6.   `C` char(3) NOT NULL default '',
  7.   `D` char(3) NOT NULL default '',
  8.   `E` char(3) NOT NULL default '',
  9.   `F` char(3) NOT NULL default '',
  10.   `G` char(3) NOT NULL default '',
  11.   `H` char(3) NOT NULL default '',
  12.   `I` char(3) NOT NULL default '',
  13.   `J` char(3) NOT NULL default '',
  14.   `K` char(3) NOT NULL default '',
  15.   `L` char(3) NOT NULL default '',
  16.   `M` char(3) NOT NULL default '',
  17.   `N` char(3) NOT NULL default '',
  18.   `O` char(3) NOT NULL default '',
  19.   `P` char(3) NOT NULL default '',
  20.   `Q` char(3) NOT NULL default '',
  21.   `R` char(3) NOT NULL default '',
  22.   `S` char(3) NOT NULL default '',
  23.   `T` char(3) NOT NULL default '',
  24.   `U` char(3) NOT NULL default '',
  25.   `V` char(3) NOT NULL default '',
  26.   `W` char(3) NOT NULL default '',
  27.   `X` char(3) NOT NULL default '',
  28.   `Y` char(3) NOT NULL default '',
  29.   `Z` char(3) NOT NULL default '',
  30.   `1` char(3) NOT NULL default '',
  31.   `2` char(3) NOT NULL default '',
  32.   `3` char(3) NOT NULL default '',
  33.   `4` char(3) NOT NULL default '',
  34.   `5` char(3) NOT NULL default '',
  35.   `6` char(3) NOT NULL default '',
  36.   `7` char(3) NOT NULL default '',
  37.   `8` char(3) NOT NULL default '',
  38.   `9` char(3) NOT NULL default '',
  39.   `0` char(3) NOT NULL default '',
  40.   `@` char(3) NOT NULL default '',
  41.   `ESPACE` char(3) NOT NULL default '',
  42.   PRIMARY KEY  (`id`)
  43. ) TYPE=MyISAM AUTO_INCREMENT=39 ;

 
 
Il y a autant d'enregistrement que de champs et un champs ressemble a ca
 

Code :
  1. INSERT INTO `caractere` VALUES (1, 'A', '2', '2', '1,6', '2', '1,6', '1,6', '2', '2', '0,4', '1,4', '1,6', '1,6', '2', '1,6', '2', '2', '2', '2', '2', '2', '2', '2', '3,6', '1,8', '1,8', '1,6', '1,2', '1,6', '1,6', '1,8', '1,6', '1,8', '1,6', '1,8', '1,8', '2', '3,6', '1,6');

 
 
 
Le but est d'apliquer une taille a chaque lettre d'une chaine, j'ai deja fait la fonction en "dur" sans base de donnée :  
 
 

Code :
  1. $a_long = array();
  2.    $a_long['A'][' '] = 1;
  3.    $a_long['A']['A'] = 1;
  4.    $a_long['A']['B'] = 2;
  5.    function longueur_nom($nom, $a_long)
  6.    {
  7.       //Définition de la variable $long  
  8.       $long = $a_long[$nom[0]][' '];
  9.       //Calcul du nombre total de caractère de $nom grace a la fonction strlen  
  10.       $nb_car = strlen($nom);
  11.       //Boucle resortant la valeur des lettres en les aditionnant       
  12.       for ($i = 1; $i < $nb_car; $i++)
  13.       {
  14.         $long += $a_long[$nom[$i]][$nom[$i - 1]];
  15.       }
  16.       //la fonction longueur_nom ressort la variable $long  
  17.       return $long;
  18.    }


 
le but etant d'apliquer a chaque lettre la taille en fonction de la lettre précédente

n°952452
kiruah
Posté le 13-01-2005 à 15:51:14  profilanswer
 

Code :
  1. <?php
  2. require_once('../../Connections/modif.php');
  3. mysql_select_db($database_modif, $modif);
  4. $nom="AVDEFRGGD" ;
  5. $nb_car = strlen($nom);
  6. for ($i = 1; $i < $nb_car; $i++)
  7.    {
  8.   
  9.     $sql = "SELECT $nom[$i] FROM caractere WHERE lettre_Precedente = ".$nom[$i-1]."<br>";
  10.     $lettre = mysql_query($sql, $modif) or die(mysql_error());
  11.     $row_lettre = mysql_fetch_assoc($lettre);
  12.     echo $sql;
  13.     echo $row_lettre[$nom[$i]];
  14.    }
  15. ?>


 
voila ce que j'ai fait mais ca ne marche pas peut on mettre une connection dans une boucle ?
 
l'erreur est incomprensible  
 

Code :
  1. Erreur de syntaxe près de '' à la ligne 1


Message édité par kiruah le 13-01-2005 à 15:53:56
n°952454
Profil sup​primé
Posté le 13-01-2005 à 15:53:08  answer
 

WHERE lettre_Precedente = ".$nom[$i-1]."<br>"; [:wam]

n°952457
kiruah
Posté le 13-01-2005 à 15:56:37  profilanswer
 

chacal_one333 a écrit :

WHERE lettre_Precedente = ".$nom[$i-1]."<br>"; [:wam]


oula oui hihi, j'avai testé de faire un echo sur $sql et j'ai oublié de réenlever le <br> ^^

mood
Publicité
Posté le 13-01-2005 à 15:56:37  profilanswer
 

n°952458
Xav_
The only one...
Posté le 13-01-2005 à 15:58:11  profilanswer
 

dans la close du where il te faut mettre des simples quotes autour de ta variable, c'est la syntaxe SQL qui l'impose...
Et par contre, <br> dans ta requete, je suis sceptique...
 
 
essaie la condition:

Code :
  1. "WHERE lettre_Precedente = '".$nom[$i-1]."'"


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°952460
Profil sup​primé
Posté le 13-01-2005 à 15:58:22  answer
 

et ton $nom[$i] je doute qu'il passe
 
 
 

$sql = "SELECT ".$nom[$i]." FROM caractere WHERE lettre_Precedente = '".$nom[$i-1]."'";


 
[:grilled]


Message édité par Profil supprimé le 13-01-2005 à 15:58:47
n°952462
kiruah
Posté le 13-01-2005 à 16:03:26  profilanswer
 

chacal_one333 a écrit :

et ton $nom[$i] je doute qu'il passe
 
 
 

$sql = "SELECT ".$nom[$i]." FROM caractere WHERE lettre_Precedente = '".$nom[$i-1]."'";


 
[:grilled]


a oui ben justement avec ou sans ca marche que je mette le ".$nom[$i]." ou que je le laisse dans la chaine de caractère ca passe  

n°952469
Xav_
The only one...
Posté le 13-01-2005 à 16:11:05  profilanswer
 

kiruah a écrit :

a oui ben justement avec ou sans ca marche que je mette le ".$nom[$i]." ou que je le laisse dans la chaine de caractère ca passe


 
c'est pas le fait qu'il soit dans la chaine ou pas qui nous inquiété, la chaine principale étant en double quote, PHP remplacera la variable par sa valeur, par contre il faut normalement des simples quotes en plus pour que SQL accepte la requete...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°952556
kiruah
Posté le 13-01-2005 à 17:56:53  profilanswer
 


et j'aimerais initialiser ma variable $nom[$i-1] car j'ai une erreur quand elle corespond a 0-1

Code :
  1. Notice: Uninitialized string offset: -1 in e:\program files\easyphp1-7\www\excel\final\calcul2.php on line 25


donc je donne une valeur :

Code :
  1. $nom[-1]="ESP";


ESP etant le champs espace dans ma base de donnée et il me retourne cette erreur

Code :
  1. Warning: Illegal string offset: -1 in e:\program files\easyphp1-7\www\excel\final\calcul2.php on line 19


Message édité par kiruah le 13-01-2005 à 18:43:54
n°952682
Xav_
The only one...
Posté le 13-01-2005 à 21:23:39  profilanswer
 

je crois pas que t'es le droit d'utiliser un index négatif pour chosiir une lettre d'un mot... la lettre de rend -1 n'existe pas dans $nom...
 
rajoute un if avant ton $sql=...etc...
if i-1>0 tu prend ta requete, else tu fait un where lettre_precedente='ESP'


Message édité par Xav_ le 13-01-2005 à 21:24:07

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°953018
kiruah
Posté le 14-01-2005 à 11:46:52  profilanswer
 

Xav_ a écrit :

je crois pas que t'es le droit d'utiliser un index négatif pour chosiir une lettre d'un mot... la lettre de rend -1 n'existe pas dans $nom...
 
rajoute un if avant ton $sql=...etc...
if i-1>0 tu prend ta requete, else tu fait un where lettre_precedente='ESP'


 
Ca marche :D
 
 
Maintenant le problème c'est quand je saisie un espace j'ai mis une condition :

Code :
  1. if ($nom[$i]=" " )
  2.   {
  3.    $nom[$i]="ESP";
  4.   }


 
mais ca ne marche pas la programme arrète sa boucle


Message édité par kiruah le 14-01-2005 à 11:48:27
n°953036
Xav_
The only one...
Posté le 14-01-2005 à 12:03:41  profilanswer
 

normal, tjs le meme pb...
je crois que tu n'a pas bien compris ce que tu es en train de faire:
1/ $nom est une variable contenant un mot
2/ en programmation un mot est vu comme un tableau (à une ligne) de lettre
3/ donc $nom[0] est la 1ère lettre d'un mot (la lettre de rang -1 n'existe pas] --> pb d'avant
4/ "ESP" ça fait 3 lettres, que tu essai de mettre dans une seul en faisant $nom[$i]="ESP" --> nouveau pb
 
donc il ne faut pas que tu joue sur $i ou $nom, c'est ton mot de départ, il faut jouer une fois de plus sur le "where"
 

Code :
  1. if (($i-1<0) || ($nom[$i]==" " ))
  2. {
  3.   $sql = "SELECT $nom[$i] FROM caractere WHERE lettre_Precedente = 'ESP'"     
  4. }
  5. else
  6. {
  7.   $sql = "SELECT $nom[$i] FROM caractere WHERE lettre_Precedente = ".$nom[$i-1];     
  8. }


là ça doit pouvoir le faire ;)
 
EDIT: corrigé la boulette du "=" en "==" ;)


Message édité par Xav_ le 14-01-2005 à 17:35:54

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°953218
kiruah
Posté le 14-01-2005 à 16:43:35  profilanswer
 

Code :
  1. <?php
  2. require_once('include/config.php');
  3. $nom = "aeiofdfdsfdu y";
  4. echo $nom."<br>";
  5. mysql_select_db($database_modif, $modif);
  6. $nb_car = strlen($nom);
  7. for ($i = 1; $i < $nb_car; $i++)
  8.    {
  9.   $z=$nom[$i-1];
  10.   if ($nom[$i]=" " )
  11.   {
  12.     $sql = "SELECT 'ESP' FROM caractere WHERE lettre_Precedente = '$z'";     
  13.   }
  14.   else
  15.   {
  16.     $sql = "SELECT `$nom[$i]` FROM caractere WHERE lettre_Precedente = '$z'";     
  17.   }
  18.   echo $sql."<br>";
  19.    }
  20. ?>


ca deconne en resultat j'ai  
 

Code :
  1. aeiofdfdsfdu y
  2. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = 'a'
  3. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  4. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  5. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  6. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  7. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  8. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  9. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  10. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  11. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  12. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  13. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  14. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '


 
je comprend pas pouquoi la condition ne marche pas


Message édité par kiruah le 14-01-2005 à 16:45:08
n°953253
Xav_
The only one...
Posté le 14-01-2005 à 17:34:04  profilanswer
 

Citation :

je comprend pas pouquoi la condition ne marche pas


paske je suis un boulet et que tu as recopié ma connerie !!!
une condition n'est pas une affectation:
if ($nom[$i]==" " ) ...etc...
 
avec un seul "=" tu test pas si c'est un espace --> tu le remplace par un espace !!!
 
EDIT: par contre l'affichage de ta requete qui te montre que chaque lettre à été remplacée par un espace, ça mettait sur la voie ;)


Message édité par Xav_ le 14-01-2005 à 17:37:58

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°953258
kiruah
Posté le 14-01-2005 à 17:48:31  profilanswer
 

[citation=953253,0,20][nom]Xav_ a écrit[/nom]
paske je suis un boulet [citation]
 
et moi un gros gros boullletttt [:buvons]
 
une condition n'est pas une affectation
une condition n'est pas une affectation
une condition n'est pas une affectation
une condition n'est pas une affectation
une condition n'est pas une affectation
une condition n'est pas une affectation
une condition n'est pas une affectation
...  
 
je le copieré 100 fois ^^
 
merci en tout cas  :bounce:  
 

n°953948
kiruah
Posté le 16-01-2005 à 16:46:05  profilanswer
 

Code :
  1. <?php
  2. $nom="AVDERGGD   1D";
  3. $nb_car = strlen($nom);
  4. for ($i = 1; $i < $nb_car; $i++)
  5.    {
  6.   $z=$nom[$i-1];
  7.   if ($nom[$i]==" " )
  8.   {
  9.      $sql = "SELECT 'ESP' FROM caractere WHERE lettre_Precedente = '$z'";
  10.          
  11.   }
  12.   elseif($z==" " )
  13.   {
  14.      $sql = "SELECT `$nom[$i]` FROM caractere WHERE lettre_Precedente = 'ESP'";   
  15.   }
  16.   elseif($nom[$i]==" " && $z==" " )
  17.   {
  18.      $sql = "SELECT `ESP` FROM caractere WHERE lettre_Precedente = 'ESP'";   
  19.   }
  20.   else
  21.   {
  22.      $sql = "SELECT `$nom[$i]` FROM caractere WHERE lettre_Precedente = '$z'"; 
  23.   }
  24.   $chiffre = mysql_query($sql, $modif) or die(mysql_error());
  25.   $row_chiffre = mysql_fetch_assoc($chiffre);
  26.   $totalRows_chiffre = mysql_num_rows($chiffre);
  27.   echo $sql."<br>";
  28.     
  29.    }
  30. ?>


Résultat

Code :
  1. SELECT `V` FROM caractere WHERE lettre_Precedente = 'A'
  2. SELECT `D` FROM caractere WHERE lettre_Precedente = 'V'
  3. SELECT `E` FROM caractere WHERE lettre_Precedente = 'D'
  4. SELECT `R` FROM caractere WHERE lettre_Precedente = 'E'
  5. SELECT `G` FROM caractere WHERE lettre_Precedente = 'R'
  6. SELECT `G` FROM caractere WHERE lettre_Precedente = 'G'
  7. SELECT `D` FROM caractere WHERE lettre_Precedente = 'G'
  8. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = 'D'
  9. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  10. SELECT 'ESP' FROM caractere WHERE lettre_Precedente = ' '
  11. SELECT `1` FROM caractere WHERE lettre_Precedente = 'ESP'
  12. SELECT `D` FROM caractere WHERE lettre_Precedente = '1'

comment se fait t'il k'il reste des ' ' ma condition etait de remplacer tout les ' ' par des 'ESP' :'(


Message édité par kiruah le 16-01-2005 à 16:47:33
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Faire une boucleuu

 

Sujets relatifs
[HTML/PHP] mes accents ne passent pas ![PHP] Erreur lors d'un test d'un cookie inexistant [Résolu]
php et liensliens html vers pages php
Problème avec un code PHPEnvoi d'une newsletter par PHP.
Contenu PHP / Design CSS[PHP]Récuperation d'une boucle en variable
Gestion de modèle de page avec PHPInstaller un module PHP avec un hébergement mutualisé
Plus de sujets relatifs à : [PHP]Faire une boucleuu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR