Demande d'explication

Fermé
papyrus_12 Messages postés 2 Date d'inscription samedi 9 mars 2019 Statut Membre Dernière intervention 10 mai 2019 - Modifié le 9 mars 2019 à 18:10
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 - 9 mars 2019 à 18:48
Bonjour les ami(e)s,
je dois ecrire un programme d'envoie d'sms en masse.
Les numeros sont uploadés à partir d'un formulaire dans un fichier .txt, maintenant si l'un de ces numeros appartient à un utilisateur qui est dans notre base de donnée, le slode de celui-ci doit etre incrementé de 10f.
Mon problème est que les numeros envoyés du fichier reçoivent les sms mais le solde ne s'incremente pas.
vraiment j'ai besoin de votre aide, si non je risque de passer à la casserole.
Voici mon code :
<?php
session_start();
    if(isset($_POST['envoyer']) And !empty($_POST['nombresms']) And !empty($_FILES['destinataire']) And $_FILES['destinataire']['error'] == 0 And !empty($_POST['expediteur']) And !empty($_POST['message'])){
        
        // initialization of the necessary variables for the program structure
        //initialisation des variable necessaire pour la structure du programme
        $compteurSms = 0;
        $smsErreur = 0;
        $smsSucces = 0;

        // receive the number of messages requested by the client
        //reception du nombre de message demandé par le client

        $nombreSms = strip_tags($_POST['nombresms']);
        $nombreSms = htmlspecialchars($nombreSms);

        // receive the recipient's number
        //reception du numero du destinataire

        $expediteur = strip_tags($_POST['expediteur']);
        $expediteur = htmlspecialchars($expediteur);

        // receipt and control of the file containing the customer's numbers, not complete control
        //recption et controle du fichier contenant les numeros du client, controle pas au complet

        if($_FILES['destinataire']['size'] < 2097152){
            $info_fichier = pathinfo($_FILES['destinataire']['name']);
            $extension_upload = $info_fichier['extension'];
            $extension_autorises = array('txt');
            if(in_array($extension_upload, $extension_autorises)){
                $cart = "Joseph";
                $destination = "Papyrus/".$cart."_".$info_fichier.".".$extension_upload;
                $deplacement = move_uploaded_file($_FILES['destinataire']['tmp_name'], $destination);

                // read the file to retrieve the numbers one by one!
                //lecture du fichier pour recuperer les numeros une à une !

                $ouverture = fopen($destination, 'r+');
                while($lecture = fgets($ouverture)){
                    $char ="+";
                    $prefix = 225;
                    $lecture = $char.$prefix.$lecture;

                    // infobip control
                    //infobip control
                    $to = $lecture;
                    $text = $_POST['message'];
                    $text = strip_tags($text);
                    $text = htmlspecialchars($text);
                
                    $username = "xxxxxxxx";
                    $password = "xxxxxxxx";
                
                    $from = $expediteur;
                    $messageId = "xxxxxxxxxxx";
                    $postUrl = "https://83k51.api.infobip.com/sms/1/text/advanced";
                
                    // creation of SMS sending object 
                    // creation d'objet d'envoie d'sms
                    $destination = array("messageId" => $messageId,
                    "to" => $to);
                
                    $message = array("from" => $from,
                    "destinations" => array($destination),
                    "text" => $text);
                
                    $postData = array("messages" => array($message));
                    $postDataJson = json_encode($postData);
                
                    $ch = curl_init();
                    $header = array("Content-Type:application/json", "Accept:application/json");
                
                    curl_setopt($ch, CURLOPT_URL, $postUrl);
                    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
                    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
                    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
                    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
                    curl_setopt($ch, CURLOPT_MAXREDIRS, 2);
                    curl_setopt($ch, CURLOPT_POST, 1);
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $postDataJson);
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
                    // response of the POST request
                    $response = curl_exec($ch);
                    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                    $responseBody = json_decode($response);
                    curl_close($ch);

                    if ($httpCode >= 200 && $httpCode < 300) {
                        $messages = $responseBody->messages;
       
                        $compteurSms = $compteurSms + 1;
                        $smsSucces = $smsSucces + 1;
                        $compte = 0;

                        // selection of the number in the database
                        //selection du numero dans la base de donnee

                        $requete = $base->query('SELECT * FROM clients WHERE Numero = "'.$num.'" ');
                        $conteneur = $requete->fetch();

                        // check if the request is not null
                        //verification si la requete n'est pas null

                        if($conteneur['Pseudo'] != NULL){
                           $temp_user = $conteneur['Pseudo'];
                           $compte = $conteneur['Solde'] + 10;

                           // update user account
                           //mise a jour du compte user
                           $order = $base->prepare('UPDATE clients SET Solde = :solde WHERE Pseudo = "'.$temp_user.'"');
                           $order ->execute(array(
                               'solde' => $compte
                           ));
                        }
                   } 
                   else {
                       $compteurSms = $compteurSms + 1;
                       $smsErreur = $smsErreur + 1;
                   }
                }
                fclose($ouverture);
                $_SESSION['totalSms'] = $nombreSms;
                $_SESSION['smsSucces'] = $smsSucces;
                $_SESSION['smsErreur'] = $smsErreur;
                xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            }
            else{
                xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            }
        }
        else{
            xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        }
    }
    else{
        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
    }
?>


EDIT : Ajout des balises de code

2 réponses

jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
9 mars 2019 à 18:14
Bonjour,

Commence par gérer correctement les éventuelles erreurs au niveau des requêtes
Pour ça, applique ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Je te conseille également de suivre les recommandations présentes ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Reviens nous voir une fois ces conseils appliqués avec ton code modifié si ton souci persiste.

PS: N'hésites pas à mettre des echo dans ton code pour essayer de voir si tu passes bien dans tes IF et voir le contenu de tes variables correspond bien à ce que tu attends....




0
Merci pour la reponse, je vais menager mon code et je verrai le resultat !
0
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 Ambassadeur 1 568
9 mars 2019 à 18:48
bonjour, n'est-il pas plus simple de faire
UPDATE clients SET Solde = Solde + 10 WHERE ...
?
0