PHP|Débutant :: Forums

Advertisement

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

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

#2 Re : Forum Général PHP » insérer des videos mp4 dans des iframesavec un onclick, en php » 22-12-2014 17:29:49

je pourrai peut être mettre mes liens vidéos dans un fichier protégé par l'authentification php ? auquel cas seuls ce qui auraient accès aux sessions protégées pourraient aller directement sur les vidéos ? je me trompe ?

#3 Re : Forum Général PHP » insérer des videos mp4 dans des iframesavec un onclick, en php » 22-12-2014 17:29:49

Bonjour JC,

Ça marche parfaitement smile, dire que je m'étais embarqué dans du videoform /JS/ etc... puisque les href ne fonctionnaient pas pour le vidéos..
C'est en fait beaucoup plus simple.
J'ai fait une mosaïque de 9 écrans en ajoutant un poster "Titre de la vidéo" sur chaque écran, et lorsque l'on clique sur l'écran la vidéo se lance, cela m'évite d'avoir à ajouter des titres extérieurs.
Je te présente mes codes ci dessous, seulement les 6 premiers, les autres étant identiques :

           <!--1-->
            <video id="video" width="330" height="200" controls="controls" poster="PosterParametrage.jpg">
                <source src="VideoTest.mp4" type="video/mp4"  onclick="playVid();"/>
            </video>
             <!--2-->
            <video id="video" width="330" height="200" controls="controls" Poster="PosterClient.jpg">
                <source src="VideoTest2.mp4" type="video/mp4"  onclick="playVid();"/>
            </video>
             <!--3-->
            <video id="video" width="330" height="200" controls="controls" Poster="PosterDevis.jpg">
                <source src="VideoTest2.mp4" type="video/mp4"  onclick="playVid();"/>
            </video>
             <!--4-->
            <video id="video" width="330" height="200" controls="controls" Poster="PosterMateriaux.jpg">
                <source src="VideoTest2.mp4" type="video/mp4"  onclick="playVid();"/>
            </video>
            <!--3-->
            <video id="video" width="330" height="200" controls="controls" Poster="PosterTableauBord.jpg">
                <source src="VideoTest2.mp4" type="video/mp4"  onclick="playVid();"/>
            </video>
             <!--4-->
            <video id="video" width="330" height="200" controls="controls" Poster="PosterGPEC.jpg">
                <source src="VideoTest2.mp4" type="video/mp4"  onclick="playVid();"/>
            </video>

J'ai juste un petit souci, lorsque les vidéos arrivent à leurs termes, je n'ai plus mon poster "Ecran Titre", mais un écran noir, si bien que si je voulais revoir la 2nd par exemple, je ne sais plus à quoi elle correspondait.

Concernant la sécurité, j'ai essayé d'obtenir l'url des vidéos, mais elle n'apparaissent pas, à priori (?), seule les src apparaissent, pourrait on "remonter" dans le site par ce chemin ?
Si j'ajoute à l'url de la page du site la src de la vidéo, j'arrive à la voir directement à l'écran, je suis dons dans ma session protégée sans avoir à m'identifier, est ce que cela représente un danger ?
Mes Ecrans Titre et mes vidéos sont pourtant dans l'arborescence des sessions protégées.

Ça me paraît simple cette fois ..trop simple.. mais j'attends tes observations..
Pierrot

#4 Re : Forum Général PHP » insérer des videos mp4 dans des iframesavec un onclick, en php » 22-12-2014 17:29:49

Bonjour Jc,

Sacrément content de te "revoir", je ne voulais pas "t’embêter" vu le temps que tu avais déjà passé sur mes difficultés.
Je reprends donc tout au départ, mais auparavant pourrais tu m'indiquer si mes explications étaient claires, mon langage est toujours que celui d'un autodidacte.

Bien, mes manches sont relevées.
Ma situation : mes vidéos sont sur mon site, dans les 3 sessions sécurisées. Je reste bloqué sur les vidéos, les PDF eux se chargent bien avec href="#" et mes onclick(s), mais je vais les changer et passer en widget PDF, à priori c'est encore plus simple d’après ce que viens de voir.


