PHP|Débutant :: Forums

Advertisement

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

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

#26 14-06-2012 13:37:26

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Je suis d'accord avec toi, cela n'est pas très surtout après 3mois seulement de programmation.

J'avais bien compris pour le but de ton lien pour le preg_match, c'est juste que j'ai pas compris d'ou venait l'erreur et je savais pas pour l'affectation de variable (j'ai encore pas mal de chose simple à apprendre on dirait). Je vais donc relire tout cela et voir comment corriger cela.

Pour ce qui est de l'utf8, justement comme je n'arrivais pas à résoudre le problème du preg_match, je me suis tourné vers quelque chose un peu plus à mon niveau mais je connaissais pas utf8_encode, j'ai donc créer cette fonction pour enregistrer mes données.

Tu m'as dit plus haut que les gens utilisaient htmspecialchar pour ce simplifier la vie, il faut donc que je contrôle mes données via preg_match. Mais même si j'utilise preg_match je suis obligé de passer par htmlspecialchar pour convertir les caractères spéciaux ou alors utiliser la fonction utf8_encode que tu viens de me faire connaitre? (PS: désolé d'être chiant)

Je vais faire un tour du côté de jpchart pour voir ce que ça donne avec html2pdf, mais j'avoue que je regrette bien le faite que pchart me sorte une image vide parce que les graphiques sont plutôt sympa esthétiquement parlant.

maxredphenix

Hors ligne

#27 14-06-2012 13:56:17

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Ah, je viens de trouver mtchart:  http://code.google.com/p/mtchart/  qui est un fork de pchart, donc à voir aussi en plus jpchart....

Parce que le problème de html2pdf c'est qu'il est crée côté serveur donc tous les scripts de génération de graph en JS ou autres ne fonctionne pas

Dernière modification par maxredphenix (14-06-2012 13:59:05)

Hors ligne

#28 14-06-2012 17:12:40

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Je viens de tenter mon regex pour les dates,

Pour le moment j'ai une erreur mais je cherche à la corriger, par contre est-ce que la structure est bien pour toi:

// ******** Déclaration des Dates + Regex qui permet d'inverser l'année avec le jour pour un enregistrement correct dans mysql ********
  // Fonction de vérification de la validité des dates
  $format_date= '#^¨([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})$#';
  function checkdate(mydate){ return preg_match($date,$format_date);}
  // Fonction de conversion des dates pour l'enregistrement dans la bdd
  function ConversionDate($date,$sep){return implode($sep,array_reverse(explode($sep,$date)));}
  // Test et Conversion des dates
  // if (checkdate($_POST['date_appel']) va tester si la date est valide
  // Si c'est le cas on converti la date avec la fonction ConvertionDate
  // $date = $_POST['date_appel']
  // $sep = /
  // Sinon le champs de date sera vide
  if (isset($_POST['date_appel'])){if (checkdate($_POST['date_appel'])!=0){$date_appel=ConversionDate($_POST['date_appel'], '/');}else{$date_appel="";}}else{$date_appel="";}

Pour le moment l'erreur est:  Parse error: syntax error, unexpected ')', expecting '&' or T_VARIABLE  sur ligne de la fonction chekdate mais je cherche d'ou elle vient

Hors ligne

#29 15-06-2012 03:31:43

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

Re : Questions et problèmes sur MYSQL


   function checkdate($mydate){
       $format_date= '#^¨([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})$#';  
       return preg_match($format_date,$mydate);
   }
 

La fonction fonctionnera mieux comme ainsi wink

Dernière modification par Jc (15-06-2012 03:35:46)


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

Hors ligne

#30 15-06-2012 06:10:10

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour,

Je viens de changer la fonction en mettant comme toi le $format_date à l'intérieur de la fonction. j'ai eu une erreur du style Fatal error: Cannot redeclare function donc j'ai regarder sur le net et j'ai changer le nom de la fonction par check_date comme tu l'avais noté Maljuna Kris et c'est bon plus d'erreur, sauf que toutes mes dates s'enregistrent avec des zéro 0000-00-00 alors qu'avant c’était bon.

J'ai tester avec deux type de séparateur au cas ou, le - et / mais idem. Sachant que normalement toutes mes dates sont faites avec le datepicker jquery au format jj/mm/aaaa.

// Fonction de vérification de la validité des dates
  function check_date($mydate){
    $format_date= '#^¨([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})$#';  
    return preg_match($format_date,$mydate);
  }
  // Fonction de conversion des dates pour l'enregistrement dans la bdd
  function ConversionDate($date,$sep){return implode($sep,array_reverse(explode($sep,$date)));}
  // Test et Conversion des dates
  // if (check_date($_POST['date_appel']) va tester si la date est valide
  // Si c'est le cas on converti la date avec la fonction ConvertionDate
  // $date = $_POST['date_appel']
  // $sep = /
  // Sinon le champs de date sera vide
  if (isset($_POST['date_appel'])){if (check_date($_POST['date_appel'])!=0){$date_appel=ConversionDate($_POST['date_appel'], '/');}else{$date_appel="";}}else{$date_appel="";}

Dernière modification par maxredphenix (15-06-2012 06:12:23)

Hors ligne

#31 15-06-2012 07:55:10

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

Re : Questions et problèmes sur MYSQL

Bonjour

jc a écrit :

2) pour le str_replace, selon les traitements que l'on a besoin d'effectuer il peut être plus performant de l'utiliser. Dans ton cas, tu n'en as même pas besoin en fait. A partir du moment où tu as fait un check_date() dessus auparavant, et que, par conséquent tu es certain de la validité de la chaîne de caractère, tu peux construire la nouvelle date au format mySQL par concaténation avec les instructions left et substr de php

