PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 23-11-2017 09:06:06

Falakiko
Membre
Inscription : 23-11-2017
Messages : 1

PHP problèmes de concaténation d'une variable

Bonjour à tous,
Une variable à la sortie de mon code reste invariablement nulle, peu importe mes différentes tentatives.
Je récupère des variables HTML qui sont injectés dans le fichier php qui lui en exporte via JSON.
Voici mon code php dans ses grandes lignes :

<?php

  $success = true;
  $error1 = false;
  $error2 = false;

     // ReCAPTCHA
     // grab recaptcha library
     require_once "recaptchalib.php";
     
     // foreach ($_POST as $key => $value) {
     // echo '<p><strong>' . $key.':</strong> '.$value.'</p>';
     // }
     
     // your secret key
     $secret = "***_***";
 
     // empty response
     $response = null;
 
     // check secret key
     $reCaptcha = new ReCaptcha($secret);
     
     // if submitted check response
     if ($_POST["g-recaptcha-response"])
   {
            $response = $reCaptcha->verifyResponse
    (
                   $_SERVER["REMOTE_ADDR"],
                   $_POST["g-recaptcha-response"]
                );
          }
     
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = 'dest1@mon.site,dest2@mon.site';

// objet du message
$objet = 'Contact depuis le site le ***';

// formulaire envoyé, on récupère tous les champs.
    $firstnameint     = (isset($_POST['firstname']))     ? Rec($_POST['firstname'])        : '';
    $lastnameint      = (isset($_POST['lastname']))      ? Rec($_POST['lastname'])         : '';
    $email            = (isset($_POST['email']))         ? Rec($_POST['email'])            : '';
    $usrtelint        = (isset($_POST['usrtel']))        ? Rec($_POST['usrtel'])           : '';
    $people           = (isset($_POST['people']))        ? Rec($_POST['people'])           : '';
    $messageint       = (isset($_POST['message']))       ? Rec($_POST['message'])          : '';
    $copieint         = (isset($_POST['copie']))         ? Rec($_POST['copie'])            : '';
         
// traitement du numéro de téléphone et aux variables
  $firstname = htmlspecialchars($firstnameint);
  $lastname = htmlspecialchars($lastnameint);
  $usrtel = htmlspecialchars($usrtelint);
  $message = htmlspecialchars($messageint);
        $copie = htmlspecialchars($copieint);
   
if (isset($_POST['submit']))
{
  if ($response != null && $response->success)
    {    
        if (($firstname != '') && ($lastname != '') && ($email != '') && ($usrtel != '') && ($people != '') && ($message != '') && ($copie != ''))
        {
            // les 6 variables sont remplies, on génère puis envoie le mail
            $headers  = 'MIME-Version: 1.0' . "\n" .
            $headers .= 'From:'.$firstname.' '.$lastname.' <'.$email.'>' . "\n" .
            $headers .= 'Reply-To:'.$email. "\n" .
            $headers .= 'Content-Type: text/html; charset="utf-8"; DelSp="Yes"; format=flowed' . "\n" .
      $headers .= 'X-Mailer:PHP/'.phpversion().
            $headers .= 'Content-Transfer-Encoding: 7bit' . "\r\n" ;
                 
            // envoyer une copie au visiteur ?
            if ($copie == 'oui')
            {
                $cible = $destinataire.";".$email;
            }
            else
            {
                $cible = $destinataire;
            };
       
            // formatage du corps de l'email
      $msg = '<div style="width: 100%; text-align: left; color: #00002b; font-weight: bold"> Message de '.$firstname.' '.
            $lastname.'<br />E-mail : '.$email.' et numéro de téléphone : '.$usrtel.'<br /> nombre de personne(s) : '.$people.
            '<br /> Message : '.$message.'</div>';
               
            // Envoi du mail
            $num_emails = 0;
            $tmp = explode(";", $cible);          
            foreach($tmp as $email_destinataire)
            {
    if (mail($email_destinataire, $objet, $msg, $headers))
                $num_emails++;
            }
         
            if ((($copie == 'oui') && ($num_emails == 2)) || (($copie == 'non') && ($num_emails == 1)))
            {
        // message sent
        // Votre message a bien été envoyé !
            }
            else
            {
                // message not sent
    // L'envoi du mail a échoué, veuillez réessayer, s'il vous plaît
    $error1 = true;
            };              
        }
        else
        {
    // one of 7 variables (at least) is empty ...
    // Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur
    $error2 = true;
        };                
    }
    else
    {
        // recaptcha is false
  // Problème d'authentification par le Recaptcha
  $success = false;
    };  
}; // fin du if (!isset($_POST['envoi']))