Concernant le XMLHttpRequest, j'avais compris que cela était possible puisque l'échange de données étaient faites uniquement sur mon domaine, c'est à dire que mes fichiers vidéos et Pdf étaient sur mon serveur et non sur un autre domaine type YouTube.
Les href="#" et mes onclick(s) sur mes Pdf marchent impeccablement bien dans mes iframes. C'est ça que je ne comprenais pas, pourquoi ça fonctionne avec les Pdf et pas avec les href="#" et mes onclick(s) sur vidéos ?, je croyais que c'était la même chose.

lien =https://www.video2brain.com/fr/tuto/jsonp-ou-le-cross-domain

Et comme ça marchait pour les PDF, je me suis dit qu'ainsi j'éviterai de m'engager dans des savoirs JSONP trop inaccessibles pour moi, en restant centré sur la même recette mais "en vidéo".
Malheureusement, je trouve pas la solution.

Au départ, j'avais bien tenté avec <video></video>, la fenêtre s'ouvrait mais sans la video, alors j'ai laisser tomber puisque à contrario en iframe cela fonctionnait, et me "battais" avec les iframe(s?) depuis.
Je ne souhaite pas diffuser mes vidéos sur youtube, certaines sont confidentielles.
Juste une question subsidiaire, que ce soit des formats vidéos ou des présentations powerpoint, ce sera la même procédure ?

Je vais te suivre .. certes, c'est plutôt l'inverse smile, et te ferai un point le temps que je retravaille les codes  <video></video> pour voir ou ça n'allait pas à l'origine.

Bonne soirée
Merci
pierrot

Ps: mes 3 sessions sécurisées sont impeccables, j'en suis "très fier" une connaissance informatique à essayé d'y entrer (avec mon accord) et il n'a pas réussi.. J'ai pourtant eu qq difficultés ensuite : alors que chaque session était dans un dossier différent, lorsque l'une d'entr'elle était loguée, les autres l'étaient aussi, j'ai donc refait des intitulés différents des fichiers et tout est devenu normal, y compris les enregistrement mysql ( sauf le checkbox à choix multiples ou mysql enregistre toutes les options qu'elles soient cochées ou pas, mais cela n'est pas d'une grande importance, donc dans la file d'attente..), mais c'est déjà de l'histoire presque ancienne wink

#5 Forum Général PHP » insérer des videos mp4 dans des iframesavec un onclick, en php » 22-12-2014 17:29:49

pierrot35
Réponses : 6

Bonjour à tous,

je ne sais pas dans quel forum poser mes questions, n'ayant pas trouvé de thèmes qui correspondent à ce que je cherche.
Voila ma difficulté :
Je quasiment fini un site internet, avec 3 sessions privées ( login + mdp)  en lien avec mysql ( bien aidé par JC que je remercie).
Je voudrais ouvrir dans mes iframes soit des documents, soit des vidéos.
Concernant l'ouverture des documents dans mes iframes, pas de soucis particulier, mes difficultés viennent de l'ouverture des videos en mp4

Ce que je souhaiterai est, que selon chaque onclick, j'ouvre une vidéo différente dans la même iframe.
Actuellement j'en suis à ce niveau ( certains codes"rémaménagés" issus de divers forum, aucun ne me permet d'aboutir en totalité).

Dans le header de mon IHm, mon script :

<!-- DEBUT scryptIframeMp4 -->
<script type='text/JavaScript'>
var xhr = null;
function getXhr()
{
     if(window.XMLHttpRequest)xhr = new XMLHttpRequest();
else if(window.ActiveXObject)
  {
  try{
     xhr = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e)
     {
     xhr = new ActiveXObject("Microsoft.XMLHTTP");
     }
  }
else
  {
  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  xhr = false;
  }
}
 
function ShowPage(page)
{
getXhr();
xhr.onreadystatechange = function()
    {
     if(xhr.readyState == 4 && xhr.status == 200)
     {
     document.getElementById('page').innerHTML=xhr.responseText;
     }
    }
xhr.open("GET","srciptIframemp4.php?page="+page,true);
xhr.send(null);
}
</script>
<!-- FIN scryptIframeMp4 -->

