Votre question

Substr_replace PHP

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
13 Mai 2010 23:56:20

Bonsoir

J'ai un problème concernant le remplacement d'une chaine de caractère au moment voulu.
Donc dans ma base de donnée j'ai des numéro de téléphones qui sont stockés.
Et moi ce que je veux faire c'est mettre un virgule à la dernière position de ma chaine de caractère.

J'ai fait ca:
  1. $req=mysql_query("SELECT numero,droit FROM tbl_user WHERE droit= TRUE ") or die(mysql_error());
  2. while($row=mysql_fetch_object($req)){
  3.  
  4. $destinataire=substr_replace("$row->numero",",",12,0);
  5. echo $destinataire;
  6.  
  7. }


donc à priori cette méthode marche très bien, mais pas comme je voudrai, car vu de cette façon, ca me rajoute une virgule à chaque chaine de caractère comme par ex si j'ai 2 numéros j'aurais: +33612345678,+336891011123,
Or moi ce que je veux faire c'est ajouté une virgule entre chaque nouveau numero et enlever la virgule qui traine derrière.

Dois je faire une boucle?
Cordialement

Autres pages sur : substr replace php

a c 232 L Programmation
14 Mai 2010 14:25:53

Salut,

Ca devrait le faire :
  1. $req=mysql_query("SELECT numero,droit FROM tbl_user WHERE droit= TRUE " ) or die(mysql_error());
  2. int rowCount = mysql_row_count($req);
  3. int i = 1;
  4. while($row=mysql_fetch_object($req)){
  5. $destinataire= $row->numero + (i == rowCount) ? "" : ",";
  6. echo $destinataire;
  7. i++;
  8. }
m
0
l
14 Mai 2010 14:39:47

Merci beaucoup, mais peux tu m'expliquer comment marche ce script?
De plus je n'ai pas très bien compris a quoi sert le "?"
Citation :
$destinataire= $row->numero + (i == rowCount) ? "" : ",";

Merci de m'avoir aidé.
Cordialement
m
0
l
Contenus similaires
14 Mai 2010 15:05:13

J'ai un parse error sur cette ligne "int rowCount = mysql_row_count($req);"
est ce qu'il faut pas mettre un $ a la place de int?
m
0
l
a c 232 L Programmation
14 Mai 2010 15:48:12

Oups pardon, en effet c'est du PHP, j'ai oublié de mettre les $ devant les noms de variables, et puis je suis pas sûr qu'on ai besoin de mettre de "int" devant les variables en PHP. Désolé, je faisais du C# à côté :) 
Ca donnerait plutôt :
  1. $req=mysql_query("SELECT numero,droit FROM tbl_user WHERE droit= TRUE " ) or die(mysql_error());
  2. $rowCount = mysql_row_count($req);
  3. $i = 1;
  4. while($row=mysql_fetch_object($req)){
  5. $destinataire= $row->numero + ($i == $rowCount) ? "" : ",";
  6. echo $destinataire;
  7. $i++;
  8. }


Et pour l'explication de :
  1. ($i == $rowCount) ? "" : ","

C'est une condition (un if) ternaire équivalent à
  1. if ($i == $rowCount)
  2. return "";
  3. else
  4. return ",";


On regarde si le numéro de ligne actuel est égal au nombre de lignes dans la requête, si c'est égal, on ne concatène rien au numéro, et sinon on concatène une virgule.
m
0
l
16 Mai 2010 22:55:04

Okay merci mais, j'ai une page blache, rien ne se passe.
m
0
l
a c 232 L Programmation
16 Mai 2010 23:35:52

Hmm peut être le mysql_row_count qui existe pas :D 
Remplaces le par mysql_num_rows
m
0
l
16 Mai 2010 23:45:34

j'ai fait un echo de mysql_num_rows
il me renvoi 22
est ce normal ?
surtout que je n'ai que 3 enregistrements
m
0
l
16 Mai 2010 23:59:40

ah au temps pour moi,
le echo je l'avais mis dans la boucle, hehe
donc etant donnée que j'ai 2 lignes, ca me print deux fois...
m
0
l
17 Mai 2010 00:46:05

j'essaye de refaire à ma sauce avec des if pour mieux comprendre, mais je sèche vraiment.
$req1=mysql_query("SELECT id_user,numero,droit FROM tbl_user WHERE droit= TRUE ");
$nombre=mysql_num_rows($req1);
//echo $nombre;
while($row=mysql_fetch_object($req1)){
$i++;
if($nombre == 1){
echo $row->numero;

}
else {

$num_modif=$row->numero ;
}



}

