Vous n'êtes pas identifié(e).
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
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
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:
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
La fonction fonctionnera mieux comme ainsi
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
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.
Dernière modification par maxredphenix (15-06-2012 06:12:23)
Hors ligne
Bonjour
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
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
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
<!-- 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
Oui j'ai bien une requete faite plus haut dans la page:
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:
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
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
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.
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<?phptry {
//....
$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
Merci ça fonctionne niquel, j'ai donc mis ceci:
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:
et voila ma page de traitement:
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
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
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
// 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:
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
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
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:
ou
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
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
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
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é...)
// 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é:
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
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
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
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:
Et pour mes pages j'utilisais bien le require_once:
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
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.
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
Ok pour les autres langages, sinon je viens de corriger ma faute ainsi que la double balise php. Merci
Hors ligne
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