Mon php concernant l'ouverture des documents :

<?php
 
$page=$_GET['page'];
$php='.php';
     if($page==0)require 'Document1.$php;
else if($page==1)require 'Document2'.$php;
else if($page==2)require 'Document3'.$php;
else if($page==3)require 'Document4'.$php;
else if($page==4)require 'Document5'.$php;
else if($page==105)require 'SousDoc/page5'.$php;
else if($page==106)require 'SousDocr/page6'.$php;
else if($page==107)require 'SousDoc/page7'.$php;
else require 'http:/*********/DocDefautt.php';
 
?>

Mon php concernant l'ouverture des vidéos qui ne marchent pas

<?php
$page=$_GET['page'];
$mp4='.mp4';
if($page==0)require 'Document1.$mp4;
else if($page==1)require 'Document2'.$mp4;
else if($page==2)require 'Document3'.$mp4;
else if($page==3)require 'Document4'.$mp4;
else if($page==4)require 'Document5'.$mp4;
else require 'http://****.php';
?>

Enfin mon html concernant uniquement les vidéos ( l'ouverture des document fonctionne correctement)

<a href="#" onClick="ShowPage(1)">video1</a>
<!-- 2nd lien -->
<a href="#" onClick="ShowPage(2)">video2</a>
<!-- 3ieme  lien -->
...
<!-- emplacement div de visualisation-->
    <div id="page">
 <!-- ouverture iframe ici -->
    </div>

Voila ce que j'obtiens, j'ai aucune ligne dans mon fichier VideoTest.mp4 .. :

Warning: Unexpected character in input: '' (ASCII=7) state=0 in /customers/d/a/6/*******l/VideoTest.mp4 on line 373 Warning: Unexpected character in input: '' (ASCII=30) state=0 in /customers/d/a/6/********l/VideoTest.mp4 on line 373 Parse error: syntax error, unexpected T_STRING in /customers/d/a/6/**********/VideoTest.mp4 on line 374
 

J'ai essayé ceci qui m'affiche bien ma vidéo en Iframe :

Pose 2 problémes  : pas d'ouverture par un onclick + me redemande les login et mdp de la session sécurisée alors que je suis déjà authentifié (?)
<div class="col" style="width:750px;margin-top:14px;border-color:red;border-width:3px;height:500px;">
<IFRAME name="frameOpus" width="650px" height="400px" SRC="http://*************/VideoTest.mp4" ></div>
</IFRAME>
</div>

J'ai essayé aussi ceci , mais je ne peux pas utiliser les onclick(s) pour ouvrir chaque vidéo dans la même iframe :

avec ce script
<script type="text/javascript">
  function afficher(id)
{
    if(document.getElementById(id).style.visibility=="hidden") document.getElementById(id).style.visibility="visible";
  else
    return true;
}
</script>

et son code html

<div>
        <input type="button" onclick="javascript:afficher('id_iframe');" name="bouton" value="BoutonTestIframe2">
        <iframe id="id_iframe" name="mon_iframe2" src="http://www.************/VideoTest.mp4" width="400px" height="500px" scrolling="auto" align="top" frameborder="3px" style="visibility:hidden;"></iframe>
        </div>

Peut être pouvez vous me mettre sur la voie, simplement .. , j'ai, me semble t'il, tout mais dans le désordre..
Merci par avance
Pierrot


ps: je ne veux pas "transiter" par youtube ...

#6 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonsoir JC,

Ça marche, à ma façon..
Je crois que l'erreur vient du fait que, dés le départ les variables n'étaient pas récupérées, donc après relecture(s) du Jquery initial... j'ai vu que les éléments du formulaire étaient tous stockés dans une variable "form_value_array"
J'ai bien essayé de récupérer les variables individuellement, mais en vain, je suis donc reparti à nouveau sur la gestion de mes propres variables directement dans le Js du formulaire initial, c'est à dire que j'ai extrait des codes parmi ceux que vous m'aviez indiqués, et, sans toucher à l'input HTML d'origine, modifié le JS d'origine et le traitement php également d'origine, comme suit :

//EXTRACTION variables cfg ==>  ajout dans JS d'origine
    var TRVar = $("#cfg-element-35-7").val();
    var TRVarEmail = $("#cfg-element-35-37").val();
    var TRVarTelephone = $("#cfg-element-35-41").val();
 [color=#a6a6a6]   //var TRVarIP = $("#iptest").val();
    //var TRVarIP = 'testIP';
    //$TRvarIp = 'testIP';[/color]
    var TRVarInvestPrive = $("#cfg-element-35-39-0").val();
    var TRVarInvestInstitution = $("#cfg-element-35-39-1").val();
    var TRVarInvestCroissance = $("#cfg-element-35-39-2").val();
    var TRVarCreatEntreprise = $("#cfg-element-35-39-3").val();
    var TRVarParticipActif = $("#cfg-element-35-39-4").val();
    var TRVarMarqueBlanche = $("#cfg-element-35-39-5").val();
   
jQuery.post('cfg-contactform-35/inc/form-validation.php', [color=#a6a6a6]// validation d'origine[/color]
{
'captcha_img':captcha_img,
'captcha_input':captcha_input,
'form_value_array':form_value_array,
'TRVariable':TRVar,
'VariableEmail':TRVarEmail,
'VariableTelephone':TRVarTelephone,
[color=#adadad]//'VariableIp':TRVarIp, // encours d'intégration[/color]
'VarInvestPrive':TRVarInvestPrive,
'VarInvestInstitution':TRVarInvestInstitution,
'varInvestCroissance':TRVarInvestCroissance,
'VarCreatEntreprise':TRVarCreatEntreprise,
 'VarParticipActif':TaVarParticipActif,
'VarMarqueBlanche':TRVarMarqueBlanche,
'deleteuploadedfile':deleteuploadedfile_value
},

Puis ajout dans le traitement PHP d'origine en conservant tel quel mon fichier bdconnect.php

[color=#bababa]// Ajout dans le PHP d'origine
                                //'TaVariable':TaVar,
        //'VariableEmail':TaVarEmail,
        //'VariableTelephone':TaVarTelephone,;
        //'VarInvestPrive':TaVarInvestPrive,
        //'VarInvestInstitution':TaVarInvestInstitution,
        //'varInvestCroissance':TaVarInvestCroissance,
        //'VarCreatEntreprise':TaVarCreatEntreprise,
              //'VarParticipActif':TaVarParticipActif,
        //'VarMarqueBlanche':TaVarMarqueBlanche,[/color]
$nomprenom = isset($_POST['TaVariable'])?$_POST['TaVariable']:'sans valeur nomprenom';
$email = isset($_POST['VariableEmail'])?$_POST['VariableEmail']:'sans valeur email';
$telephone = isset($_POST['VariableTelephone'])?$_POST['VariableTelephone']:'sans valeur tel';
$InvestPrive = isset($_POST['VarInvestPrive'])?$_POST['VarInvestPrive']:'sans valeur';
$InvestInstitution = isset($_POST['VarInvestInstitution'])?$_POST['VarInvestInstitution']:'sans valeur Inv Inst';
$InvestCroissance = isset($_POST['varInvestCroissance'])?$_POST['varInvestCroissance']:'sans valeur Inv Croiss';
$CreatEntreprise = isset($_POST['VarCreatEntreprise'])?$_POST['VarCreatEntreprise']:'sans valeur Creat Ent';
$ParticipActif = isset($_POST['VarParticipActif'])?$_POST['VarParticipActif']:'sans valeur Part Actif';
$MarqueBlanche = isset($_POST['VarMarqueBlanche'])?$_POST['VarMarqueBlanche']:'sans valeur Marq Blanc';
//$nomprenom = isset($_POST['cfg-element-35-7'])?$_POST['cfg-element-35-7']:'No_Value';
[color=#b5b5b5]//connexion directe bd[/color]
require_once('bdconnectsecure.php');
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();}
$result=$PDOInstance->query("INSERT INTO matable (nomprenom,email,telephone,InvestPrive,InvestInstitution,InvestCroissance,CreatEntreprise,ParticipActif,MarqueBlanche) VALUES('$nomprenom','$email','$telephone','$InvestPrive','$InvestInstitution','$InvestCroissance','$CreatEntreprise','$ParticipActif','$MarqueBlanche')");

Voila, comment ça fonctionne, je sais.. c'est du "minimum syndical", mais je pense avoir tout tenté à mon niveau, alors je m'en contenterai.
Tous les champs formulaires sont déjà contrôlés par le JS ( y compris  checkbox, sélections multiples, textarea,  captacha,..etc), et j'ai mis tout mes champs tables en Varchar.
Cela est devenu une banalité .. mais je vous remercie pour votre concours, même si l'acquis peut vous paraître insignifiant, c'est quand même grâce à cela que j'ai pu comprendre le processus et modifier les fichiers existants.
Si vous avez un ajout de sécurité à m'indiquer, sans "casser" mon petit boulot, n'hésitez pas, je reste à l'écoute.

Un jour je reprendrai vos codes pour travailler, mais pas tout de suite, je pense qu'une partie de ma difficulté venait aussi ( en sus) de la config de mon hébergeur, qui ont simplement "bottés" en touche lorsque je posais des questions..Le fichier sans BOM se remet en utf8 "normal" tout seul ?
Bien sincèrement
Pierrot

#7 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour JC,

Je n'ai toujours pas résultats, je vais refaire un nouveau dossier de fichiers "neufs" pour tenter un dernier essai, mais je n'y crois plus, c'est vraiment pour ma conscience.
Je crois que lorsque je recopie mes fichiers (ré)encodés avec notepad, ceux-ci ne sont pas enregistrés avec l'encodage modifié.
Dans tout les cas, je tiens cordialement à vous remercier pour vos efforts avec une infinie sincérité, il est rare de "rencontrer" un appui tel que le votre.
Pour moi c'est un échec, mais vous aurez fait votre possible sans compter.
Si ma dernière tentative fonctionnait, je vous préviendrais, je vais aussi voir du coté apache, je ne sais pas si c'est conforme.
Donc, pour la énième fois, vraiment, merci
Pierrot

#8 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour JC,

un point sur les modifs:

Fichiers connexion bd ==> Encodé en UTF8

<?php
session_start();
[color=#0a23ff]mb_internal_encoding("UTF-8");// indique d'utiliser l'encodage UTF-8[/color]
require("authentification.php");
if(Authentification::isLogged())
{
$DSN_string='mysql:host=**********.eu.mysql;dbname=*************_eu';
$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();}
    }
else{header('Location: login************.php');
}
?>

Fichier html submit - partie PHP -

<?php
session_start();
[color=#0921f0]header("Content-type: text/html; charset=utf-8" );
mb_internal_encoding("UTF-8"); // sinon reste par defaut en iso ISO-8859-1
echo mb_internal_encoding(); //affiche  ISO-8859-1[/color]
require("authentification.php");
if(Authentification::isLogged()){ }else{header('Location: loginsecure.php');}
?>

Fichier html submit - partie HTML -

[color=#0922f5]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">[/color]
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <!-- OK -->
<!--<meta http-equiv="pragma"  content="no-cache"/> <!-- précise pas de svg dans cache navigatuer ==> pas memo dans fichier temporaire -->
<meta http-equiv="Expires" content="-1" /> <!-- précise date expiration page -->
<title>FORMULAIRE DE DEMANDE D'INFORMATION************</title>
<meta name="description" content="rextre  refrencement" /> <!-- OK -->
<!--<meta http-equiv="Cache-Control" content="must-revalidate, max-age=0, public" />-->
<link rel="stylesheet" href="//***********.eu/onewebstatic/e5de4412f9.css" />
<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" />
<link rel="stylesheet" href="//*********.eu/onewebstatic/0f61860530.css" />
<!-- AJOUT jQuery-->
[color=#0c1cf5]<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js'></script>[/color]
<!-- AJOUT js-->
[color=#0f16f5]<script src="http://********.eu/session*********/scriptformulaire*********.js"></script>[/color]
<!-- fin AJOUT -->
<!--<link rel="stylesheet" href="//*************.eu/onewebstatic/a5a436fc4c.css" />-->
</head>
<body>
<div style="width:900px;min-height:50px;text-align:center;  font-family:Arial;
  font-weight:bold;
  font-size:20px;
  color:#800000;">
<?php
echo "Votre IP est $_SERVER[REMOTE_ADDR]";
?>
</div>
<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>
 </div>      
    <footer>
    </footer>
</body>
</html>

script .js AUCUNE MODIFICATION

function submit_form(){
// 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();
// ENVOI infos au serveur en ajax
  $.ajax
  (
      {
// url de la page de traitement ajax php AVEC require_once('bdconnect.php');
    url:'http://**********.eu/session*********/formvalidation********.php',
// données à transmettre
   formdata :{ fn:'validate_form', NOMPRENOM:nomprenom, EMAIL:email, TELEPHONE:telephone, TYPECONTACT:typecontact, sid:Math.random()},
    type: 'post',
    complete: function(xhr,result)
        {
// retour serveur 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 erreur suivante: [' + RETOUR_SERVEUR.message +']');}
        }
      }
    );
}

ET FICHIER VALIDATION Encodé et vérifié en UTF8 SANS BOM par Notepad ce ne change par ailleurs rien aux caractères du fichier

<?php
session_start();
//php formvalidation.php doit être encodé en UTF-8 sans BOM, vérifier Ok sans BOM avec notepad le 21 10 2014
// echo mb_internal_encoding(); //SI ACTIF EMPÊCHE LA VALIDATION DU FORMULAIRE
require("authentification.php");
if(!Authentification::isLogged()) { print json_encode(array('message'=>'Utilisateur non authentifié.'));exit; }
function validation_database($nomprenom,$email,$telephone,$typecontact)
{
require_once('bdconnect*******.php');
  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;
} // FIN VALIDATION DONNÉES = OK
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) // ==> COMPARAISON 'FN' AVEC QUELLES VALEURS ?  ==>  éxécution code à partir de quelles valeurs ?
{
  default: print json_encode(array('message'=>'Fonction Ajax inconnue / non gérée.'));exit;
  // sortie du switch.
  break;
  case 'validate_form':
      // si données champs formulaire inexistantes ou différents des datas du formulaire
    if(!isset($_POST['NOMPRENOM']) || !isset($_POST['EMAIL']) || !isset($_POST['TELEPHONE']) || !isset($_POST['TYPECONTACT']))
    //if(!isset($_POST['nomprenom']) || !isset($_POST['email']) || !isset($_POST['telephone']) || !isset($_POST['typecontact']))
    //= erreur de champs de données
    {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'];
    // VALIDATION CHAMPS DONNÉES sinon sortie
    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;}
    // VALIDATION BD sinon sortie
    if (validation_database($nomprenom,$email,$telephone,$typecontact)===false)
    {exit;}
    print json_encode(array('message'=>'ok'));
}
?>

Voila, si tout est ok, le résultat est le même :
==> 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)]


En console:
validation.php  utf8 sans BOM = erreur
L'encodage de caractères du document HTML n'a pas été déclaré. Le document sera affiché avec des caractères incorrects pour certaines configurations de navigateur si le document contient des caractères en dehors de la plage US-ASCII. L'encodage de caractères de la page doit être déclaré dans le document ou dans le protocole de transfert. @ http://*****.eu/session************/****validation*********.php
- réseau => idem = data néant

Script .js
Avec javasriptdeobfuscator, il y aurait un souci avec : "complete: function(xhr,result)" lorsque le lance le submit
Avec Chrome : " The following resources are missing a cache expiration that do not specify and expiration may not be cached by browsers"
+
L'encodage de caractères d'un document en texte brut n'a pas été déclaré. Le document sera affiché avec des caractères incorrects pour certaines configurations de navigateur si le document contient des caractères en dehors de la plage US-ASCII. L'encodage de caractères du fichier doit être déclaré dans le protocole de transfert ou le fichier doit utiliser une marque d'ordre des octets (BOM) comme signature d'encodage. @ http://*****.eu/session*********/scriptformulaire****.js

Je vais télécharger des logiciels d'analyse ou voir avec ubuntu ce que je peux faire.

J'ai tenté de multiples codes.. en vain, je ne le note pas ici, c'est du Zola..

Je continue encore 48 h, après cela j'abandonne, j'en suis désolé... tout ce boulot pour rien.. mais je n'irai pas plus loin, comme vous le dites, je ne comprends pas, alors c'est pas la peine d'insister.
J’espère que cela servira à quelqu'un et que quelqu'un  de plus doué reprendra tout ça.

Merci
Pierrot

#9 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour Jc

merci beaucoup, je me doutais qu'il y avait quelquechose dans l'encodage ( je l'avais lu sur internet) mais j'avais un immense doute sur ce que j'avais compris , je vois ça demain, ce soir c'est pause.

j'étais encore en recherche de solution avec la console de firebug et j'ai un message qui me dit lorsque je lance le script :

this page using already using Jquery v1.10.2 et moi je suis en <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

Pourtant le pensais Jquery.. inactif depuis que je l'avais enlevé ?
Je vais mettre cela aussi à jour.

J'ai aussi ceci, toujours sur le script :

If <script> tags have a 'type' attribute, it should equal 'text/javascript' or 'application/javascript'. Also scripts must be parsable (syntactically correct).

Et puis avec l'outil FF, toujours sur le script,  j'ai :

[19:23:07,868] L'encodage de caractères d'un document en texte brut n'a pas été déclaré. Le document sera affiché avec des caractères incorrects pour certaines configurations de navigateur si le document contient des caractères en dehors de la plage US-ASCII. L'encodage de caractères du fichier doit être déclaré dans le protocole de transfert ou le fichier doit utiliser une marque d'ordre des octets (BOM) comme signature d'encodage. @ http://**********.eu/session********/scriptformulaireprive.js

Je vais passer tout mes fichiers sur bluefish ou notepad pour vérifier l'encodage utf8, j'ai pas l'impression que cela est valide partout.

Je pense que cette fois j'approche, je ne vois pas ce qu'il pourrait y avoir d'autres, tout ça m'a fait "potasser" des quantités d'info, il reste juste Json qui n'est pas encore très clair pour moi.

Bonne soirée, ou bonne journée,
pierrot

#10 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonjour JC,

Le fichier script ne contient pas de jQuery ? voir  ci-dessous :

function submit_form()
{
[color=#b8b8b8]// 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();

[color=#bababa]// 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=#b8b8b8]    //function ajaxSuccess ()
    //{alert(this.responseText);} [/color]
      {
[color=#b3b3b3]// url de la page de traitement ajax php AVEC require_once('bdconnect.php');[/color]
    url:'http://*************.eu/sessionsecure/formvalidationsecure.php',
[color=#b5b5b5]// données à transmettre[/color]
   formdata :{ fn:'validate_form', NOMPRENOM:nomprenom, EMAIL:email, TELEPHONE:telephone, TYPECONTACT:typecontact, sid:Math.random()},
    type: 'post',
    complete: function(xhr,result)
        {
[color=#b8b8b8]// 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 +']');}
        }
      }
    );
}


Comme je vous l'ai indiqué, j'ai isolé mes fichiers dans un dossier "sessionsecure" et changé les noms de chacun :
- demandeinformationsecure.php remplace demandeinformations.php
- scriptformulaireprive.js  remplace scriptformulaire.js
- formvalidationsecure.php remplace formvalidation.php
- loginsecure.php remplace login.php

Les liens entr'eux étant reconstitués, j'obtiens le même message : 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)]
+
Vérification avec Réseau / paramètres = idem pas de données

Si je synthétise (avec des mots simples) :
Mon html va bien chercher le scriptformulairesecure.js, qui à son ouvre le traitement formvalidationsecure.php en lui transmettant mes données en Ajax, et récupère la validation du formulaire.
Dans le script existent des alertes :

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 +']');} .....

== > le traitement échoue puisque les données envoyées par le script ne sont pas bonnes, et le retour provoque l'erreur que l'on connaît, jusque là, est ce que je me trompe ?

Est ce que se sont les données qui ne sont pas bonnes, ou une mauvaise récupération ?

// 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();

ou le traitement qui ne se fait pas correctement ?

Les données envoyées:

 formdata :{ fn:'validate_form', NOMPRENOM:nomprenom, EMAIL:email, TELEPHONE:telephone, TYPECONTACT:typecontact, sid:Math.random()},
    type: 'post',

la validation

switch($fn) // ==> COMPARAISON 'FN' AVEC QUELLES VALEURS ?  ==>  exécution code à partir de quelles valeurs ?
{
  default: print json_encode(array('message'=>'Fonction Ajax inconnue / non gérée.'));exit;
  // L'instruction break permet de sortir d'une structure for, foreach, while, do-while ou switch.
  break;
  // ???????????????
  case 'validate_form':

Ce que je me demande est : quelles valeurs sont comparées avec switch ?

Et puis, c'est bien

if (!isset($_POST['fn']) || empty($_POST['fn']))
// json_encode — indique la représentation JSON de 'fn'
{print json_encode(array('message'=>' Erreur dans les paramètres soumis au serveur (-1)'));exit;}

qui m'envoie dans les cordes à chaque fois , puisque "fn" inexistant,  non ?.. ça part de là ..

Préalablement à cela Si mes données étaient fausses, les alertes de validation l'indiquerait

  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;
} // FIN VALIDATION DONNÉES = OK

==> à priori :
- mauvaise validation bd = erreur <=> à contrario pas de message donc validation bd Ok, mais si les données étaient nulles ou vides avec un formulaire validé ?
- mauvaise soumission du 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)]" , pour moi ce serait  ou l'acte soumission ou les données qui sont comparées qui ne vont pas ==> pas de données
- quelles données sont engagées en validation ?



Bref, je croyais avoir compris le flux entre script et validation, et bien du coup j'ai maintenant un sacré doute ..

Remarque
Dans mon code je remarque que le $ devant ajax "( $.ajax)" ainsi que dans "var nomprenom=$('#form_nomprenom').val();" sont de couleurs bleue claire, je me demande si cela est normal ?

Simple.. je sens le problème par là .. bien sûr le ressenti et l'informatique ...
Pierrot

#11 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

Bonsoir JC,

J'ai changé tout les noms des fichiers .php.js .html, et repositionné ces fichiers dans un nouveau dossier.
A priori il ne devrait plus avoir de requête "invisible", pourtant quand je passe le formulaire en analyse  ( réseau), j'ai pas de data dans les paramètres,.. pourtant, elle tourne wink
Je pensais que casser tout les liens précédents aurai pu agir, mais rien n'y fait, je suis toujours au même point.
J'ai contacté mon hébergeur et lui exposé la difficulté, ce n'est qu'une hypothèse, mais .. on verra.
Cela ne pourrait pas être simplement un problème d'encodage (utf8) php/pdo/mysql/..?
J'ai remarqué que même si je n'entre pas de texte dans les champs du formulaire, le résultat était identique au fait de remplir ces mêmes champs.

Il y a bien quelque chose qui ne va pas, maintenant que j'ai compris la méthode, je comprends pas pourquoi ça marche pas, .. ça devrait marcher.. en fait c'est pas si sorcier en terme de logique.
C'est pas le check entries qui ferait cela, même si il intervient après l'erreur ?

Pour ce soir, c'est bon, je reprends demain, je vais finir par trouver
Bonne soirée
pierrot

#12 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#13 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#14 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#15 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#16 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#17 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#18 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#19 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#20 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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'));
    }
}  
?>
 

#21 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#22 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#23 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#24 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

#25 Re : Forum Général PHP » Protéger par un formulaire toutes les IHM d'une même session php » 10-11-2014 07:31:50

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

Pied de page des forums

Propulsé par FluxBB