je n'y arrive pas, che pas quoi mettre pour ajouter une virgule uniquement entre les deux numeros.
m
0
l
a c 232 L Programmation
17 Mai 2010 01:29:37

Hmm...
  1. while($row=mysql_fetch_object($req1)){
  2. $i++;
  3. if($i == $nombre) {
  4. // on est arrivé au dernier élément, il n'a pas besoin de virgule
  5. echo $row->numero;
  6. }
  7. else {
  8. // ce n'est pas encore le dernier élément, on ajoute une virgule
  9. echo $row->numero . ", ";
  10. }
m
0
l
17 Mai 2010 01:33:31

Oui c'est tout a fait faisable, mais le problème c'est que je ne doit pas avoir de virgule à la fin de ma deuxième
chaines. Sans quoi la fonction soap ne marche pas, car cela implique qu'il manque un numero.
Voila
Cordialement :hello: 
m
0
l
a c 232 L Programmation
17 Mai 2010 09:10:46

Je n'ai pas compris...
Si tu as 2 chaines dans ta base de données :
  • $nombre = 2 et avant d'entrer dans le while, $i=0
  • on entre dans le while, $i = 1, $i est différent de $nombre, donc on affiche le numéro et une virgule
  • on boucle dans le while, $i = 2, $i est égal à $nombre, donc on affiche seulement le numéro

    Qu'est ce qui ne va pas là dedans ?
    m
    0
    l
    17 Mai 2010 12:19:50

    Salut Omar,
    Voila dans ma base de donnée j'ai exactement deux numéros de portables qui sont à TRUE;
    Donc moi ce que je voudrais c'est simplement ajouter une virgule entre deux numéros de téléphone,
    Comme: +3361234578,+331234678 GOOD
    et ainsi de suite:
    +3361234567,+3361234678,+3312364578 GOOD
    Mais je ne doit pas avoir de virgule à la fin de du dernier numéro:
    +336123456,+3312345678, : FAUX

    Voici une méthode qui permet d'envoyer un sms via la lib SOAP!

    1. $result=$soap->telephonySmsAccountList($session);
    2. $soap->telephonySmsSend($session, "$result[0]", "$expéditeur", "$destinataire", "Alerte! une intrusion a ete detecte", "fale", "1", "0", "3");


    Dans cette méthode telephonySmsSend, le paramètre $destinataire: c'est justement les numéros que je récupère de ma base de donnée'si il y en a plusieurs) et je les affiche dans cette fonction.
    Donc en aucun cas je dois avoir de virgule qui traine à la fin des numéros, mais toujours entre deux numéros ou trois ou quatre ect... consécutif sans quoi elle va crier ^^

    En gros la syntaxe que je doit adopter est la suivante:
    1. $soap->telephonySmsSend($session, "$result[0]", "$expéditeur", "+33612345678,+3312345678", "Alerte! une intrusion a ete detecte", "fale", "1", "0", "3");



    Ou si il n'y a qu'un seul numéro, on ajoute pas de virgule:
    1. $soap->telephonySmsSend($session, "$result[0]", "$expéditeur", "+3312345678", "Alerte! une intrusion a ete detecte", "fale", "1", "0", "3");


    MAIS JAMAIS une virgule à la fin!!!!
    1. $soap->telephonySmsSend($session, "$result[0]", "$expéditeur", "+3312345678,+33123645678,", "Alerte! une intrusion a ete detecte", "fale", "1", "0", "3");


    Je ne sais pas si ta compris?
    Cordialement
    m
    0
    l
    a c 232 L Programmation
    17 Mai 2010 12:58:46

    oui j'ai compris.
    Mais le code que je t'ai donné te fait ça, non ? :) 
    m
    0
    l
    17 Mai 2010 16:15:04

    Hmm mais chez moi ca ne marchait pas,
    mais j'ai trouvé la solution c'est d'utiliser la fonction implode, et ca marche bien $_$

    J'ai fait comme ceci:
    1. $req1 = mysql_query("SELECT id_user,numero,droit FROM tbl_user WHERE droit= TRUE ");
    2. $liste = array();
    3. while($row=mysql_fetch_object($req1))
    4. {
    5. $liste[] = $row->numero;
    6. }
    7.  
    8. echo implode(',',$liste).'</br>';


    Et ca marche ;) 

    Cordialement
    m
    0
    l
    a c 232 L Programmation
    17 Mai 2010 17:29:20

    Oui, c'est une autre solution, mais ça fait utiliser un array supplémentaire :) 

    Je n'avais pas testé ma méthode directement, mais bizarre que ça ne marche pas. Enfin bon, tant mieux si tu as réussi à résoudre ça ;) 
    m
    0
    l
    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS