PHP|Débutant :: Forums

Advertisement

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

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

#76 08-10-2014 18:42:39

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

PDO (?)
Pourquoi l'enregistrement en bd ci-dessous n'est pas dans mon php ?:
// dans votre code maintenant (en dehors de connect_db.php)
$result=$PDOInstance->query("INSERT INTO matable (nomprenom,email,telephone,typecontact) VALUES ('$nomtobase','$email','$telephone','$typecontact')";
Je vois bien que je vais charger la bd, mais  $result=$PDOInstance ->query..j'avais pas encore vu
Je stocke la variable $result pourquoi faire ? lancer une requête ?



ENCORE..   vu l'heure après il me reste les incantations:)
que fait la fonction du script : complete: function(xhr,result)

function submit_form()
        {
          // on récupère les informations saisies dans le formulaire
          var nomprenom=$('#form_nomprenom').val();
          var email=$('#form_email').val();
          var telephone=$('#form_telephone').val();
          var typecontact=$('#form_typecontact').val();
          // vérif validité des informations saisies
          if (verification_saisie(nomprenom,email,telephone,typecontact)===false){return false;}
          // tout est ok on envoie les informations au serveur en ajax
          $.ajax(
            {
               // url de la page de traitement ajax php
               url:'http://....................eu/IhmWeb...........New.php/cfg-contactform-35/inc/form-validation.php',
               // données à transmettre
               data :{ fn:'validate_form', NOMPRENOM:nomprenom, EMAIL:email, TELEPHONE:telephone, TYPECONTACT:typecontact, sid:Math.random()},
               type: 'post',
             [b]complete: function(xhr,result)[/b][color=#1279ff][/color]

.............

juste une faute de débutant dans le js, celles là je sais les trouver ..
if (RETOUR_SERVEUR.message==='ok'){ alert('votre formulaire a bien été validé en base de données.'); } else { alert('Une erreur est survenue lors du traitement de la soumission de votre formulaire avec l'erreur suivante: [' + RETOUR_SERVEUR.message +']');}
Ce ' est à enlever

Pierrot

Hors ligne

#77 09-10-2014 05:03:28

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour,

if (RETOUR_SERVEUR.message==='ok'){ alert('votre formulaire a bien été validé en base de données.'); } else { alert('Une erreur est survenue lors du traitement de la soumission de votre formulaire avec l'erreur suivante: [' + RETOUR_SERVEUR.message +']');}
Ce ' est à enlever

Non il n'est pas à enlever. Petite faute d'innatention cependant, voici la ligne corrigée:


// Javascript
if (RETOUR_SERVEUR.message==='ok'){ alert('votre formulaire a bien été validé en base de données.'); } else { alert('Une erreur est survenue lors du traitement de la soumission de votre formulaire avec l\'erreur suivante: [' + RETOUR_SERVEUR.message +']');}
 

que fait la fonction du script  complete?


 complete: function(xhr,result){
           // code de traitement de la réponse du serveur.
           // Dans un premier temps il ne s'agit pas de traiter les erreurs de requête comme vous l'avez fait il y a l'event error pour le faire,
           // Mais on va traiter les erreurs applicatives s'il y en a (erreurs gérées) et la réponse du serveur (nouvelles données ou tout simplement le message qui dit que tout est ok.
          // On va considérer que le retour serveur se fait au format JSON.
           var RETOUR_SERVEUR=jQuery.parseJSON(xhr.responseText);
           if (RETOUR_SERVEUR.message==='ok'){ alert('votre formulaire a bien été validé en base de données.'); } else { alert('Une erreur est survenue lors du traitement de la soumission de votre formulaire avec l\'erreur suivante: [' + RETOUR_SERVEUR.message +']');}
       }
 

=> Lire les commentaires et le code présents dans la fonction....

Pour PDO =>Lire la doc.
Dans $result vous récupérez les résultat de la requete (le recordset). Ici comme c'est une requete d'insert vous aurez juste l'information du résultat de l'insert que vous n'avez pas besoin d'utiliser dans ce cas. Mettez l'instruction dans un bloc try catch en cas c'est mieux avec PDO.

Pourquoi l'enregistrement en bd ci-dessous n'est pas dans mon php ?:

Il reste dans votre code PHP mais pas dans l'include de connection à la BD, car vous etes censé faire du développement en orienté objet et donc dans un environnement MVC, c'est la couche modèle qui est censé requeter la BD et pas le controleur ajax directement. On ne mélange pas au niveau fonctionnel le code, il ne s'agit pas de faire du procédural....
En attendant, vous pouvez le laisser là où il est c'est suffisant pour faire fonctionner le code fourni.

++

Dernière modification par Jc (09-10-2014 05:11:11)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#78 09-10-2014 17:10:21

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonsoir JC,

Je reviens vers vous pour une dernière tentative.
Si je n'y arrive pas cette fois j'abandonne, malgré que je pense avoir maintenant, pour l'essentiel, compris le cheminement de l'information et des inter-actions avec ajax.
Je reviendrai vers AJAX / PDO, mais pas tout de suite.
Ce ne sera pas faute de vos efforts, ni de votre patience, mais j'arrive maintenant à des "singleton"..
J'aurai essayer, j'en ai parlé ce matin avec une connaissance que je pense qualifiée, il avait néanmoins des difficultés à répondre simplement à mes questions sans m'embarquer dans des explications que je sentais bien confuses... débutant OUI, mais pas ... quand même.
Je ne veux plus vous faire perdre votre temps et comprends bien que vous n'avez pas que ça à faire, même si pour vous il suffit d'ouvrir le robinet pour faire couler du code.
Je pense que Mk saura tirer profit de ce que vous avez fait et cela servira à bien d'autres.

Je vous indique donc tout mes derniers codes, il y a qqchose qui ne passe pas, si je suis tout prés, j'y retourne, sinon c'est tant pis pour moi.

Mon appel AJAX ==> HTML, pas d'envoi quand je clique

<div>
   <input type="text" id="form_nomprenom" class="form_nomprenom" placeholder="Vos Nom Prénom" maxlength="25" />
    <input type="text" id="form_email" class="form_email" placeholder="adresse_courriel" maxlength="50" />
    <input type="text" id="form_telephone" class="form_telephone" placeholder="Telephones" maxlength="50" />
    <input type="text" id="form_typecontact" class="form_typecontact" placeholder="Statut" maxlength="50" />
    <button id="btn_submit" onclick="submit_form();">Envoyer</button>
 </div>

La gestion de l'appel par le script "scriptformulaire.js"

jQuery(function()
function submit_form()
{
[i][color=#919191]   //require_once('bdconnect.php'); [/i]
  // RECUP informations saisies dans le formulaire[/color]
  var nomprenom=$('#form_nomprenom').val();
  var email=$('#form_email').val();
  var telephone=$('#form_telephone').val();
  var typecontact=$('#form_typecontact').val();
[i][color=#8f8f8f]  // Ultérieurement vérif info saisies (format nombre/email)
  //if (verification_saisie(nomprenom,email,telephone,typecontact)===false){return false;}
  // ENVOI infos au serveur en ajax[/color][/i]
  $.ajax(
    {
[i][color=#919191][i] // url de la page de traitement ajax php AVEC require_once('bdconnect.php');[/color][/i]
    url:'http://***********.eu/IhmWeb***********.php/form-validation.php',
[i][color=#8f8f8f]    // données à transmettre[/color][/i]
    data :{ fn:'validate_form', NOMPRENOM:nomprenom, EMAIL:email, TELEPHONE:telephone, TYPECONTACT:typecontact, sid:Math.random()
    },
    type: 'post',
    complete: function(xhr,result)
    {
[i][color=#919191]    // insertion[/color][/i]
    $result=$PDOInstance->query("INSERT INTO matable (nomprenom,email,telephone,typecontact) VALUES ('$nomtobase','$email','$telephone','$typecontact')";
[i][color=#969696]   // retour serveur au format JSON.[/color][/i]
   var RETOUR_SERVEUR=jQuery.parseJSON(xhr.responseText);
   if (RETOUR_SERVEUR.message==='ok')
   { alert('votre formulaire a bien été validé en base de données.');
   }
    else
   { alert('Une erreur est survenue lors du traitement de la soumission de votre formulaire avec erreur suivante: [' + RETOUR_SERVEUR.message +']');
   }
   }
    }
}

function verification_saisie(nomprenom,email,telephone,typecontact)
{
[i][color=#a6a6a6]// en attente
   //var error_notfound=false;  
   // code de vérification de saisie.
   // à ajouter ultérieurement en vérif champs
   // $nomprenom = isset($_POST["nomprenom"]) ? $_POST["nomprenom"] : ""; // test
   // $email = isset($_POST["email"]) ? $_POST["email"] : ""; // test
   // $telephone = isset($_POST["telephone"]) ? $_POST["telephone"] : ""; // test
   // $typecontact = isset($_POST["typecontact"]) ? $_POST["typecontact"] : ""; //
   // if($nomprenom == "" || $email == ""  || $telephone == "" || $typecontact == "")
   // {
   // echo "Veuillez remplir tous les champs !";
   // }
   // fin ajout verif champs
   // retourne false si erreur trouvée, sinon retourne true.
   // retourne false si erreur trouvée, sinon retourne true.
  return error_notfound;[/color][/i]
}
);
 

La validation PHP avec form-validation.php

<?php
session_start();
[i][color=#ababab]// le code de validation_form.php  ==> variable définie dans la function submit_form(){..}[/color][/i]
  function check_entries($nomprenom,$email,$telephone,$typecontact)
  {
[i][color=#adadad]    // code vérification retourne true si tout est ok sinon retourne false[/color][/i]
  }
//------------------------------------------------------------------------------------------------  
  function validation_database($nomprenom,$email,$telephone,$typecontact)
  {
[i][color=#adadad]    // établi la connection[/color][/i]
    require_once('bdconnect.php');
[i][color=#b3b3b3]    // si erreur alors on fait un print de l'erreur ex:[/color][/i]
    if ($erreur_trouvee)
    { print json_encode(array('message'=>' Une erreur est survenue dans la validation en base de données (-4)'));return false;
    }
[i][color=#b3b3b3]    // si tout ok[/color][/i]
    return true;
  }
///----------------------------------------------------------------------------------------------------------
   if (!isset($_POST['fn']) || empty($_POST['fn']))
    {
    print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-1)'));exit;
    }
    $fn=$_POST['fn'];
    switch($fn)
    {
    default: print json_encode(array('message'=>'Fonction Ajax inconnue / non gérée.'));exit;
    break;
    case 'validate_form':if(!isset($_POST['NOMPRENOM']) || !isset($_POST['EMAIL']) || !isset($_POST['TELEPHONE']) || !isset($_POST['TYPECONTACT']))
    {
    print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-2)'));exit;  
    }
    $nomprenom=$_POST['NOMPRENOM'];$email=$_POST['EMAIL'];$telephone=$_POST['TELEPHONE'];$typecontact=$_POST['TYPECONTACT'];
[i][color=#b5b5b5]// PLUS TARD >>on peut vérifier (recommandé) que le format des données transmises est acceptable (on ne fait pas confiance au client).[/color][/i]
   if (check_entries($nomprenom,$email,$telephone,$typecontact)===false)
    { print json_encode(array('message'=>' Erreur dans le format des paramètres soumis au serveur (-3)'));exit;
    }
    if (validation_database($nomprenom,$email,$telephone,$typecontact)===false)
    {
    exit;
    }
[i][color=#b5b5b5]    // on arrive ici donc tout c'est bien passé[/color][/i]
    print json_encode(array('message'=>'ok'));
   }
?>

POUR INFO
    //http://studio.jacksay.com/tutoriaux/php/connection-mysql-avec-pdo

Ma connexion  bd version PDO avec connectbd.php
==> PDO_err : invalid data source name Fatal error

<?php
session_start();
try {
    $db=mysql_connect("*******.eu.mysql", "**********_eu", "*************");// ok
    mysql_select_db("*******_eu.mysql", $db);// ok
    }
    catch ( Exception $e )
    {
    echo "Connection à MySQL impossible : ", $e->getMessage();
    die();
    }
[i][color=#9da0a1]// <-OK[/color][/i]
try {
    $PDOInstance = new PDO($DSN_string, $USER_string, $PWD_string);
    $PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException $e)
    {print 'PDO_err : '.$e->getMessage();
    }
[i][color=#a0a2a3] // exemple sortie données de la bd  si besoin ultérieur        
 //$PDOInstance  = $PDOInstance->query("SELECT * FROM confid");[/color][/i]
 
[i][color=#a3a5a6] // entrée données dans bd EN REMPLACEMENT DE :
 //mysql_select_db("***********_eu.mysql", $db);
//$sql="INSERT INTO confid (nomprenom) VALUES ('$nomtobase')";
/// $sql="INSERT INTO confid (email) VALUES ('$email')";
//$sql="INSERT INTO confid (telephone) VALUES ('$telephone')";
//$sql="INSERT INTO confid (typecontact) VALUES ('$typecontact')";[/color][/i]

 try {
    $result=$PDOInstance->query
("INSERT INTO confid (nomprenom, email, telephone, typecontact) VALUES ('$nomprenom','$email','$telephone','$typecontact')");
    }
    catch (PDOException $e)
    {print 'PDO_err : '.$e->getMessage();
    }
?>

Pierrot

Dernière modification par pierrot35 (09-10-2014 17:14:19)

Hors ligne

#79 10-10-2014 08:44:30

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour,

Vous y êtes presque :

1) Dans votre code javascript ainsi que dans votre code connectdb, retirez 

$result=$PDOInstance->query("INSERT INTO matable (nomprenom,email,telephone,typecontact) VALUES ('$nomtobase','$email','$telephone','$typecontact')";

cela n'a rien à faire là, cela doit se faire au niveau de PHP dans la fonction validation_database, après votre require_once('connect_db.php') pour le moins. Je vous rappelle que l'appel à la DB doit se faire à partir de PHP et que la variable $PDOinstance n'est connue de PHP qu'une fois l'include connect_db.php effectué.
De plus c'est cette ligne là qui bloque votre appel ajax au niveau javascript car cette ligne n'est pas du javascript et donc génère une erreur au niveau de votre javascript.

2) Le code connect_db.php doit être celui-ci


$DSN_string='mysql:host=xxx;port=xxx;dbname=xxx';
$USER_string='login user';
$PWD_string='pwd_user';
try {
       $PDOInstance = new PDO($DSN_string, $USER_string, $PWD_string);
        $PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    }catch (PDOException $e){
        print 'PDO_err : '.$e->getMessage();
    }
 

Voilà ni plus ni moins. L'intérêt de connect_db.php est d'avoir un seul lieu pour stocker les identifiants de connection dans tout son code et initier la connection à la base de données (pas de requête BD dans ce fichier). Il faudra mettre le fichier en lecture seule sur le serveur en plus. Parfois préciser le port n'est pas nécessaire si celui utilisé est le même que celui configuré par défaut dans MySQL.

PDO remplace MySQLi donc évitez d'utiliser les deux d'où le code que je viens de vous fournir.

Ce ne sera pas faute de vos efforts, ni de votre patience, mais j'arrive maintenant à des "singleton"..

C'est en effet la base dans une architecture web performante en PHP.

++

EDIT: Les erreurs commises correspondent aux endroits qui ne respectent pas la structure du code initiale que je vous ai fourni. Vous avez voulu changer les choses avant d'avoir compris la logique de fonctionnement du code initial.

Dernière modification par Jc (10-10-2014 11:20:58)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#80 10-10-2014 18:27:23

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonsoir JC,
merci pour le ..Vous y êtes presque ..:)

J'ai suivi vos correctifs :
connectdb.php ==> à priori c'est maintenant Ok, OUFF smile


<?php
session_start();
[color=#ababab]//Annulé require ci dessous suite erreur  "PDO_err : could not find driver"  lien http://www.phpfacile.com/creer_un_site_web_en_php/php_et_pdo_1.php5
//Annulé require_once("pdo_conf_inc.php)"[/color]

[color=#a3a3a3]//  CONNEXION BD UNIQUEMENT, LA TABLE EST IMPLANTEE DANS LA VALIDATION PHP -------------------------------------------------
//PDO Crée mon instance PDO (uniquement connexion à la base) [/color]

$DSN_string='mysql:host=*****.eu.mysql;dbname=*****_eu'; // port= **** SI BESOIN
$USER_string='****_eu';
$PWD_string='****';
try {
       $PDOInstance = new PDO($DSN_string, $USER_string, $PWD_string);
        $PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    }catch (PDOException $e){
        print 'PDO_err : '.$e->getMessage();
        die();
    }

[i][color=#adadad]//  vérif avec autre façon   OK
//try {
//  $dns = 'mysql:host=***********.eu.mysql';
///  $utilisateur = '************_eu';
//  $motDePasse = '**************';
 // $connection = new PDO( $dns, $utilisateur, $motDePasse );
//} catch ( Exception $e ) {
//  echo "Connection à MySQL impossible : ", $e->getMessage();
//  die();
//}[/color[/i]]
?>

Concernant l'appel d'Ajax par mon submit HTML:
ne lance pas le formulaire quand je clique, mais à priori cela viendrait du submitform (scriptformulaire.js), sinon je crois que le html cette fois devrait être aussi ok,
Par sécurité

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<!-- AJOUT dans le header -->
[color=#a8a8a8]<!--<script type="text/javascript" lang="fr-fr" src="libs/js/jquery/jquery-1.11.0.min.js"></script>-->[/color]
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" lang="fr-fr" src="libs/js/mabibliotheque.js"></script>
<script type="text/javascript" src="http://opuscloud.eu/IhmWebEditorBdnNew.php/scriptformulaire.js"></script>

le scriptformulaire.js actualisé ( vérif liens avec firebug.

jQuery(function()
function submit_form()
{
[color=#ababab]  // RECUP informations saisies dans le formulaire
// TYPE ECRITURE EN JQUERY var XX = $('#form_XX').val();[/color]
  var nomprenom=$('#form_nomprenom').val();
  var email=$('#form_email').val();
  var telephone=$('#form_telephone').val();
  var typecontact=$('#form_typecontact').val();
 
[color=#ababab]// Ultérieurement vérif info saisies (format nombre/email)
//if (verification_saisie(nomprenom,email,telephone,typecontact)===false){return false;}
//****************************************************************************************************************************************************************
// ENVOI infos au serveur en ajax[/color]
  $.ajax(
    {
[color=#b0b0b0] // url FIREBUG de la page de traitement ajax par form-validation.php AVEC require_once('bdconnect.php'); + variable PDO[/color]
    url:'http://www.**********.eu/Ihm*******New.php/form-validation.php',
[color=#b0b0b0]// données à transmettre[/color]
    data :{ fn:'validate_form', NOMPRENOM:nomprenom, EMAIL:email, TELEPHONE:telephone, TYPECONTACT:typecontact, sid:Math.random()
    },
    type: 'post',
[color=#b0b0b0]    //XmlHttpRequest = xhr[/color]
    complete: function(xhr,result)
    {
[color=#b3b3b3]// retour serveur au format JSON.[/color]
   var RETOUR_SERVEUR=jQuery.parseJSON(xhr.responseText);
   if (RETOUR_SERVEUR.message==='ok')
   { alert('votre formulaire a bien été validé en base de données.');
   }
    else
   { alert('Une erreur est survenue lors du traitement de la soumission de votre formulaire avec erreur suivante: [' + RETOUR_SERVEUR.message +']');
   }
   }
    }
}

Et enfin la validation php (form-validation.php) = {"message":" Erreur dans les param\u00e8tres soumis au serveur (-1)"}

<?php
session_start();
[color=#b8b8b8]//appel bd ==> variables définies dans la function submit_form(){..}[/color]
  function check_entries($nomprenom,$email,$telephone,$typecontact)
  {
    // code vérification retourne true si tout est ok sinon retourne false
  }
[color=#b3b3b3]//------------------------------------------------------------------------------------------------  [/color]
  function validation_database($nomprenom,$email,$telephone,$typecontact)
  {
[color=#b5b5b5]//la connection[/color]
    require_once('bdconnect.php');
[color=#b5b5b5]//variable $PDOinstance  de connexion bd connue du PHP si préalablement include connect_db.php = OK[/color]
$result=$PDOInstance->query("INSERT INTO confid (nomprenom,email,telephone,typecontact) VALUES ('$nomprenom','$email','$telephone','$typecontact')");
[color=#b8b8b8]// si erreur alors on fait un print de l'erreur ex:[/color]
    if ($erreur_trouvee)
    { print json_encode(array('message'=>' Une erreur est survenue dans la validation en base de données (-4)'));return false;}
[color=#b8b8b8]// si tout ok[/color]
    return true;
  }
[color=#b8b8b8]///----------------------------------------------------------------------------------------------------------[/color]
    if (!isset($_POST['fn']) || empty($_POST['fn']))
    {
    print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-1)'));exit;
    }
    $fn=$_POST['fn'];
    switch($fn)
    {
    default: print json_encode(array('message'=>'Fonction Ajax inconnue / non gérée.'));exit;
    break;
    case 'validate_form':
if(!isset($_POST['NOMPRENOM']) || !isset($_POST['EMAIL']) || !isset($_POST['TELEPHONE']) || !isset($_POST['TYPECONTACT']))
    {
    print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-2)'));exit;  
    }
    $nomprenom=$_POST['NOMPRENOM']; $email=$_POST['EMAIL']; $telephone=$_POST['TELEPHONE']; $typecontact=$_POST['TYPECONTACT'];
[color=#bababa]// PLUS TARD >>on peut vérifier (recommandé) que le format des données transmises est acceptable (on ne fait pas confiance au client).[/color]
   if (check_entries($nomprenom,$email,$telephone,$typecontact)===false)
    { print json_encode(array('message'=>' Erreur dans le format des paramètres soumis au serveur (-3)'));exit;
    }
    if (validation_database($nomprenom,$email,$telephone,$typecontact)===false)
    {
    exit;
    }
[color=#bababa]    // on arrive ici donc tout c'est bien passé[/color]
    print json_encode(array('message'=>'ok'));
   }
?>
<?php

Voila, j'ai juste cette erreur dans la validation php
{"message":" Erreur dans les param\u00e8tres soumis au serveur (-1)"}

J'avoue que je ne comprends pas trop ce que font ces codes 'fn'

 if (!isset($_POST['fn']) || empty($_POST['fn'])

)
Je me demande si cela ne provenait pas de là, mais pas sûr du tout..
Ou de

$result=$PDOInstance->query("INSERT INTO confid (nomprenom,email,telephone,typecontact) VALUES ('$nomprenom','$email','$telephone','$typecontact')");

je trouve pas ce que c'est  ==>   http://php.net/manual/fr/book.pdo.php

merci,
Bon week end à vous
Pierrot

Dernière modification par pierrot35 (10-10-2014 18:36:51)

Hors ligne

#81 10-10-2014 23:21:21

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonsoir

Concernant les includes dans votre header html je vous avais dit

Maintenant que j'ai vu votre header, il semblerait qu'il y ait deux fichiers js "redondants" à vérifier donc s'il n'y a pas moyen d'en faire un seul tout propre tout beau
: <script src="cfg-contactform-35/js/contactform.js"></script> et <script src="cfg-contactform-35/js/scriptformulaire.js"></script>

Donc pourquoi avoir maintenant

<script type="text/javascript" lang="fr-fr" src="libs/js/mabibliotheque.js"></script>
<script type="text/javascript" src="http://opuscloud.eu/IhmWebEditorBdnNew.php/scriptformulaire.js"></script>

J'avais appelé le fichier mabibliotheque.js mais vous l'appelez comme vous voulez par exemple scriptformulaire.js . Juste pour vous dire que vous l'appelez comme vous voulez, ce qui est important c'est que vous n'avez besoin que d'un seul fichier js pour gérer votre formulaire côté client.

Important! Enlevez ce que vous avez rajouté dans votre javascript : jQuery(function() {..... }) Cette écriture est erronée et ce que vous cherchez à faire en écrivant cela n'est pas justifié. Laissez juste le code que je vous ai donné rien de plus. Si vous voulez apprendre à écrire en orienté objet en javascript, difficile de vous l'expliquer dans un tuto ajax.... c'est un vaste sujet qui n'est pas le même.

Une fois ceci corrigé, sans rien changer au reste, dites moi si c'est ok pour vous niveau compréhension.

++

EDIT

J'avoue que je ne comprends pas trop ce que font ces codes 'fn'

C'est une "technique" de mon cru, si on peut appeler cela ainsi. Cela sert à créer une bibliothèque de fonctions managées au niveau du contrôleur ajax PHP. Cela permet beaucoup de choses dont :
- Cela structure le format des requêtes en JSON/JSONP qui sont acceptables par le serveur et permet de libérer le serveur au plus tôt de requêtes non conformes qui sont tentées de lui être passées.
- Donc ici seule la fonction ajax 'validate_form' est connue et sera acceptée.

Dernière modification par Jc (11-10-2014 00:06:48)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#82 11-10-2014 18:00:54

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonsoir Jc,

J'ai repris vos codes "à la lettre" .
OUI, sincèrement, je pense avoir compris,au moins pour l'essentiel, mais je n'ai pas encore l'automatisme et suis obligé de (re)réfléchir chaque pas.
Mais si m'écarte un peu, je m'égare très vite de votre logique.

Pour revenir sur les codes.

CONNEXION BD, je les ai intégrés dans le code de sécurisation de la session  == > à priori toujours OK

<?php
session_start();
require("authentification.php");
if(Authentification::isLogged()){
$DSN_string='mysql:host=*****.eu.mysql;port=3306;dbname=*****_eu';
$USER_string='*****_eu';
$PWD_string='*******';
[color=#b3b3b3]// print_r ($DSN_string); ==> ok pris
// print_r ($USER_string); ==> ok pris
// print_r ($PWD_string);==> ok pris[/color]
try {
    $PDOInstance = new PDO($DSN_string, $USER_string, $PWD_string);
    $PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
[color=#adadad]// print_r ($PDOInstance);  ==> PDO Object ( ) [/color]
    }catch (PDOException $e){
    print 'PDO_err : '.$e->getMessage();
    }
}
else{
    header('Location: login.php');
}
?>

HEAD/ HTML
- Toujours le même souci, je clique sur bouton de l'IHM et rien ne se passe
- Modification du header ( j'avais compris qu'il fallait en plus un script bibli.. , j'avais trouvé cela étonnant.. je n'avais pas saisi que c'était votre exemple, c'est rectifié)
LE <head>

<head><meta charset="utf-8" />
<title>demande informations complémentaires</title>
<meta name="description" content="" />
<meta name="robots" content="all" />
<meta name="generator" content="Bluefish 2.2.2" />
<meta http-equiv="Cache-Control" content="must-revalidate, max-age=0, public" />
<meta http-equiv="Expires" content="-1" />
<link rel="stylesheet" href="//********.eu/onewebstatic/e5de4412f9.css" />
<meta name="HandheldFriendly" content="True" />
<meta name="MobileOptimized" content="320" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
[b]<!-- AJOUT -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="http://****.eu/IhmWeb*****.php/scriptformulaire.js"></script>
<!-- fin AJOUT -->[/b]
<link rel="stylesheet" href="//****.eu/onewebstatic/a5a436fc4c.css" />
</head>

LA DIV / L'APPEL AJAX  ==> scriptformulaire.js qui contient le submit_form
J'ai toujours pas compris le 'fn' , même si forcement  je le retrouve en validation
data :{ fn:'validate_form', Nomprenom...,
je me demande si c'est pas ça qui génère l'erreur sur la validation php ( {"message":" Erreur dans les parametres soumis au serveur (-1)"} )

<div>
    <input  id="form_nomprenom" class="form_nomprenom" placeholder="Vos Nom Prénom" maxlength="25" />
    <input  id="form_email" class="form_email" placeholder="adresse_courriel" maxlength="50" />
    <input  id="form_telephone" class="form_telephone" placeholder="Telephones" maxlength="50" />
    <input  id="form_typecontact" class="form_typecontact" placeholder="Statut" maxlength="50" />
    <button id="btn_submit" onclick="submit_form()">Envoyer</button>
  [color=#adadad]<!--firebug ==> http://opuscloud.eu/IhmWebEditorBdnNew.php/scriptformulaire.js-->[/color]
</div>


LE SCRIPT (submitform) nom de fichier :scriptformulaire.js, fichier complet de A à Z
- rectifié,  Jquery enlevé

function submit_form()
{
//require_once('bdconnect.php');
// RECUP informations saisies dans le formulaire
  var nomprenom=$('#form_nomprenom').val();
  var email=$('#form_email').val();
  var telephone=$('#form_telephone').val();
  var typecontact=$('#form_typecontact').val();
 
[color=#b0b0b0]// Ultérieurement vérif info saisies (format nombre/email)
//if (verification_saisie(nomprenom,email,telephone,typecontact)===false){return false;}
// ENVOI infos au serveur en ajax[/color]
$.ajax(
    {
[color=#b3b3b3]// url de la page de traitement ajax php AVEC require_once('bdconnect.php');[/color]
    url:'http://www.********.eu/IhmWeb************.php/form-validation.php',
[color=#b5b5b5]// données à transmettre[/color]
    data :{ fn:'validate_form', NOMPRENOM:nomprenom, EMAIL:email, TELEPHONE:telephone, TYPECONTACT:typecontact, sid:Math.random()
    },
    type: 'post',
    complete: function(xhr,result)
    {
[color=#bababa]// retour serveur au format JSON[/color]
   var RETOUR_SERVEUR=jQuery.parseJSON(xhr.responseText);
   if (RETOUR_SERVEUR.message==='ok')
   { alert('votre formulaire a bien été validé en base de données.');
   }
    else
   { alert('Une erreur est survenue lors du traitement de la soumission de votre formulaire avec erreur suivante: [' + RETOUR_SERVEUR.message +']');
   }
   }
    }
}
);
 


LA VALIDATION PHP avec insertion session sécurisée
- IDEM ==> ERREUR  {"message":" Erreur dans les paramètres soumis au serveur (-1)"}, qui correspond au message  après :   if (!isset($_POST['fn']) || empty($_POST['fn']))...
Contrairement aux autres codes, celui là je ne le comprend pas du tout, et ne vais pas chercher à réutiliser ce  code <..'fn'..>  ailleurs tant que ne l'aurai "digéré"...

<?php
session_start();
require("authentification.php");
if(Authentification::isLogged())
[color=#bdbdbd]// lancement validation si session ouverte par authentification[/color]
{
[color=#c2c2c2]// appel bd ==> variables définies dans la function submit_form(){..}[/color]
 function validation_database($nomprenom,$email,$telephone,$typecontact)
{
[color=#c4c4c4]//la connection[/color]
require_once('bdconnect.php');
[color=#c7c7c7]//variable $PDOinstance  de connexion bd connue du PHP si préalablement include connect_db.php = OK[/color]
$result=$PDOInstance->query("INSERT INTO matable (nomprenom,email,telephone,typecontact) VALUES ('$nomprenom','$email','$telephone','$typecontact')");
[color=#c9c9c9]//si erreur[/color]
if ($erreur_trouvee)
{ print json_encode(array('message'=>' Une erreur est survenue dans la validation en base de données (-4)'));return false;}
[color=#c7c7c7]// si tout ok[/color[/color]
return true;
}
[color=#c7c7c7]///----------------------------------------------------------------------------------------------------------[/color]
if (!isset($_POST['fn']) || empty($_POST['fn']))
{
print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-1)'));exit;
}
$fn=$_POST['fn'];
switch($fn)
{
default: print json_encode(array('message'=>'Fonction Ajax inconnue / non gérée.'));exit;
break;
case 'validate_form':
if(!isset($_POST['NOMPRENOM']) || !isset($_POST['EMAIL']) || !isset($_POST['TELEPHONE']) || !isset($_POST['TYPECONTACT']))
{
print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-2)'));exit;  
}
$nomprenom=$_POST['NOMPRENOM']; $email=$_POST['EMAIL']; $telephone=$_POST['TELEPHONE']; $typecontact=$_POST['TYPECONTACT'];
[color=#c7c7c7]// PLUS TARD >>vérif format des données transmises[/color]
if (check_entries($nomprenom,$email,$telephone,$typecontact)===false)
{ print json_encode(array('message'=>' Erreur dans le format des paramètres soumis au serveur (-3)'));exit;
}
if (validation_database($nomprenom,$email,$telephone,$typecontact)===false)
{
 exit;
}
[color=#c7c7c7]// on arrive ici donc tout c'est bien passé[/color]
print json_encode(array('message'=>'ok'));
}
}
else
{
    header('Location: login.php');
}  
?>

Je ne vois pas d’où ça vient, mais je crois que $result=$PDOInstance-> ne prends pas les values en compte
Dans la bd si je fais ==>  print_r ($PDOInstance);  ==> ça me donne PDO Object ( )
Je ne sais plus quoi vérifier, les codes sont je pense Ok
Bon dimanche ou début de semaine
Merci encore, je l'ai tellement écrit..
pierrot

Hors ligne

#83 11-10-2014 18:14:32

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonsoir

- IDEM ==> ERREUR  {"message":" Erreur dans les paramètres soumis au serveur (-1)"}, qui correspond au message  après :   if (!isset($_POST['fn']) || empty($_POST['fn']))...
Contrairement aux autres codes, celui là je ne le comprend pas du tout, et ne vais pas chercher à réutiliser ce  code <..'fn'..>  ailleurs tant que ne l'aurai "digéré"...

Au contraire laissez-le, cela permet d'avoir un code de déboggage très précis, et d'isoler très précisément le problème. Je ne vous ai rien dit jusqu'à maintenant car je souhaitais que vous trouviez tout seul l'origine du problème. Donc je vais vous l'expliquer. Cela veut dire qu'il doit y avoir une autre requête ajax qui doit partir au serveur (requête qui ne soumet pas le paramètre fn) d'où l'erreur. Pour savoir, allez par exemple sur internet explorer, tapez F12 lancez la capture script et la capture réseau, et cliquez sur votre bouton submit... si l'erreur se reproduit (ce qui devrait être le cas), cliquez sur l'appel du fichier validation_form.php, accédez à la vue détaillée, et regardez l'onglet "corps de demande", et vérifiez que l'ensemble des paramètres demandés soient bien présents. c'est comme cela que l'on débogge de l'Ajax.

Ensuite pouvez-vous m'expliquer ce que vient faire votre

else
{
    header('Location: login.php');
}

Dans votre fichier ajax php????

Dernière modification par Jc (11-10-2014 18:42:14)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#84 12-10-2014 09:48:24

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour,

Il y a un truc qui me semblait bizarre... Donc après avoir retiré tous vos commentaires de votre fichier de validation PHP (ajax) et refait les indentations correctement, je me suis rendu compte que votre fichier de traitement PHP est erroné et ne correspond pas à ce que je vous ai dit initialement. Donc votre problème venait de là.
Voici votre fichier PHP corrigé à nouveau.


<?php
session_start();
require("authentification.php");
if(!Authentification::isLogged()) { print json_encode(array('message'=>'Utilisateur déconnecté.'));exit; }
function validation_database($nomprenom,$email,$telephone,$typecontact){
  require_once('bdconnect.php');
  try{
    $result=$PDOInstance->query("INSERT INTO matable (nomprenom,email,telephone,typecontact) VALUES ('$nomprenom','$email','$telephone','$typecontact')");
  }catch(PDOException $e){
    print json_encode(array('message'=>' Une erreur est survenue dans la validation en base de données (-4) '.$e->getMessage()));return false;} 
  }
              return true;
}
if (!isset($_POST['fn']) || empty($_POST['fn'])){
  print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-1)'));exit;
}
$fn=$_POST['fn'];
switch($fn){
  default: print json_encode(array('message'=>'Fonction Ajax inconnue / non gérée.'));exit;
  break;
  case 'validate_form':
    if(!isset($_POST['NOMPRENOM']) || !isset($_POST['EMAIL']) || !isset($_POST['TELEPHONE']) || !isset($_POST['TYPECONTACT'])){
      print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-2)'));exit;  
    }
    $nomprenom=$_POST['NOMPRENOM']; $email=$_POST['EMAIL']; $telephone=$_POST['TELEPHONE']; $typecontact=$_POST['TYPECONTACT'];
    if (check_entries($nomprenom,$email,$telephone,$typecontact)===false){
      print json_encode(array('message'=>' Erreur dans le format des paramètres soumis au serveur (-3)'));exit;
    }
    if (validation_database($nomprenom,$email,$telephone,$typecontact)===false){ exit;}
    print json_encode(array('message'=>'ok'));
  }
}  
?>
 

Vous restera a créer votre fonction check_entries() qui n'existe pas encore, et qui va donc générer une erreur en l'état.

Bon dimanche wink

Dernière modification par Jc (12-10-2014 09:51:09)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#85 12-10-2014 11:40:14

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour,

Cela veut dire qu'il doit y avoir une autre requête ajax qui doit partir au serveur (requête qui ne soumet pas le paramètre fn)..

C'est bien ce qui me semblait, je ne comprenais pas pourquoi je trouvais ce  'fn'  sans correspondance et me demandait comment il pouvait bien être validé.
Mais alors, c'était donc obligatoire d'avoir cette erreur, si vous voulez bien, plus tard, peut être pourriez vous me donner quelques détail sur ce procédé, pas maintenant je sais qu'il y avait une raison.

Pour le : else {header('Location: login.php');}
J'ai réintégré la sécurité de la session :

session_start();
require("authentification.php");
if(Authentification::isLogged())
{code lancement validation php.........}

si pas logged ==> retour au login

else
{header('Location: login.php');}  
?>

Il va falloir que j'installe internet explorer sous ubuntu, je ne travaille qu'avec mozilla et testais le site sur le browser de microsoft avec un autre pc.

Pour le reste , j'y retourne tout de suite
Merci pour les explications sur le 'fn'.. , je ne comprenais plus.
Pierrot

Hors ligne

#86 12-10-2014 13:04:30

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

il n'y à pas un souci d'indentation sur le dernier code ? ou alors il manque quelque chose qui est passé " à l'as"
Si je le passe à Bluefish, il y a un problème ..

<?php

session_start();
require("authentification.php");
if(!Authentification::isLogged())
      {
      print json_encode(array('message'=>'Utilisateur déconnecté.'));exit;
      }

function validation_database($nomprenom,$email,$telephone,$typecontact)
{
 require_once('bdconnect.php');
  try
            {
      $result=$PDOInstance->query("INSERT INTO matable (nomprenom,email,telephone,typecontact) VALUES ('$nomprenom','$email','$telephone','$typecontact')");
      }
        catch(PDOException $e)
      {
      print json_encode(array('message'=>' Une erreur est survenue dans la validation en base de données (-4) '.$e->getMessage()));return false;
      }
    }
            return true;
  }

if (!isset($_POST['fn']) || empty($_POST['fn']))
  {
  print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-1)'));exit;
  }
       $fn=$_POST['fn'];
       switch($fn)
        {
  default: print json_encode(array('message'=>'Fonction Ajax inconnue / non gérée.'));exit;
  break;
  case 'validate_form':
    if(!isset($_POST['NOMPRENOM']) || !isset($_POST['EMAIL']) || !isset($_POST['TELEPHONE']) || !isset($_POST['TYPECONTACT']))
    {
    print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-2)'));exit;  
    }
    $nomprenom=$_POST['NOMPRENOM']; $email=$_POST['EMAIL']; $telephone=$_POST['TELEPHONE']; $typecontact=$_POST['TYPECONTACT'];
    if (check_entries($nomprenom,$email,$telephone,$typecontact)===false)
    {
    print json_encode(array('message'=>' Erreur dans le format des paramètres soumis au serveur (-3)'));exit;
    }
    if (validation_database($nomprenom,$email,$telephone,$typecontact)===false)
                {
                exit;
                }
    print json_encode(array('message'=>'ok'));
    }
}  
?>
 

Hors ligne

#87 12-10-2014 13:12:46

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour,

Vous avez changé la syntaxe du fichier par rapport à ce que j'ai écris. Faites attention! normal qu'il y ait une erreur. Regardez mieux.
Vous devez retirer le header avec le login, comme je vous l'ai dit.
Avant de tout modifier, vous devez comprendre comment cela fonctionne....
Pour Firefox ou chrome ce n'est pas F12 mais Ctrl+Maj+I.

Dernière modification par Jc (12-10-2014 13:17:01)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#88 12-10-2014 14:26:23

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Comprends plus, j'ai recopié le code du fichier directement sur  " Voici votre fichier PHP corrigé à nouveau."
Je viens de le refaire à l'instant ayant eu un doute, c'est pareil, si je le lance tel que je le recopie ( juste en mettant à jour le nom de la table) je retrouve bien une erreur:
Parse error: syntax error, unexpected '}' in /customers/d/a/6/******.eu/httpd.www/IhmWeb......php/validationform.php on line 13

Dans le code que j'ai recopié il y a le  "require("authentification.php"); if(!Authentification::isLogged()) .. exit;" avant ma function de validation, mais le header ==> est déjà enlevé.
J'y perd "mon latin" ..

Hors ligne

#89 12-10-2014 14:58:08

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Comprends plus, j'ai recopié le code du fichier directement sur  " Voici votre fichier PHP corrigé à nouveau."

Vous l'avez mal fait alors,

1) vous devez enlever le dernier } juste avant ?> EDIT: j'ai fait cette erreur aussi ^^
2) vous devez enlever } avant return true; dans la fonction validation_database() EDIT: celle qui vous bloque actuellement et qui est absente dans le code initial.

... faudra aussi que vous m'expliquiez ce que viennent faire ces b entre crochets dans votre code.... ca rend presque illisible le contenu wink
ND MK
tentative de mise en bold sur le forum, j'imagine.
je vais les supprimer.

Dernière modification par Jc (12-10-2014 15:15:48)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#90 12-10-2014 17:09:33

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Excusez moi pour les " b entre crochets", j'ai été trop vite en recopiant le code, il s'agit des codes caractères gras du forum.. je vais y remédier
Concernant les "}' en trop, ils sont dans votre code corrigé

Actuellement, il me semble que tout est conforme, syntaxe et contenu.

Je souhaite vérifier pas à pas pour tracer le processus, pour vérifier l'efficience des codes  pas à pas, il faut que je trouve ou ça fonctionne pas.
J'ai commencé par la connexion bd, je sais que cela peut faire doublon.
J'ai créer un fichier php pour tester la connexion bd ( qui me resservira pour autre chose)  Résultat = CONNEXION REUSSIE == > PAS DE PROBLEME de codage coté connexion
<?php
session_start();
require_once('bdconnect.php');
$link = mysql_connect("**********.eu.mysql", "**********_eu", "************")
or die("Impossible de se connecter : " . mysql_error());
echo 'Connexion réussie';
mysql_close($link);
?>

PARCONTRE Si j'inclus le même code dans La validation php : ==> "message":" Erreur dans les param\u00e8tres soumis au serveur (-1)"}

<?php
session_start();
require("authentification.php");
if(!Authentification::isLogged()) { print json_encode(array('message'=>'Utilisateur déconnecté.'));exit; }
function validation_database($nomprenom,$email,$telephone,$typecontact){
  require_once('bdconnect.php');
  [b]// TEST CONNEXION BD
  $link = mysql_connect("***********.eu.mysql", "************_eu", "***************")
    or die("Impossible de se connecter : " . mysql_error());
    echo 'Connexion réussie';
    mysql_close($link);
  //FIN TEST CONNEXION BD[/b]
  try{
  $result=$PDOInstance->query("INSERT INTO confid (nomprenom,email,telephone,typecontact) VALUES ('$nomprenom','$email','$telephone','$typecontact')");
  }catch(PDOException $e){
    print json_encode(array('message'=>' Une erreur est survenue dans la validation en base de données (-4) '.$e->getMessage()));return false;} 
    return true;
}
if (!isset($_POST['fn']) || empty($_POST['fn'])){
  print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-1)'));exit;
}............

Il y  a pas un souci, en fin je crois, pourquoi le test de connexion bd ne m'affiche rien dans ce cas ?

Concernant la validation des données,suite au code ci dessous code : Resultat = pas d'affichage de retour invalide ==> donc à priori c'est OK

$result=$PDOInstance->query("INSERT INTO confid (nomprenom,email,telephone,typecontact) VALUES ('$nomprenom','$email','$telephone','$typecontact')");
  }catch(PDOException $e){
    print json_encode(array('message'=>' Une erreur est survenue dans la validation en base de données (-4) '.$e->getMessage()));return false;}

ET je retombe sur le fameux 'fn'

Pour y voir plus clair j'ai neutralisé temporairement les codes "fn' et poursuit directement sur :
Résultat = {"message":" Erreur dans les param\u00e8tres soumis au serveur (-2)"}

if(!isset($_POST['NOMPRENOM']) || !isset($_POST['EMAIL']) || !isset($_POST['TELEPHONE']) || !isset($_POST['TYPECONTACT'])){
      print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-2)'));exit;  
    }
    $nomprenom=$_POST['NOMPRENOM']; $email=$_POST['EMAIL']; $telephone=$_POST['TELEPHONE']; $typecontact=$_POST['TYPECONTACT'];
    if (check_entries($nomprenom,$email,$telephone,$typecontact)===false){
      print json_encode(array('message'=>' Erreur dans le format des paramètres soumis au serveur (-3)'));exit;
    }
    if (validation_database($nomprenom,$email,$telephone,$typecontact)===false){ exit;}
    print json_encode(array('message'=>'ok'));
?>

Est ce que c'est normal, il y aurait une erreur de paramètres soumis au serveur ?
Pourtant ils ont l'air ok, si ma bd est bien connectée ..

Hors ligne

#91 12-10-2014 20:14:03

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonsoir,

1) Faites-moi plaisir, arrêtez de mélanger les appels mysqli avec PDO même pour tester....
2) validation_database n'est exécuté que lorsque cette ligne est atteinte, pas avant : if (validation_database($nomprenom,$email,$telephone,$typecontact)===false){ exit;}
3)  Si l'erreur -1 intervient, une fois le fichier PHP en ordre c'est que ce n'est pas la bonne requête ajax qui interroge ce fichier, ni plus ni moins. Et pour savoir quelle requête est envoyée au serveur il faut regarder la capture réseau, je vous l'ai déjà expliqué.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#92 13-10-2014 16:48:01

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour JC,


je viens de reprendre ce que vous m'aviez indiqué, j'utilise la console de mozilla, et voila ce que j'obtiens :

Cela veut dire qu'il doit y avoir une autre requête ajax qui doit partir au serveur (requête qui ne soumet pas le paramètre fn) d'où l'erreur. Pour savoir, allez par exemple sur internet explorer, tapez F12 lancez la capture script et la capture réseau, et cliquez sur votre bouton submit...

Après lancement du submit avec remplissage des input ( demande informations.php) :

Sur la console :  JS
[16:40:40,342] L'utilisation de « getPreventDefault() » est obsolète. Utiliser « defaultPrevented » à la place. @ http://*********.eu/IhmWeb*******.php/demande%20informations.php
[16:40:42,783] POST http://www.**********.eu/IhmWeb***********.php/formvalidation.php [HTTP/1.1 200 OK 238ms]
[16:40:42,970] TypeError: RETOUR_SERVEUR is null         @ http://**********.eu/IhmWeb**********.php/scriptformulaire.js:33     LIgne 33 =  if (RETOUR_SERVEUR.message==='ok')

Sur la console :  Réseau
Dans l'ordre (je fais abstraction des css)
- URL de la requête http:// ****.eu/IhmWeb.......php/demande informations.php     Méthode  GET : demande informations.php   Domaine ***.eu    code de statut 200 ok type HTML
- Méthode  GET :  css....
- Jquery.min.js   URL de la requête url de la requete : http://ajax.googleapis.com/ajax/libs/jq … ery.min.js  Méthode  GET     code de statut 304  Not modified   type JS
- scriptformulaire. js URL de la requête http:// ****.eu/IhmWeb.......php/scriptformulaire.js  code de statut 304  Not modified   type JS
- Méthode  GET :  css....

Voila ce que j'ai pu obtenir
Je continue à rechercher

pierrot

Hors ligne

#93 13-10-2014 17:49:09

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

J'ai ceci en lançant mon submit avec chrome :

XMLHttpRequest cannot load http://www.******.eu/IhmWeb******.php/formvalidation.php
Uncaught TypeError : Cannot read property 'messsage' of null    --------------- scriptformulaire.js :33
Ù.ajax.complete  --------------- scriptformulaire.js :33
0                        --------------- scriptformulaire.js : 2
p.fireWith            --------------- scriptformulaire.js : 2
w                       --------------- scriptformulaire.js : 4
d                       --------------- scriptformulaire.js : 4

Je voudrai spécifier qu'avant de faire les tests j'ouvre la session pour ne pas rester bloquer par le login

Cette fois avec chrome, j'ai pour formvalidation.php :
Method   POST   STATUS (canceled)   Type : Pending    Initiator : jquery.min.js:4  Script

Je continue..

Hors ligne

#94 14-10-2014 09:49:48

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour,

1) vous n'avez pas relu ce que je vous ai dit à propos du débogage, et vous m'avez donné toutes les informations sauf celles demandées

lancez la capture script et la capture réseau, et cliquez sur votre bouton submit... si l'erreur se reproduit (ce qui devrait être le cas), cliquez sur l'appel du fichier validation_form.php, accédez à la vue détaillée, et regardez l'onglet "corps de demande", et vérifiez que l'ensemble des paramètres demandés soient bien présents

2) Tant qu'il y a des erreurs Javascript, rien ne fonctionnera
3) Il y a des informations intéressantes dans ce que vous avez fourni, comme par exemple ce que vient faire dans votre fichier scriptformulaire.js 'messsage' avec 3 s.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#95 14-10-2014 15:20:27

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

bonjour,

Maintenant lorsque je rempli les champs du formulaire et que je valide "envoyer", au lieu qu'il se passe rien, ,j'ai une fenêtre qui s'ouvre et qui m'indique :

Une erreur est survenue lors du traitement de la soumission de votre formulaire avec erreur suivante: [ Erreur dans les paramètres soumis au serveur (-1)]
voila les infos que j'obtiens.

Concernat les infos visées par  les codes  MAJ  +CTRL +I avec Firefox/Chrome :

J'ai icônes : "général", "média", "permissions", "sécurité", et ne pouvant obtenir les champs que vous spécifiez (la capture script et la capture réseau), j'y ai ajouté une extension, et voila ce que cela donne :
DEMANDEINFORMATIONS.PHP
/ demandeinformations.php sans validation des champs du formulaire

http://***********.eu/IhmWeb************.php/demandeinformations.php
GET /IhmWeb************New.php/demandeinformations.php HTTP/1.1
Host: **********.eu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: PHPSESSID=ujbp2mg3a82o2r7ncb4e35p734
Connection: keep-alive

HTTP/1.1 200 OK
Server: Apache
X-Powered-By: PHP/5.3.29
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 859
Accept-Ranges: bytes
Date: Tue, 14 Oct 2014 14:00:09 GMT
X-Varnish: 2513838574
Age: 0
Via: 1.1 varnish
Connection: keep-alive

+ liste requêtes

#request# GET http://************.eu/IhmWeb**************.php/demandeinformations.php
GET /IhmWeb************.php/demandeinformations.php
#request# GET http://************.eu/onewebstatic/e5de4412f9.css
#request# GET http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
#request# GET http://************.eu/IhmWeb**************.php/scriptformulaire.js

DEMANDEINFORMATIONS.PHP
/ demandeinformations.php avec validation des champs du formulaire
Affichage fenêtre erreur  : "Une erreur est survenue lors du traitement de la soumission de votre formulaire avec erreur suivante: [ Erreur dans les paramètres soumis au serveur (-1)]"
Je me retrouve bien sur ma validation... après validation des champs du formulaire

http://************.eu/Ihm************.php/formvalidation.php
POST /IhmWeb*************.php/formvalidation.php HTTP/1.1
Host:***************.eu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: */*
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
X-Requested-With: XMLHttpRequest
Referer: http://***********.eu/IhmWeb*************.php/demandeinformations.php
Cookie: PHPSESSID=ujbp2mg3a82o2r7ncb4e35p734
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 0

HTTP/1.1 200 OK
Server: Apache
X-Powered-By: PHP/5.3.29
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 85
Accept-Ranges: bytes
Date: Tue, 14 Oct 2014 14:05:07 GMT
X-Varnish: 2514295854
Age: 0
Via: 1.1 varnish
Connection: keep-alive

+ liste requêtes

#request# POST http://*************.eu/IhmWeb************.php/formvalidation.php
POST /IhmWeb*******************.php/formvalidation.php

FORMVALIDATION.PHP
/ formvalidation.php
http://***********.eu/IhmWeb*********** … dation.php
Message : {"message":" Erreur dans les param\u00e8tres soumis au serveur (-1)"}

GET /IhmWeb***************.php/formvalidation.php HTTP/1.1
Host: ****************.eu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: PHPSESSID=ujbp2mg3a82o2r7ncb4e35p734
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.1 200 OK
Server: Apache
X-Powered-By: PHP/5.3.29
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 85
Accept-Ranges: bytes
Date: Tue, 14 Oct 2014 14:10:31 GMT
X-Varnish: 2514778197
Age: 0
Via: 1.1 varnish
Connection: keep-alive

+ liste requêtes

#request# GET http://*************.eu/IhmWeb************.php/formvalidation.php
GET /IhmWeb**************.php/formvalidation.php


SCRIPTFORMULAIRE.JS

/ scriptformulaire.js

http://**************.eu/IhmWeb*************.php/scriptformulaire.js
GET /IhmWeb**************.php/scriptformulaire.js HTTP/1.1
Host: ***************.eu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: PHPSESSID=ujbp2mg3a82o2r7ncb4e35p734
Connection: keep-alive
If-Modified-Since: Tue, 14 Oct 2014 12:53:45 GMT
If-None-Match: "a2e9442-d9b-505618175756b"

HTTP/1.1 304 Not Modified
Server: Apache
Last-Modified: Tue, 14 Oct 2014 12:53:45 GMT
Etag: "a2e9442-d9b-505618175756b"
Vary: Accept-Encoding
Content-Type: application/javascript
Date: Tue, 14 Oct 2014 13:46:43 GMT
X-Varnish: 2512635145 2511837979
Age: 518
Via: 1.1 varnish
Connection: keep-alive

+ liste requêtes

#request# GET http://*************.eu/IhmWeb**************.php/demandeinformations.php
GET /IhmWeb**************.php/demandeinformations.php
#request# GET http://*************.eu/onewebstatic/e5de4412f9.css
#request# GET http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
#request# GET http://*************.eu/IhmWeb**************.php/scriptformulaire.js
 

Voila ce que j'ai, ce que je sais est que maintenant "sa passe" entre demandeinformations.php >>scriptformulaire.js>> formvalidation.php
Je vais essayer encore et encore pour d'autres infos sur la requête Ajax, il va probablement encore manquer qqchose..
Au demeurant, sil y an avait une autre, je me demande bien d’où elle pourrait venir ?
merci bien
pierrot

Dernière modification par pierrot35 (14-10-2014 18:28:02)

Hors ligne

#96 14-10-2014 19:03:33

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonsoir,

Bon, c'est bien parce que c'est vous lol ^^

1) Si vous êtes sur Chrome
Tout en haut de la fenêtre à gauche vous avez deux icones puis, Elements et Network (ensuite : sources, timeline, ...) . Vous allez dans Network. Dans la liste de fichier, après avoir cliqué sur submit de votre formulaire, vous recherchez le fichier formvalidation.php dans la liste vous cliquez dessus. Apparaît alors une fenetre intégrée à droite. Vous restez sur l'onglet Headers et vous regardez le contenu de la section "Form Data" juste avant "Response Headers", et vous la copiez coller ici.

2) Si vous êtes sur Firefox
Après avoir cliqué sur le bouton submit, vous allez sur l'onglet Réseau (le dernier à droite juste après Profileur) et vous sélectionnez votre fichier formvalidation.php dans la liste. Dans la fenêtre de droite qui apparaît, vous sélectionnez l'onglet paramètres et vous copiez coller le contenu ici.

IMPORTANT
Si votre fichier formvalidation.php apparaît 2 fois dans votre liste, dites-le, et faites l'opération citée ci-dessus pour chacun d'eux en précisant quelles informations correspondent au premier appel (le formvalidation.php le plus en haut de la liste).

Merci.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#97 15-10-2014 10:55:34

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour Jc,
(re)merci pour le détail, j'ai trouver une autre fenêtre qui ressemble à ce que vous dites,
je vais tout refaire avec votre méthode
pierrot

Hors ligne

#98 15-10-2014 12:43:18

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Voila le résultat :
1/ ouverture formulaire avec champs et submit
2/ ouverture de l'outil développement ... >> sur Réseau
3/ envoi du submit
4/ apparition fenêtre sur l'ihm formulaire : Une erreur est survenue lors du traitement de la soumission de votre formulaire avec erreur suivante: [ Erreur dans les paramètres soumis au serveur (-1)]
Je valide  le "Ok" du message formulaire " une erreur.."

Résultats

Firefox

Dans  Réseau ( avec onglet XHR en bas de la fenêtre) :
Méthode : POST
Fichier : formvalidation.php
Domainer : ... eu
Type : HTML

Puis Fenêtre de droite

Entêtes >> cookies >> >> paramètres >> réponses >> délais
PARAMETRES = Aucun paramètre pour cette requête

Avec Chrome

Element >> Network >> sources >> Timeline .....
Onglets  Network
Headers >> Previews >> REsponse >> Coojies >> Timing
Dans Headers :
- Request headers ...
- Responses Headers ...


Pas de  section "Form Data"  nulle part, ni sous FF, ni sous Chrome

C'est peut être du fait que je sois sous linux ?
Je vais chercher dans les paquets synaptic si je trouve qqchose pour obtenir que vous me demandez
pierrot

Hors ligne

#99 15-10-2014 15:34:03

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonjour

Entêtes >> cookies >> >> paramètres >> réponses >> délais
PARAMETRES = Aucun paramètre pour cette requête

Bon bien c'est clair. Cela veut dire que vous avez une autre requête autre que celle de la validation de votre formulaire qui s'éxecute avant, et qui pointe sur formvalidation.php qui actuellement je le rappelle n'est prévue QUE pour gérer la validation de votre formulaire. Ce que je vois de plus logique, c'est que la requête qui gère votre captcha sur votre formulaire pointe également sur formvalidation.php
Merci de me confirmer cela.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#100 15-10-2014 19:44:33

pierrot35
Membre
Inscription : 16-08-2014
Messages : 63

Re : Protéger par un formulaire toutes les IHM d'une même session php

Bonsoir,

J'y avis pensé, alors j'avais déjà ôter de mon répertoire tout less anciens fichiers.

Je vais copier dans un répertoire "tout neuf" mes fichiers actuels ci-dessous :
- index HTML  du site public pour le login/logout.php qui ouvrira ma session privée
- login/logout.ph
- demandeinformations.ph (mon formulaire)
- scriptformulaire.js
- formvalidation.php
- bdconnect.php pour le require_once
Normalement avec ça uniquement ça doit "tourner" sur les 4 champs nomprenom, ..

Dans le formulaire actuel, je ne me sert donc pas de l'ancienne ihm ( avec champs nom,.. textarea, chekbox, envoi/réception email,..)
Mon HTML formulaire à une seule div, celle que je vous ai communiquée.

Je n'ai plus de captcha non plus, seulement les 4 champs et le bouton de validation du submit.

J'avais par ailleurs modifié le nom de form_validation.php en formvalidation.php pour éviter de faire "des noeuds" avec l'ancien
Si j'isole les fichiers cités ci-dessus, il ne doit plus avoir de "perméabilité".

Je vais aussi simplifier le head du formulaire, il y a un paquet de liens qui ne doivent pas être là, pour déconnecter complètement ce nouveau répertoire.

Je vois ça demain, ce soir je ne sais plus comment je m’appelle.. wink
Bonne soirée, merci
Pierrot

ps ; j'y pense, mon site public a aussi un formulaire, qui est toujours connecté avec les anciens fichiers.. et c'est lui qui me logue sur la session privée...

Hors ligne

Pied de page des forums