$array['success'] = $success;
$array['error1'] = $error1;
$array['error2'] = $error2;
$array['response'] = $response;
$array['email'] = $email;
$array['destinataire'] = $destinataire;
$array['cible'] = $cible;
$finalArray=json_encode($array);
echo $finalArray;
 
?>

Les variables que je récupère via JS sont les suivantes :
DataOut:{"success":true,"error1":false,"error2":false,"response":"success":true,"errorCodes":null},"email":"exp@gmail.com","destinataire":"'dest1@mon.site,dest2@mon.site","cible":null}, quand je coche le Recaptcha et :
{"success":true,"error1":false,"error2":false,"response":null},"email":"exp@gmail.com","destinataire":"'dest1@mon.site,dest2@mon.site","cible":null}, quand je ne coche pas le Recaptcha.
Est-ce que quelqu'un aurait une solution pour résoudre cette problématique ? Car du coup le fichier.php n'envoie pas les emails...
Je vous remercie par avance pour votre aide.

PS :
Je rajoute ici le formulaire :

<form action="contact.php" method="post" id="mail_form">
      <fieldset>
        <legend>Coordonnées personnelles :</legend>
        <p><input class="w3-input w3-padding-16 w3-border" type="text" placeholder="Prénom *" required name="firstname" maxlength="50"></p>
        <p><input class="w3-input w3-padding-16 w3-border" type="text" placeholder="Nom *" required name="lastname" maxlength="50"></p>
        <p><input class="w3-input w3-padding-16 w3-border" type="email" placeholder="Email *" required name="email"></p>
        <p><input class="w3-input w3-padding-16 w3-border" type="tel" placeholder="+681 12 34 56 *" required name="usrtel"></p>
      </fieldset>
      <fieldset>
        <legend>Informations :</legend>
        <p><input class="w3-input w3-padding-16 w3-border" type="number" placeholder="Combien de personne(s) *" required name="people" min="1" max="100"></p>
        <p><input class="w3-input w3-padding-16 w3-border" type="text" placeholder="Message \ Besoins particuliers *" required name="message"></p>
      </fieldset>
      <p>* Champs obligatoires</p>
      <br>
      <div class="g-recaptcha" data-theme="dark" data-sitekey="***"></div>
      <p>Souhaitez-vous une copie de votre message ?
      <input type="radio" id="rep_oui" name="copie" value="oui" checked><label for="rep_oui">Oui</label>
      <input type="radio" id="rep_non" name="copie" value="non"><label for="rep_non">Non</label></p>
      <p id="error" class="w3-red w3-xlarge w3-center"></p>
      <p><button class="w3-button w3-light-grey w3-block" type="submit" name="submit">ENVOYER LE MESSAGE</button></p>
      <p><button class="w3-button w3-light-grey w3-block" type="reset">EFFACER</button></p>
    </form>

et le script qui exploite les variables envoyées par le serveur après le traitement du fichier php:

<script>
$('#mail_form').on('submit', function(event)
  {
    event.preventDefault();
    var dataIn = $(this).serialize(); //serialize turns the form data into a string that can be passed to contact.php. Try doing alert(dataIn); to see what it holds.
    $.post( "./contact.php" , dataIn )
    .done(function( dataOut )
    {
      //dataOut holds the response from contact.php. The response would be any html mail.php outputs. I typically echo out json encoded arrays as responses that you can parse here in the jQuery.
      var finalArray = JSON.parse ( dataOut );
      alert('DataOut :' + dataOut)
      if ((finalArray['success'] == true) && (finalArray['error1'] == false) && (finalArray['error2'] == false))//Check if it was successfull.
      {  
        $("#mail_form").html("<p class='w3-xlarge w3-center w3-tag w3-red'><strong>Votre message a bien été envoyé !</strong></p>");
      }
      else //there were errors
      {
        if (finalArray['error1'] == true)
        {
          // message not sent
          $('#error').html("<p class='w3-xlarge w3-center w3-tag w3-red'><strong>L'envoi du mail a échoué, veuillez réessayer, s'il vous plaît.</strong></p>");
        }
        else if (finalArray['error2'] == true)
        {
          // one of 7 variables (at least) is empty ...
          $('#error').html("<p class='w3-xlarge w3-center w3-tag w3-red'><strong>Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.</strong></p>");
        }
        else
        {
          // recaptcha is false
          $('#error').html("<p class='w3-xlarge w3-center w3-tag w3-red'><strong>Problème d'authentification par le Recaptcha</strong></p>");
        }
      }
    });
  });
</script>

Dernière modification par Falakiko (23-11-2017 21:02:16)


Hors ligne

Pied de page des forums