Se connecter avec
S'enregistrer | Connectez-vous

Substr_replace PHP

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte
Expert Programmation

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. }

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
Expert Programmation

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.

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.
Expert Programmation

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. }

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: 
Expert Programmation

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 ?

    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

    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
    Expert Programmation

    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 ;) 
    Lassé par la pub ? Créez un compte
    Tom's guide dans le monde