TranceAddict Forums

TranceAddict Forums (www.tranceaddict.com/forums)
- Europe - France
-- Problème de PHP, j' m' en sors pas...


Posted by Insigma on Feb-19-2003 17:48:

Unhappy Problème de PHP, j' m' en sors pas...

Bon alors voilà j' expose.

Le code ASCII A à Z ca donne de A jusqu' à Z, ca c' est OK.

Si j' ai une variable $ascii='A'
echo $ascii; retourne A.

Bon OK, on continue...

J'ai ma base de données avec par exemple
Armin,
Bob,
Zoe,
Abdel,
Julien,
...

Je veux comptabiliser combien il y a de noms qui commencent par A(Y en a 2 donc !)

$req=mysql_query("SELECT noms FROM TABLE");
$compte="0";

While($cherche=mysql_fetch_array($req))
{
if($calcul=strstr($cherche['noms'], "$ascii")
{
$compte=$compte+1;
}
}
echo $compte;

Voilà mon pb, si ma variable de départ est $ascii="A", ca marche, mon echo $compte me retourne bien le 2 mais si je laisse mon $ascii='A' mon echo $compte me retourne 0.
Et vu que je fais ca pour toutes les lettres de l' alphabet ca m' était plus facile de faire une boucle en faisant des +1 sur le code ascii plutot que de mettre A>...>Z

J' espère m' etre bien fait comprendre et que vous trouverez une réponse à mon problème.

D' avance merci !


Posted by PEZ68 on Feb-19-2003 18:15:

C est quoi la différence entre $ascii='A' et $ascii="A"?


Posted by maxxyme on Feb-19-2003 18:32:

Il me semble que c'est un problème de différence entre un caractère et une chaîne de caractères.

$ascii="A" => ça doit être pour le caractère A
$ascii='A' => ça doit être pour la chaîne de caractères A

et en fait tu peux pas faire + 1 sur une chaîne de caractères... (enfin il me semble) ... je vais essayer de regarder ça ce soir (vite fait)

En fait vaudrait mieux que tu fasses une requête du type SELECT COUNT(*) FROM table WHERE nom LIKE "A%"
c'est mieux puisque c'est ta base de onnées qui va te compter directement le nombre de noms qui commencent par A...

et donc ta requête tu la fabriques au fur et à mesure que tu avances dans ta boucle.


Posted by Nightflowers on Feb-19-2003 18:38:

la solution pour regler le problem est de passer par le code du caractere.
Comme ca en plus tu pourra faire ton incrementation

la fonction c'est ca:
string chr(int)
voila


Posted by Insigma on Feb-19-2003 18:59:

Bon alors on efface tout on recommence...
Chui dsl, j' avais pas relu mon post...

Ma deuxième phrase, je voulais dire
"Le code ASCII &.#.6.5 à &.#.9.0(sans les points évidemment) ca donne de A jusqu' à Z, ca c' est OK."

Et comme je dois faire ca pour toutes les lettres de l' alphabet Maxx, ton truc marche mais ca me fait écrire 26 lignes

Moi je veux faire une boucle ou $ascii=&.#.6.5;

$ascii=$ascii+1; juska $ascii=&.#.9.0

Voilà j' espère m' etre fait comprendre

PS; il n' y a pas de pb de caractères-chaines de caractères...J' ai essayé


Posted by mr_sick on Feb-19-2003 20:49:

quote:
Originally posted by maxxyme
Il me semble que c'est un problème de différence entre un caractère et une chaîne de caractères.

$ascii="A" => ça doit être pour le caractère A
$ascii='A' => ça doit être pour la chaîne de caractères A

et en fait tu peux pas faire + 1 sur une chaîne de caractères... (enfin il me semble) ... je vais essayer de regarder ça ce soir (vite fait)

En fait vaudrait mieux que tu fasses une requête du type SELECT COUNT(*) FROM table WHERE nom LIKE "A%"
c'est mieux puisque c'est ta base de onnées qui va te compter directement le nombre de noms qui commencent par A...

et donc ta requête tu la fabriques au fur et à mesure que tu avances dans ta boucle.


C'est ce que j'aurais fait aussi...


Posted by LoginZ on Feb-19-2003 20:56:

Je pense que le mieux c'est d'aller sur irc #tranceaddict

et de demander à Swamper parce que sur le php a aujourd'hui il doit en connaitre un bout...


Posted by Nightflowers on Feb-19-2003 21:15:

quote:
Originally posted by stanymi
Bon alors on efface tout on recommence...
Chui dsl, j' avais pas relu mon post...

Ma deuxième phrase, je voulais dire
"Le code ASCII &.#.6.5 à &.#.9.0(sans les points évidemment) ca donne de A jusqu' à Z, ca c' est OK."

Et comme je dois faire ca pour toutes les lettres de l' alphabet Maxx, ton truc marche mais ca me fait écrire 26 lignes

Moi je veux faire une boucle ou $ascii=&.#.6.5;

$ascii=$ascii+1; juska $ascii=&.#.9.0

Voilà j' espère m' etre fait comprendre

PS; il n' y a pas de pb de caractères-chaines de caractères...J' ai essayé


t'as essayé ma solution?
tu peux essayer de faire une boucle de 65 a 90 ke tu fou dans un param style $i et apres tu fou
$ascii=&#$i;
ou
$ascii=chr($i);


Posted by Insigma on Feb-19-2003 21:39:

quote:
Originally posted by Nightflowers
t'as essayé ma solution?
tu peux essayer de faire une boucle de 65 a 90 ke tu fou dans un param style $i et apres tu fou
$ascii=&#$i;
ou
$ascii=chr($i);



Ca c pas le pb;

dans
quote:
if($calcul=strstr($cherche['noms'], "$ascii")


Si $ascii="&.#.6.5"; ca marche pas.
Si $ascii="A"; ca marche.

Je pense pas que tu aies compris mon pb...
La ca doit etre mieux nan ?

En tout k, merci de votre aide ben précieuse..
J' ai posté sur phpdebutant
forum phpdebutant et un mec me parle de la fonction ord() que j' essaierai demain...Pkoi demain ?Lisez mon dernier post, MDR !!!!!


Posted by Nightflowers on Feb-19-2003 22:57:

ce que je comprend pas c'est ca :

$ascii="&.#.6.5";

tu veux avoir quoi dans $ascii en fait, tu veux avoir "A" ou "&.#.6.5" ?

je veux dire, "&.#.6.5" c'est sencé etre égal à "A"?
parce que si c'est le cas $ascii=chr(65); ca marche
je capte pas la


Posted by Insigma on Feb-20-2003 05:13:

Je veux éviter d' avoir $ascii=A, $ascii1=B...$ascii25=Z.
C' est pour ca qu' avec le code ascii, vu qu' il y a des chiffres, je pouvais faire une boucle.

Mais ton chr(65) renvoit A ?
Ben alors si ca ca marche, je vais essayer car je connaissais pas .
Je te redis tout ca ce soir.Merci de ton(votre) coup de main !Super sympa.


Posted by Nightflowers on Feb-20-2003 11:58:

ouaip ca renvoit A

quote:

chr
(PHP 3, PHP 4 )

chr -- Retourne un caractère spécifique
Description
string chr ( int ascii)

chr retourne une chaîne d'un seul caractère, dont le code ASCII est donné par le paramètre ascii.


d'ailleur je te conseil ce site qui est incontournable et meme indispensable : http://www.php.net/manual/fr/
y'a un moteur de recherche de fonctions etc... c'est bien foutu


Posted by Insigma on Feb-20-2003 12:06:

quote:
Originally posted by Nightflowers
ouaip ca renvoit A



d'ailleur je te conseil ce site qui est incontournable et meme indispensable : http://www.php.net/manual/fr/
y'a un moteur de recherche de fonctions etc... c'est bien foutu


Ouaip je connais, d' ailleurs le Damien SEGUY, il s' occupe aussi de nexen je crois.A mon avis, le mec assure à peine en PHP


Posted by Nightflowers on Feb-20-2003 12:11:

quote:
Originally posted by stanymi
Ouaip je connais, d' ailleurs le Damien SEGUY, il s' occupe aussi de nexen je crois.A mon avis, le mec assure à peine en PHP


ouai a peine


Posted by maxxyme on Feb-21-2003 15:13:

Pour Stan

Solution finale :
j'ai bossé ça ce midi:

Avec la table suivante
#
# Structure de la table `table_test`
#
quote:
CREATE TABLE table_test (
nom varchar(16) NOT NULL default ''
) TYPE=MyISAM;

#
# Contenu de la table `table_test`
#

INSERT INTO table_test VALUES ('Armin');
INSERT INTO table_test VALUES ('Shito');
INSERT INTO table_test VALUES ('Lytchix');
INSERT INTO table_test VALUES ('Stan');
INSERT INTO table_test VALUES ('Tiesto');
INSERT INTO table_test VALUES ('Svenson');
INSERT INTO table_test VALUES ('Gielen');
INSERT INTO table_test VALUES ('Dumonde');


Le source php
quote:
mysql_connect('localhost', 'test', '')
or die(mysql_error());
mysql_select_db('test')
or die(mysql_error());
$lettre = 'A';
echo '
';
for ($i=0 ; $i<26; $i++) {
$query = 'SELECT COUNT(*) FROM table_test WHERE nom LIKE "' . $lettre . '%";';
$result = mysql_query($query)
or die(mysql_error());
$row = mysql_fetch_row($result);
if ($row[0])
echo $lettre, " => ", $row[0], "\n";
$lettre++;
}
echo '
';
?>


La sortie ça donne ça:
quote:
A => 1
D => 1
G => 1
L => 1
S => 3
T => 1


Voilà voilà



Powered by: vBulletin
Copyright © 2000-2021, Jelsoft Enterprises Ltd.