Tout simplement parceque checkdate() est une fonction php qui existe déjà et qui n'a rien à voir cf. Manuel PHP C'est le pourquoi de l'erreur du redeclare.^^

Pour le problème des zéros. A mon avis dans la date $_POST['date_appel'], l'heure se trouve renseignée, d'où le problème de conversion car la fonction de MK présuppose que seul l'information date soit fournie. Et si ça passe c'est parce que tu as une erreur au niveau de ton pattern (que je n'avais pas vérifié).

Edit: Pour répondre à une de tes question tu n'as pas besoin de htmlspecialchars dans le contexte. Je t'invite à lire la doc sur le manuel PHP d'ailleurs.

Dernière modification par Jc (15-06-2012 09:51:33)


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

Hors ligne

#32 15-06-2012 10:29:41

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Questions et problèmes sur MYSQL

Jc a écrit :

Pour le problème des zéros. A mon avis dans la date $_POST['date_appel'], l'heure se trouve renseignée, d'où le problème de conversion car la fonction de MK présuppose que seul l'information date soit fournie.

Je confirme.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#33 15-06-2012 15:27:56

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

Re : Questions et problèmes sur MYSQL

Bonjour,

J'avais un peu plus de temps que d'habitude, j'en ai profité pour lire attentivement le contenu du code de ta page dont voici l'extrait qui m'interresse

maxredphenix a écrit :

<!-- Appel de la page php servant à l'affichage de l'utilisateur qui est connecté ainsi que le bouton de deconnexion -->
      <?php require_once('../header_navigation.php');?>
    </div>
    <!-- Boucle de récupération des données de la bdd via l'id correspondant à la ligne choisie -->
    <?php while ($datas = mysql_fetch_assoc($reponse)) { ?>
    <!-- Boutons suivant et précédent -->
    <div>
      <div id="BtnSuivant">
        <a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']+1; ?>"><img src="../../images/suivant.png" width="33" height="33" alt="Page suivante" /></a>
      </div>
      <div id="BtnPrecedent">
        <a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']-1; ?>"><img src="../../images/precedent.png" width="33" height="33" alt="Page précédente" /></a>
      </div>
    </div>

Voici mes remarques sur ce bout de code
1) Que contient $reponse? (normalement ta requête SQL) car on ne voit pas où tu y affectes un contenu.
2) Ton commentaire dans le code indique que tu retournes grâce à cette requête les données (colonnes) contenues dans la ligne choisie. A partir de là pourquoi faire un while sur le résultat de requête puisqu'elle est censée ne contenir qu'une seule ligne correspondant à l'id choisi ???
3) A partir de là, tes problèmes d'affichage de bouton sont plus évidents. Assures-toi quand même que les fichiers suivant.png et precedent.png ont le bon chemin d'accès par rapport à leur contexte d'appel.

++

++

Dernière modification par Jc (15-06-2012 15:49:17)


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

Hors ligne

#34 15-06-2012 16:56:34

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Oui j'ai bien une requete faite plus haut dans la page:

<?php
  require_once('../connexionbdd.php');
  // Si id a été posté :
  if (isset($_GET['id'])){
    // Protection de la variable "ID" pour éviter une faille SQL
    $_GET['id'] = addslashes($_GET['id']);
    $reponse=mysql_query('SELECT * FROM demande WHERE ID=\'' . $_GET['id'] . '\'') or die (mysql_error());
  }
?>

Pour le while, je sais pas!! je pense que comme j'ai fait tout mes tableaux comme ça j'ai continué dans le même principe.
Le chemin des bouton est correct voila un aperçu de ce que donne la page:

Apercu page

Si je passe par dessus le bouton précédent j'ai bien l'url avec id (-1) qui s'affiche
http://localhost/Monsite/php/formulaires_visualisation/gest_demande.php?id=1

Et maintenant c'est bon, ça fonctionne mais j'ai rien touché mis à part que j'ai mis un border-radius sur les images......:(  mais tant mieux.


Sinon je cherche toujours pour l'enregistrement des données via le preg_match mais c'est un peu dur...

Pour le date picker je vais regarder mais j'ai bien une date en format date et sans l'heure qui s'affiche dans mon input 15/06/2012 et normalement il doit seulement afficher cela, à moins qu'il envoie aussi les h:min:s sans pour autant les afficher

bizarre

Merci pour le temps que tu me consacres

Hors ligne

#35 15-06-2012 16:58:30

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Est-ce que je peux t'envoyé un message privé avec quelques questions vis à vis de certain morceau de code que j'ai fait, pour avoir ton avis  et savoir si c'est bien ou vraiment nul??

Merci

Hors ligne

#36 15-06-2012 17:23:47

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

Re : Questions et problèmes sur MYSQL

Bonjour,

Pour le code montré dans ton avant dernier post, tu n'as visiblement pas pris en compte toutes les recommandations que je t'ai faites jusqu'à présent. Pour t'aider un peu, le code que tu m'as montré devrait ressembler plutôt à ceci.


require('../connexionbdd.php');
if(isset($_GET['id'])){$id=intval($_GET['id']);}else{$id=0;}
if ($id>0){
  $response=mysql_query("SELECT * FROM demande WHERE ID=$id") or die(mysql_error());
}else {
   // code de traitement associé
}
 

Reste encore à dire sur ce bout de code
1) Évite le SELECT * déjà abordé et expliqué moult fois sur ce forum
2) J'ai déjà dit de ce que je pensais à propos des "or die(mysql_error())" dans ce post.

...
Sinon pour tes die(), prends l'habitude de travailler avec un gestionnaire d'erreur.
Tout comme on viens de faire avec MySQL, la première étape avant d'intégrer un véritable gestionnaire d'erreur serait de faire ceci

<?php

    try {
        //....
        $result = mysql_query($select);
        if ($result===false){throw new Exception("Mon texte d'erreur",E_USER_NOTICE);}
        //....
    }catch (Exception $e){print $e->getMessage();exit;}

Donc ceci est l'équivalent de ce que tu as écrit précedemment mais plus proprement.
Si tu prends cette habitude, cela sera déjà un bon début.

++

NB: exit ou die() c'est la même chose.

Pour ta question sur le message privé. Si tu as du code je préfère que tu utilises le wall du forum et que cela profite dans la mesure du possible à tout le monde. Merci.

Dernière modification par Jc (15-06-2012 17:25:16)


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

Hors ligne

#37 15-06-2012 20:55:12

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Merci ça fonctionne niquel, j'ai donc mis ceci:

<?php
  require('../connexionbdd.php');
  // On vérifie que l'ID à été posté
  if(isset($_GET['id'])){$id=intval($_GET['id']);}else{$id=0;}
  if ($id>0){
    $reponse=mysql_query("SELECT * FROM demande WHERE ID=$id");
  }else {
     // code de traitement associé
  }
?>

J'ai enlevé le die mysql_error comme tu me l'as conseillé et je voulais savoir, si je mets pas  SELECT * FROM pour récupérer toutes les données de la table pour l'ID désiré, comment faire alors pour que toutes ces informations soient affichées ensuite dans mes input? je mets un SELECT champ1, champ2 etc... ?

Pour mes questions dont je te parlais voila déjà la première et je t'embêterai plus tard pour les prochaine si t'es toujours d'accord:
J'ai une table utilisateurs qui contient
- id
- nom_prenom (les 2 sont sont mis sur un seul champ car non utile separément)
- pseudo
- password
- etc ...

Voila ma page d'authentification:

<!DOCTYPE html>
<html>
  <head>
  <!-- Icone de la fenêtre du navigateur -->
  <link rel="icon" type="image/png" href="../../images/favicon.png" />
  <!-- Titre -->
  <title>Formulaire d'authentification</title>
  <!-- Appel des CSS -->
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link href="css/template_authentification.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <form action="verif_authentification.php" method="post">
    <div id="fieldsetlogin">
      <?php
      // Affichage message erreur?
      if(!empty($errorMessage)){
        echo '<p>', htmlspecialchars($errorMessage) ,'</p>';
      }
      ?>
      <!-- Logo -->
      <div id="logo"><a title="logo" alt="logo"></a></div>
      <!-- Login & MDP -->
      <div id="champlogin">
        <div id="colonne_gauche">
          <label for="login">Login :</label></br>
          <label class="password" for="password">Password :</label></br>
          <input class="submit" type="submit" name="submit" value="Connexion" />
        </div>
        <div id="colonne_droite">
          <input type="text" name="login" id="login" value="" /></br>
          <input type="password" name="password" id="password" value="" />
        </div>
      </div>
    </div>
    </form>
  </body>
</html>

et voila ma page de traitement:

<?php
  // On vérifie que les données envoyées depuis la page d'authentification soient correct
  if ($_POST["login"] != "" && $_POST["password"] != ""){
    $login= $_POST["login"];
    $password=$_POST["password"]; // Ou on crypte le password avec l'algorithme MD5 : $password=md5 ($_POST["password"]);
   
    // Connexion au serveur
    require_once('php/connexbdd.php');
   
    // Création de la requète SQL
    $sql="SELECT pseudo,password FROM utilisateurs WHERE pseudo='".$login."' AND password='".$password."'";
    // Exécution de la requète
    $requete=@mysql_query($sql, $link) or die ($sql."<br>".mysql_error());
    // Récupération du résultat
    $result=mysql_fetch_object($requete);
    // Si la requète est ok
    if (is_object($result)){
      // Début de la session
      session_start();
      // Enregistrement de la variable de session: le login
      $_SESSION["login"]=$login;
      header("location:index.php");
    } else{
      // L'authentification à échoué donc on retourne à la page d'authentification
      header("authentification.php");
    }
  }else{
    // L'authentification à échoué donc on retourne à la page d'authentification
    header("authentification.php");
  }
?>

Est-ce que cela suffit pour une identification correcte sur le site? Si je choisi l'encryptage md5, je suppose que dans la bdd je configure le champ password en type password?
De plus est ce que cela suffit pour faire un affichage du nombre de connecté sur site (via les sessions) dans ma barre de navigation ou est-ce qu'il faut rajouter un champ dans la table du genre "connecte" qui serait mis à true ou false suivant si on est connecté ou non et dans le code de ma barre de navigation je lis ce champ et j'affiche ainsi le nombre total de connecté (avec un truc en plus pour prendre n compte le faite que l'utilisateur à couper son ordi sans se déconnecter)

Sinon je continu de chercher pour le fichier de traitement, j'avance petit à petit mais c'est bien je connais de nouvelles choses comme ça

Merci

Hors ligne

#38 16-06-2012 17:26:30

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour,


J'ai mis un print de ce qui est envoyé à la page de traitement et que ce soit le code de base qui affiche la date du jour ou la date sélectionner par le datepicker j'ai bien 16/06/2012 et pas d'heure en plus, c'est bizarre ça devrait fonctionner du coup....:(

Hors ligne

#39 16-06-2012 20:02:23

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonsoir,

J'ai passé tout l'aprem à lire des tutos sur les regex: j'en extrait l'essentiel afin de créer ceci:

Un regex de verification pour tous les posts qui doivent contenir un numéro de téléphone

function check_num($numero){
    // Définition du modèle : Le numéro doit commencer par un 3 ou un 0 et peut être suivie des chiffres (0 à 9) de 4 à 9 fois
    // On autorise donc les numéros abrégées du site 3xxxx et tous les numéros français 06xxxxxxxx 03xxxxxxxx
    $format_num= "#^[3|0][0-9]{4,9}$#";
    // On vérifie que le numéro
    return preg_match($format_num,$numero);
  }

// exemple avec le post du numéro de l'appelant
if (isset($_POST['num_appelant'])){if (check_num($_POST['num_appelant'])!=0){$num_appelant=$_POST['num_appelant'];}else{echo 'Le champ ' . $_POST['num_appelant'] . ' n\'est pas dans un format valide, il doit contenir des caractères non autorisés, recommencez !';}}else{echo 'Le champ ' . $_POST['num_appelant'] . ' n\'est pas dans un format valide, il doit contenir des caractères non autorisés, recommencez !';}

Un regex de vérification de texte, par contre je sais pas s'il prends les caractères accentués:

function check_texte($texte){
    // Définition du modèle :
    // \w :Indique un caractère alphanumérique ou un tiret de soulignement. Correspond à [a-zA-Z0-9_]
    // \t :Indique une tabulation
    // \n :Indique une nouvelle ligne
    // \r :Indique un retour chariot
    // \s :Indique un espace blanc
    $format_texte= "#^\w\t\n\r\s$#";
    // On vérifie que le texte correspond bien au modèle et ne contient pas d'autres caractères que ceux autorisées
    return preg_match($format_texte,$texte);
  }
// Exemple avec le post du champ commentaires
if (isset($_POST['commentaires'])){if (check_texte($_POST['commentaires'])!=0){$commentaires=$_POST['commentaires'];}else{echo 'Le champ ' . $_POST['commentaires'] . ' n\'est pas dans un format valide, il doit contenir des caractères non autorisés, recommencez !';}}else{echo 'Le champ ' . $_POST['commentaires'] . ' n\'est pas dans un format valide, il doit contenir des caractères non autorisés, recommencez !';}

Est-ce que pour toi ce sont des regex qui déjà sont correct ou faux (après tout) et s'ils sont suffisant niveaux sécurité

Merci et passe un bon week end

maxredphenix

Dernière modification par maxredphenix (16-06-2012 20:02:54)

Hors ligne

#40 17-06-2012 20:03:05

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour, pour les SELECT * je viens de lire:
http://www.expreg.com/fred_article.php? … es_etoiles

Très intéressant et je comprends mieux pourquoi tu veux pas je mette de *

Hors ligne

#41 20-06-2012 17:03:16

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour,

Plus de réponses? Pour le moment j'ai laissé tombé les regex, je préfère attendre une réponse de votre part avant de continuer et faire un code complètement faux.

Juste comme ça je voudrais savoir le nombre de ligne dans une requete. Est-ce que c'est mieux de faire:

<?php
  require_once('../php/connexionbdd.php');
  $reqmois=mysql_query("SELECT date_debut FROM astreintes WHERE MONTH(date_debut)=$month AND YEAR(date_debut)=$annee ORDER BY id");
  $reqannee=mysql_query("SELECT date_debut FROM astreintes WHERE YEAR(date_debut)=$annee ORDER BY id");
  if ($reqmois) {$astreinte_mensuel= mysql_num_rows($reqmois);}
  if ($reqannee) {$astreinte_annuelle= mysql_num_rows($reqannee);}

ou

<?php
  require_once('../php/connexionbdd.php');
  $reqmois=mysql_query("SELECT date_debut FROM astreintes WHERE MONTH(date_debut)=$month AND YEAR(date_debut)=$annee ORDER BY id");
  $reqannee=mysql_query("SELECT date_debut FROM astreintes WHERE YEAR(date_debut)=$annee ORDER BY id");
  while ($datas = mysql_fetch_assoc($reqmois)) {
    $astreinte_mensuel= mysql_num_rows($reqmois);
  }
  while ($datas1 = mysql_fetch_assoc($reqannee)) {
    $astreinte_annuelle= mysql_num_rows($reqannee);
  }

Pour après afficher les données $astreinte_mensuel et astreinte_annuelle dans un tableau  ?

Encore merci pour votre aide et le temps que vous m'avez consacré jusqu'à présent

maxredphenix

Hors ligne

#42 20-06-2012 18:55:45

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

Re : Questions et problèmes sur MYSQL

Bonjour,

Désolé si je t'ai un peu négligé, mais il y a beaucoup de choses, et plus y en a plus cela prends du temps pour te répondre. Pour ta dernière question la réponse est ni l'une ni l'autre. La bonne solution est de mettre en place une seule requête dont la signature (l'ordre des colonnes de sortie) corresponde à la vue utilisateur associée.
Ensuite de mémoire pour ce que j'ai déjà vu, ne fait pas de MD5 au niveau PHP pour les passwords mais pour le moins un SHA1 au niveau base de données. Les raisons à cela sont multiples. 1) MD5 n'est pas assez fort niveau hachage pour assurer la confidentialité des mots de passe. 2) un MD5 niveau PHP ne générera pas la même valeur de hachage pour une chaîne donnée qu'un MD5 MySQL.

Je reviens vers toi au plus tôt.

Cordialement,

Jc.

Dernière modification par Jc (20-06-2012 18:56:50)


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

Hors ligne

#43 20-06-2012 20:27:33

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonsoir,

Pas de soucis, après tout je vais pas me plaindre tu m'aide déjà plus que bien et comme tu le dis, tu me fais des réponses plus que complètes donc ça prends du temps.

je vais regarder du côté de SHA1, et voir par rapport aux requêtes.

Merci et à bientôt

maxredphenix

Hors ligne

#44 22-06-2012 17:00:02

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour,

J'ai tenter d'améliorer un peu mon système de connexion mais cela ne fonctionne pas totalement.

Lorsque que je suis sur la page d'identification et que je rentre login/mdp, j'arrive à me connecter et je suis redirigé vers ma page d'index, je sais que l'enregistrement de mon login dans la session est bon parce que j'ai un echo de ce dernier et mon nom apparaît. Par contre dès que je souhaite aller sur une autre page ou me déconnecter cela ne fonctionne pas, de plus je fais un get de mon SESSION['nom_prenom'] pour dire au revoir et je reste sur ma page d'index avec une valeur vide de nom_prenom donc déconnexion impossible.

Voila ma page d'authentification (je sais je suis toujours en md5 mais j'ai commencer à regarder sha1, désolé...)

<?php require_once('/php/connexionbdd.php');
if (isset($_POST['login'])){ // Execution uniquement apres envoi du formulaire (test si la variable POST existe)
  // Addslashes permet d'echapper les caractères spéciaux comme ' ou " afin d'éviter les injections sql
  $login = addslashes($_POST['login']); // Mise en variable du nom d'utilisateur
  $password = addslashes(md5($_POST['password'])); // Mise en variable du mot de passe chiffré à l'aide de md5
 
// Requete sur la table administrateurs (on récupère les infos de la personne)
mysql_select_db($database, $link);
// Requête sur la base administrateurs
$verif_query=sprintf("SELECT nom_prenom,login,password,privilege FROM utilisateurs WHERE login='$login' AND password='$password'");
$verif = mysql_query($verif_query, $link) or die(mysql_error());
$row_verif = mysql_fetch_assoc($verif);
// Retourne le nbre de ligne du résultat
// On aura 1 si il existe un utilisateur
// On aura rien si la requête ne renvoie aucun utilisateur
$utilisateur = mysql_num_rows($verif);

  // On test s'il y a un utilisateur correspondant
  if ($utilisateur) {
    // Enregistrement de la session
      session_register("authentification");
    // Déclaration des variables de session;
    $_SESSION['privilege'] = $row_verif['privilege']; // Le privilège de l'utilisateur (permet de définir des niveaux d'utilisateur)
    $_SESSION['nom_prenom'] = $row_verif['nom_prenom']; // Son nom
    $_SESSION['login'] = $row_verif['login']; // Son Login
    header("Location:index.php"); // Redirection si OK
  }
  else {
    header("Location:authentification.php?erreur=login"); // redirection si utilisateur non reconnu
  }
}

// Gestion de la déconnexion
if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){ // Test sur les paramètres d'URL qui permettront d'identifier un contexte de déconnexion
  $nom_prenom = $_SESSION['nom_prenom']; // On garde le prénom en variable pour dire au revoir
  session_unset("authentification");
  header("Location:index.php?erreur=delog&nom_prenom=$nom_prenom");
}
?>
<!DOCTYPE html>
<html>
  <head>
  <!-- Icone de la fenêtre du navigateur -->
  <link rel="icon" type="image/png" href="../../images/favicon.png" />
  <!-- Titre -->
  <title>Formulaire d'authentification</title>
  <!-- Appel des CSS -->
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link href="css/template_authentification.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
  <!-- action non défini, ce qui revient à poster à la page elle même -->
    <form action="" method="post" name="connect">
    <div id="fieldsetlogin">
      <!-- Logo -->
      <div id="logo"><a title="logo" alt="logo"></a></div>
      <!-- Login & MDP -->
      <div id="champlogin">
        <div id="colonne_gauche">
          <label for="login">Login :</label></br>
          <label class="password" for="password">Password :</label></br>
          <input class="submit" type="submit" name="submit" value="Connexion" />
        </div>
        <div id="colonne_droite">
          <input type="text" name="login" id="login" value="" /></br>
          <input type="password" name="password" id="password" value="" />
        </div>
      </div>
      <!-- Affichage messages erreurs -->
       <p align="center" class="title">
        <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "login")) { // Affiche l'erreur  ?>
        <strong class="erreur">Echec d'authentification !!! > Login ou Password incorrect</strong><?php } ?>
        <?php if(isset($_GET['
erreur']) && ($_GET['erreur'] == "delog")) { // Affiche l'erreur ?>
        <strong class="reussite">Déconnexion réussie... A bientôt <?php echo $_GET['prenom'];?> !</strong><?php } ?>
        <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) { // Affiche l'erreur ?>
        <strong class="erreur">Echec d'authentification !!! > Aucune session n'est ouverte ou vous n'avez pas les droits pour afficher cette page</strong><?php } ?>
      </p>
    </div>
    </form>
  </body>
</html>

et voila la page session_start que je mets au début de chaque page pour renvoyé automatiquement vers la page d'authentification si on ne s'est pas identifié:

<?php
// On prolonge la session
session_start();
// On teste si la variable de session existe et contient une valeur
if(empty($_SESSION['authentification'])) {
  // Si inexistante ou nulle, on redirige vers le formulaire de login
 header('Location: ../authentification.php?erreur=intru');
}
?>

La j'avoue que je comprends pas d'ou vient le souci....

j'espère que tu pourras m'aider

merci d'avance

maxredphenix

Hors ligne

#45 22-06-2012 18:19:55

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Questions et problèmes sur MYSQL

Deux choses, si tu pouvais veiller à mettre l'attribut code=php dans tes balises BBcode, ça m'éviterait de le faire systématiquement à ta place, merci.
On ne met rien entre <?php et session_start(), pas de commentaire, pas d'espace, rien


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#46 22-06-2012 18:53:55

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

Re : Questions et problèmes sur MYSQL

Bonjour,

A chaque nouvelle requête serveur correspondant à une action utilisateur, il te faut reconstruire ta session et ton contexte de connexion, idéalement via un include (require_once() est le mieux). Pour retrouver ton contexte de session PHP il te faut commencer par un session_start();

Dernière modification par Jc (22-06-2012 18:54:55)


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

Hors ligne

#47 23-06-2012 09:03:52

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour à tous les 2,

Tout d'abord je m'excuse pour le bbcode, c'est vrai que j'y pense pas tout le temps (c'est dommage que le bbcode "code"  ne mets pas directement =php vu que c'est un forum php).

Pour ma page session j'ai remis le "session_start" dans une balise php:

<?php session_start()?>
<?php
// On teste si la variable de session existe et contient une valeur
if(empty($_SESSION['login'])) {
  // Si inexistante ou nulle, on redirige vers le formulaire de login
 header('Location: ../authentification.php?erreur=intru');
}
?>

Et pour mes pages j'utilisais bien le require_once:

<?php require_once('../sessionstart.php'); ?>

Et c'est bon maintenant, c'est bien j'aurais appris quelque chose: je savais pas qu'il fallait rien mettre avec le session_start. J'ai plus qu'a mettre en sha1 maintenant, par contre j'ai lu que le md5 et le sha1 sont dépassés et qu'il fallait utiliser "crypt" : http://php.net/manual/fr/function.crypt.php    .Vous en pensez quoi?

Sinon c'est mieux de mettre empty($_SESSION['login']  ou  session_is_registered("authentification") vu qu'on à enregistrer la session authentification via session_register("authentification");   ?

Pour les regex tu as pu jeter un oeil Jc?

Encore merci à tous les 2, grace à vous j'ai enfin un système d'authentification potable (enfin je pense...:) )

Bon week end

maxredphenix

Dernière modification par maxredphenix (23-06-2012 09:12:03)

Hors ligne

#48 23-06-2012 10:29:21

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Questions et problèmes sur MYSQL

maxredphenix a écrit :

Tout d'abord je m'excuse pour le bbcode, c'est vrai que j'y pense pas tout le temps (c'est dommage que le bbcode "code"  ne mets pas directement =php vu que c'est un forum php).

Oui mais ce forum ne reçoit pas que des script en PHP, d'autres langages interviennent, HTML, Javascript, SQL, CSS.

maxredphenix a écrit :

Pour ma page session j'ai remis le "session_start" dans une balise php:

<?php session_start()?>
<?php
// On teste si la variable de session existe et contient une valeur
if(empty($_SESSION['login'])) {
  // Si inexistante ou nulle, on redirige vers le formulaire de login
 header('Location: ../authentification.php?erreur=intru');
}
?>

Inutile de refermer la balise PHP si c'est pour en ouvrir une autre à la ligne suivante.
Ce n'est qu'un détail, mais cela ralentit le parsing du code par PHP.

Intrus prend un s, même au singulier.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#49 23-06-2012 10:44:45

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Ok pour les autres langages, sinon je viens de corriger ma faute ainsi que la double balise php. Merci smile

Hors ligne

#50 24-06-2012 02:01:17

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

Re : Questions et problèmes sur MYSQL

Bonjour,

Pour ta question sur la fonction crypt en PHP, tu abordes un sujet très vaste et complexe.
La première remarque que je ferais est la suivante: C'est bien qu'un débutant se soucie de cela, mais à quoi cela sert-t-il de vouloir pousser la sécurité au maximum si le reste de l'application est une vrai passoire? Réponse : A rien !

Quand on fait de la sécurité informatique il y a une règle d'or universelle à connaître et à ne jamais oublier :

Le niveau de sécurité d'une application / d'un système / d'un réseau etc, se défini toujours par son point le plus faible.

 

En gros si tu investi dans un système de dernière génération au niveau sécurité à 10 millions d'euro, et que le mot de passe SU pour y accéder est 0000 (c'est un exemple très caricatural mais très représentatif), alors il ne sert à rien et ta question dans ce contexte prends tout son sens et de sa valeur.

Néanmoins quelques recommendations pour commencer
- Travaille toujours au niveau SGBDR pour traiter tes données et donc tes mots de passe hashés. Il en va de l'optimisation et de la qualité de tes données.
- N'utilises jamais crypt() ou password() car les mots de passe ainsi hashés sont logués et accessibles en clair via les logs serveur, bien que de procéder ainsi peut constituer une stratégie aussi, mais qui dans ce cas doit rester maîtrisée.

SHA1
Cet algorithmme est suffisant pour commencer dans la programmation s'il est utilisé conjointement avec des mots de passe aléatoires alphanumériques d'au moins 8 caractères. Il est codé sur 160 bits et donc représenté idéalement par un champ de type BINARY(20).
L'étape suivante si l'on veut garder se système est de l'utiliser conjointement avec un salt généré aussi aléatoirement. Je te laisse regarder sur le net ce qu'est un salt. Mais ce qu'il faut savoir c'est que si une telle stratégie est mise en place il faut l'utiliser conjointement avec un environnement qui mémorise et associe chaque salt généré pour chaque compte de manière à pouvoir continuer les comparaisons.

SHA2
A partir de là, on passe au stade supérieur avec l'accès à des hashages de dernière génération (SHA-224, SHA-256, SHA-384, et SHA-512). On peut être amené en utilisant ce genre de fonction à prendre en compte des problèmes de collations binaires / non binaires et de salt à la conception notamment au choix des types de données à adopter, et il peut être necessaire que l'extension SSL sur le SGBDR soit activée.

Voir  La référence du manuel MySQL.

Ce qu'il faut retenir je pense, c'est qu'avant la version 5.5.6, la fonction de hashage SHA-512 retournait une chaine binaire (BINARY(64)) et que depuis la 5.5.6 elle retourne une chaîne non binaire dans la collation de connexion du schéma. Il faut retenir également que SHA2() a été rajouté à la 5.5.5 que le module SSL soit actif ou non.

Si tu as des questions n'hésite pas.

Dernière modification par Jc (24-06-2012 02:17:43)


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

Hors ligne

Pied de page des forums