Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2024-03-27T09:27:34+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Micro-Framework Slim / ORM Doctrine, message #2544222024-03-27T09:27:34+01:00lerest.ge/@lerest.gehttps://zestedesavoir.com/forums/sujet/17382/micro-framework-slim-orm-doctrine/?page=1#p254422<p>Bonjour,
Je travaille sous VSCode. Symfony/cache est installé. Leur documentation n’est pas à jour, et certains paquets sont obsolètes. Je suis en contact avec le forum de Slim. Ils me conseillent d’utiliser un conteneur de PHP-DI au lieu d’"uma/dic". l' uma.dic ne supporte pas l’autowiring (?).
Leur site est plutôt réactif et me propose d’installer IndentityManager avec PHP/DI.
Je préfère ne pas courir dix lièvres à la fois.
Merci pour ton aide. Je n’hésiterais pas à passe si besoin. Dans tous les cas, je te fais un retour.</p>Micro-Framework Slim / ORM Doctrine, message #2544132024-03-26T14:52:39+01:00Nek/@Nekhttps://zestedesavoir.com/forums/sujet/17382/micro-framework-slim-orm-doctrine/?page=1#p254413<p>Hello <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"> . Tu peux donner l’erreur précise que te sors PHPStorm ? Si tu n’as pas de dossier <code>symfony/cache</code> dans ton dossier vendor c’est en effet un soucis.</p>
<p>Essaie la commande <code>composer install</code> plutôt que <code>composer require</code> <img src="/static/smileys/svg/clin.svg" alt=";)" class="smiley"> .</p>Micro-Framework Slim / ORM Doctrine, message #2544072024-03-25T23:41:38+01:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/17382/micro-framework-slim-orm-doctrine/?page=1#p254407<p>Salut</p>
<p>Il m’est arrivé, avec des projets Composer, que l’outil d’analyse de code n’ait pas pris les dépendances en compte, parce qu’il indexe le code à l’ouverture du projet sinon de l’éditeur. Avec VS Code, il me semble que recharger la fenêtre pourrait fonctionner, en tout cas ça fonctionnait jusqu’à il n’y a pas longtemps. Qu’en est-il chez toi ?</p>
<p>Je ne connais pas assez PhpStorm pour savoir ce qu’il en est, mais je ne serais pas nécessairement étonné que ce soit la même chose.</p>Micro-Framework Slim / ORM Doctrine, message #2544062024-03-25T20:07:55+01:00lerest.ge/@lerest.gehttps://zestedesavoir.com/forums/sujet/17382/micro-framework-slim-orm-doctrine/?page=1#p254406<p>Je viens de constater aujourd’hui que les documentations v3 et v4 sur l’utilisation de doctrine sont similaires, sauf erreur de ma part.</p>
<ul>
<li><a href="https://www.slimframework.com/docs/v4/cookbook/database-doctrine.html">v4</a></li>
<li><a href="https://www.slimframework.com/docs/v3/cookbook/database-doctrine.html">v3</a>
La question que je me pose:
Est-ce que la documentation de doctrine(V3) permet de faire fonctionner SLIM4 avec Doctrine?
Si ce n’est pas le cas, cela expliquerait les absences des classes
Qu’en pensez-vous?</li>
</ul>
<p>PS; j’ai posé la question sur le forum de Slim. On m’a juste demandé mon composer.json. C’est tout. Je vais en demander plus. </p>Micro-Framework Slim / ORM Doctrine, message #2544022024-03-25T13:30:43+01:00lerest.ge/@lerest.gehttps://zestedesavoir.com/forums/sujet/17382/micro-framework-slim-orm-doctrine/?page=1#p254402<p>C’est mon premier message sur ce forum. Bonjour à tous!</p>
<p>J’ai installé Slim et testé un CRUD sans soucis. Je suis novice dans les framework.</p>
<p>Je veux installer l’ORM Doctrine d"après le tuturiel suivant:</p>
<p><a>https://www.slimframework.com/docs/v4/cookbook/database-doctrine.html</a></p>
<p>Dans le fichier bootstrap.php (partie Define the EntityManager service) , j’ai des soulignements "Undefined type". </p>
<p>Voici le soulignements: <a href="https://drive.google.com/file/d/1rf99z3tbh12MGB4ebQ55SgulI0C8LS6V/view?usp=sharing">boostrap</a></p>
<p>et le fichier accessible.</p>
<div class="hljs-code-div hljs-code-php"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span><span data-count="29"></span><span data-count="30"></span><span data-count="31"></span><span data-count="32"></span><span data-count="33"></span><span data-count="34"></span><span data-count="35"></span><span data-count="36"></span><span data-count="37"></span><span data-count="38"></span><span data-count="39"></span></div><pre><code class="hljs language-php"><span class="hljs-meta"><?php</span>
<span class="hljs-keyword">namespace</span> <span class="hljs-title">App</span>\<span class="hljs-title">config</span>;
<span class="hljs-comment">// bootstrap.php</span>
<span class="hljs-keyword">use</span> <span class="hljs-title">Doctrine</span>\<span class="hljs-title">Common</span>\<span class="hljs-title">Cache</span>\<span class="hljs-title">Psr6</span>\<span class="hljs-title">DoctrineProvider</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Doctrine</span>\<span class="hljs-title">ORM</span>\<span class="hljs-title">EntityManager</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Doctrine</span>\<span class="hljs-title">ORM</span>\<span class="hljs-title">Tools</span>\<span class="hljs-title">Setup</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Cache</span>\<span class="hljs-title">Adapter</span>\<span class="hljs-title">ArrayAdapter</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Cache</span>\<span class="hljs-title">Adapter</span>\<span class="hljs-title">FilesystemAdapter</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">UMA</span>\<span class="hljs-title">DIC</span>\<span class="hljs-title">Container</span>;
<span class="hljs-variable">$container</span> = <span class="hljs-keyword">new</span> Container(<span class="hljs-keyword">require</span> <span class="hljs-keyword">__DIR__</span> . <span class="hljs-string">'/settings.php'</span>);
<span class="hljs-variable">$container</span>->set(EntityManager::class, <span class="hljs-built_in">static</span> <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">Container <span class="hljs-variable">$c</span></span>): <span class="hljs-title">EntityManager</span> </span>{
<span class="hljs-comment">/** <span class="hljs-doctag">@var</span> array $settings */</span>
<span class="hljs-variable">$settings</span> = <span class="hljs-variable">$c</span>->get(<span class="hljs-string">'settings'</span>);
<span class="hljs-comment">// Use the ArrayAdapter or the FilesystemAdapter depending on the value of the 'dev_mode' setting</span>
<span class="hljs-comment">// You can substitute the FilesystemAdapter for any other cache you prefer from the symfony/cache library</span>
<span class="hljs-variable">$cache</span> = <span class="hljs-variable">$settings</span>[<span class="hljs-string">'doctrine'</span>][<span class="hljs-string">'dev_mode'</span>] ?
DoctrineProvider::wrap(<span class="hljs-keyword">new</span> ArrayAdapter()) :
DoctrineProvider::wrap(<span class="hljs-keyword">new</span> FilesystemAdapter(<span class="hljs-built_in">directory</span>: <span class="hljs-variable">$settings</span>[<span class="hljs-string">'doctrine'</span>][<span class="hljs-string">'cache_dir'</span>]));
<span class="hljs-variable">$config</span> = Setup::createAttributeMetadataConfiguration(
<span class="hljs-variable">$settings</span>[<span class="hljs-string">'doctrine'</span>][<span class="hljs-string">'metadata_dirs'</span>],
<span class="hljs-variable">$settings</span>[<span class="hljs-string">'doctrine'</span>][<span class="hljs-string">'dev_mode'</span>],
<span class="hljs-literal">null</span>,
<span class="hljs-variable">$cache</span>
);
<span class="hljs-keyword">return</span> EntityManager::create(<span class="hljs-variable">$settings</span>[<span class="hljs-string">'doctrine'</span>][<span class="hljs-string">'connection'</span>], <span class="hljs-variable">$config</span>);
});
<span class="hljs-keyword">return</span> <span class="hljs-variable">$container</span>;
(<span class="hljs-variable">$routes</span> = <span class="hljs-keyword">require</span> <span class="hljs-keyword">__DIR__</span> . <span class="hljs-string">'/routes.php'</span>)(<span class="hljs-variable">$app</span>);
</code></pre></div>
<ul>
<li>Les importations de classes
semblent bonnes (non souligné). Mais par exemple, je ne retrouve pas dans vendor le dossier Symfony/Component. Il y a d’autres dossiers et classes absentes.</li>
</ul>
<p>et le composer.json:</p>
<div class="hljs-code-div hljs-code-text"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span></div><pre><code class="hljs language-text">{
"autoload": {
"psr-4": {
"App": "src/"
}
},
"require": {
"slim/slim": "4.*",
"slim/psr7": "^1.6",
"doctrine/orm": "^3.1",
"symfony/cache": "^6.4",
"php-di/php-di": "^7.0"
}
}
</code></pre></div>
<p>J’ai essayé de supprimer le dossier vendor et composer.lock</p>
<div class="hljs-code-div hljs-code-ps"><pre><code class="hljs language-ps"><span class="hljs-built_in">rm</span> <span class="hljs-literal">-rf</span> vendor/ composer.lock
</code></pre></div>
<p>puis:</p>
<div class="hljs-code-div hljs-code-ps"><pre><code class="hljs language-ps">composer require
</code></pre></div>
<p>mais sans succès.
Cela ne fonctioone pas non plus sur PhpStorm.</p>
<p>Merci pour votre aide.</p>Base de données système d'étapes, message #2473552022-12-04T20:34:10+01:00Herbe/@Herbehttps://zestedesavoir.com/forums/sujet/16610/base-de-donnees-systeme-detapes/?page=1#p247355<p>Hello,</p>
<p>Une des solutions serait de créer une table supplémentaire pour stocker les informations liées aux mises à jour de l’inscription. Cette table pourrait avoir une structure similaire à ceci :</p>
<ul>
<li>inscription_id</li>
<li>etape</li>
<li>date</li>
<li>information_suppl</li>
</ul>
<p>NB : <code>etape</code> pourrait être une foreign key avec une table d’étapes dans l’idéal.</p>
<p>Cette table stocke les mises à jour associées à chaque inscription, ce qui permet d’éviter d’avoir à créer des colonnes supplémentaires dans la table d’inscription. Vous pouvez également y stockez des informations supplémentaires pour chaque étape si nécessaire.</p>
<p>Ne pas oublier d’ajouter des index.</p>Base de données système d'étapes, message #2468292022-11-18T17:48:24+01:00Gil Cot/@Gil%20Cothttps://zestedesavoir.com/forums/sujet/16610/base-de-donnees-systeme-detapes/?page=1#p246829<blockquote>
<p>Comment pourrais-je arriver à quelque chose de mieux organisé ?</p>
</blockquote>
<p>Faire un MCD…<br>
Je vois, à priori, une table de liaison avec les champs : type/quoi (inscription, document, facture, etc.), date/quand, personne/qui, remarque (éventuellement, vide par défaut.) Les triplets quoi-quand-qui devant être uniques. </p>Base de données système d'étapes, message #2468222022-11-18T17:02:47+01:00Ariol/@Ariolhttps://zestedesavoir.com/forums/sujet/16610/base-de-donnees-systeme-detapes/?page=1#p246822<p>Bonjour à tous,</p>
<p>Je développe une application avec Laravel pour la première fois et je tombe sur quelque chose qui me fait douter dans l’organisation de ma base de données.</p>
<p>J’ai un système d’inscription avec plusieurs données et ensuite ces inscriptions sont traitées par un administrateur. Cet administrateur doit ensuite pouvoir mettre à jour l’inscription avec plusieurs étapes (inscription validée avec la date, documents envoyées avec la date, facture reçue avec la date etc…).</p>
<p>La manière la plus simple est de mettre des champs dans ma table inscription comme "inscription_validee", "inscription_validee_date", "documents_envoyes", "documents_envoyes_date" etc… mais je trouve que ça fait lourd et pas spécialement élégant.</p>
<p>Comment pourrais-je arriver à quelque chose de mieux organisé ?</p>
<p>Sachant que pour certains champs j’aurais d’autres informations qu’une simple date.</p>
<p>Merci d’avance</p>Ou apprendre le PHP ?, message #2459832022-10-18T12:02:13+02:00alishaas1611/@alishaas1611https://zestedesavoir.com/forums/sujet/16532/ou-apprendre-le-php/?page=1#p245983<p>I would recommend the course "PHP for Beginners - Become a PHP Master - CMS Project" on the Internet. It covers everything you need to know to get started with PHP and builds up to create a content management system project</p>Ou apprendre le PHP ?, message #2459442022-10-16T16:43:32+02:00NightProg/@NightProghttps://zestedesavoir.com/forums/sujet/16532/ou-apprendre-le-php/?page=1#p245944<p>alors un contenue que j’adore est celui ci : <a href="https://laracasts.com/">https://laracasts.com/</a> (ca ne parle pas que de laravel mais aussi de php en general et plein d’autre cours sur le web)</p>
<p>je vous le conseille vraiment </p>Ou apprendre le PHP ?, message #2459402022-10-16T12:21:29+02:00entwanne/@entwannehttps://zestedesavoir.com/forums/sujet/16532/ou-apprendre-le-php/?page=1#p245940<p>Salut,</p>
<p>Tu as éventuellement <a href="https://zestedesavoir.com/contenus/beta/632/apprenez-a-programmer-en-php/">ce contenu</a> en bêta sur le site qui te permettra d’apprendre les bases du langage, c’est peut-être suffisant pour passer vers Symfony ensuite.</p>Ou apprendre le PHP ?, message #2459372022-10-16T10:59:55+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/16532/ou-apprendre-le-php/?page=1#p245937<p>Bonjour, </p>
<p>Je souhaite apprendre le PHP pour construire un site Web, mais je suis un peu perdu dans tous les cours qui existent et les versions de PHP qu’ils prennent en compte.</p>
<p>Auriez-vous un cours à conseiller sur internet (ou un livre) et qui soit complet ? J’ai vu que sur ZdS il y a un cours de Symphony, mais j’imagine qu’il faut déjà maîtriser PHP avant d’apprendre ce framework.</p>
<p>Merci d’avance pour vos propositions <img src="/static/smileys/svg/clin.svg" alt=";)" class="smiley"> </p>Stocker puis Afficher la structure et le contenu d'un répertoire, message #2453622022-09-13T18:10:08+02:00viki53/@viki53https://zestedesavoir.com/forums/sujet/16469/stocker-puis-afficher-la-structure-et-le-contenu-dun-repertoire/?page=1#p245362<p>Salut… pourquoi ne pas utiliser une solution toute prête et plus adaptée au besoin ?</p>
<p>Quelque chose comme NextCloud fournit un véritable gestionnaire de fichiers, avec pas mal d’options par exemple.</p>
<p>Et rien ne t’empêche d’avoir un serveur web configuré pour pointer vers un dossier spécifique (par exemple celui de cet utilisateur, voire un sous-dossier <code>public</code>).</p>
<p>Rien ne sert de réinventer la roue, surtout sur de tels sujets avec des implications de sécurité (uploader des fichiers accessibles publiquement, c’est un appel à se faire <em>hacker</em> son serveur)</p>Stocker puis Afficher la structure et le contenu d'un répertoire, message #2453612022-09-13T17:21:48+02:00JeanTilapin/@JeanTilapinhttps://zestedesavoir.com/forums/sujet/16469/stocker-puis-afficher-la-structure-et-le-contenu-dun-repertoire/?page=1#p245361<p>Bonjour,</p>
<p>Je me résous à demander de l’aide, parce que je perds un temps fou sur un truc qui me semble pourtant extrêmement simple. Comme quoi…</p>
<p>Pour un client - et en guise de test - je dois faire un "cloud" privé : sur le serveur d’un de ses sites, l’idée est de lui faire un accès HTML sécurisé (sous Symfony) dans lequel il pourrait uploader des fichiers, créer des répertoires, déplacer / renommer / supprimer, etc. Ce n’est pas pour l’upload que j’ai besoin d’aide, mais vraiment pour afficher ce qu’il a uploadé et l’ensemble de la structure de répertoires qu’il aura créé (y compris des répertoires vides !). C’est un explorateur Windows, en gros, que je dois faire.</p>
<p>J’étais parti pour utiliser l’outil Finder de Symfony pour explorer le contenu d’un répertoire nommé "cloud" sur le serveur. C’est un outil PHP très efficace MAIS il n’utilise pas du tout les BDD et le modèle recommandé Symfony d’Objets. Après en avoir discuté sur SymfonyCasts.com, on me conseille vivement de créer au moins une entité par fichier ("Upload") histoire de s’assurer de la cohérence permanente des données. Afin de garder également trace des répertoires vides potentiellement créés, je crée aussi une entité CloudDirectory qui contient pour l’instant juste un nom et un attribut fullPath(). </p>
<p>Et ensuite…Je sèche.</p>
<p>Je peux évidemment utiliser des requêtes pour avoir la liste des répertoires et la liste des uploads, mais je ne sais pas comment créer efficacement le rendu visuel.</p>
<p>Comment dois-je faire ? Je tente différentes méthodes mais rien ne me semble vraiment efficace (à part l’outil Finder, mais bon, on me dit que c’est pas très recommandé…). Je suis en train de décomposer les fullPath des uploads, mais dans ce cas, les répertoires vides ne sont pas créés. Comment est-ce que vous feriez pour garder la structure d’un répertoire, son contenu, ses éventuels sous-répertoires, et tous les changements qui pourraient s’y produire ?</p>
<p>Note : je ne suis pas certain que la version mySql du serveur gère le format JSON (oui parce que j’envisageais de garder tout sous la forme d’un objet).</p>
<p>Merci pour vos conseils !</p>Sécurité et optimisation côté serveur , message #2401212022-01-12T08:36:45+01:00viki53/@viki53https://zestedesavoir.com/forums/sujet/15986/securite-et-optimisation-cote-serveur/?page=1#p240121<p>Au delà de limiter l’intervalle, attention avec <code>setInterval</code> qui n’attend pas qu’une requête soit revenue pour en lancer une nouvelle.</p>
<p>En cas de latence ça pourrait surcharger le réseau plus que nécessaire en lançant des requêtes simultanées ou consécutives.</p>
<p>Il vaudrait mieux utiliser <code>setTimeout</code> avec un <em>callback</em> récursif.</p>Sécurité et optimisation côté serveur , message #2401202022-01-12T08:34:07+01:00luxera/@luxerahttps://zestedesavoir.com/forums/sujet/15986/securite-et-optimisation-cote-serveur/?page=1#p240120<p>Pour que ce soit le serveur qui informe les clients de nouveaux posts, tu pourrais te tourner vers les websockets. Il est tout à fait possible d’implémenter ça en PHP côté serveur, même si c’est un peu plus compliqué qu’en utilisant AJAX.</p>
<p>Ceci dit, si tu veux supporter les vieux navigateurs (qui supporteraient AJAX mais pas les websockets), tu devrais garder les 2 implémentations. Et là, pour réduire la charge sur le serveur, il n’y a pas de magie : tu devrais peut-être limiter ton intervalle de récupération à 1 ou 2s, d’autant que je ne crois pas que 10x/s soit particulièrement utile.</p>Sécurité et optimisation côté serveur , message #2401072022-01-11T15:39:29+01:00Moté/@Mot%C3%A9https://zestedesavoir.com/forums/sujet/15986/securite-et-optimisation-cote-serveur/?page=1#p240107<p>Tu pourrais séparer ces deux fonctionnalités dans deux fichiers séparément, ou du moins deux addresses séparées (je ne sais pas si tu utilises un système d’adressage ou non). Par exemple, si l’envoi d’un post se fait uniquement via API, tu pourrais le mettre sur une addresse <code>/api/post</code>.</p>
<p>En ce qui concerne la sécurité, le plus évident ici serait l’injection de code. Tu dois avoir un moyen d’échapper le texte qui t’est envoyé afin qu’il ne soit interprété ni par ton serveur, ni par les clients qui iront le lire plus tard.</p>
<p>(note que je ne sais pas faire ça, personnellement, je me contente d’utiliser un framework qui sait très bien le faire)</p>Sécurité et optimisation côté serveur , message #2401062022-01-11T14:01:55+01:00Questions/@Questionshttps://zestedesavoir.com/forums/sujet/15986/securite-et-optimisation-cote-serveur/?page=1#p240106<p>Bonjour, </p>
<p>Je suis en train de créer un réseau social un peu à la Facebook pour m’entraîner. Le concept est simple, j’ai un espace membre avec des utilisateurs qui peuvent se suivre. Ensuite il y a un thread principale ou l’on peut visualiser tous les posts des membres que l’on suit (comme Facebook en gros sauf qu’à la place d’amis ce sont des follows comme sur twitter). </p>
<p>J’ai utilisé Ajax afin que le thread principale affiche les nouveaux posts sans avoir besoin de recharger la page. Mon implémentation fonctionne parfaitement néanmoins je suis sceptique. Voilà comme je procède : </p>
<ul>
<li>
<p>j’ai une page <em>post.php</em> dans laquelle il y a deux fonctions : <code>getPost()</code> et <code>postPost()</code>. La première permet de récupérer tous les posts des utilisateurs qu’on follow, et la deuxième permet de poster un post. L’appel de ces deux fonctions se fait à l’aide d’un <code>GET</code>. Si on appelle <code>post.php?getpost=true</code>alors on appelle la fonction <code>getPost()</code>sinon on appelle l’autre fonction. </p>
</li>
<li>
<p>Maintenant j’ai une page <code>post.js</code> qui appelle les deux fonctions <code>getPost()</code>et <code>postPost()</code> de la page <code>post.php</code>. J’utilise l’objet <code>XMLHttpRequest</code>et j’appelle <code>XHR.open("GET", "post.php?getpost=true")</code> si je veux appeler <code>getPost()</code> et <code>XHR.open("POST", "post.php")</code> si je veux appeler `postPost()``</p>
</li>
</ul>
<p>Tout fonctionne très bien néanmoins je me demande si il n’y a pas des problèmes de sécurité avec cette implémentation ? Je ne serai pas dire quoi, mais j’ai l’impression qu’utiliser un paramètre GET peut permettre à l’utilisateur malicieux de faire n’importe quoi, d’accéder à la page <code>post.php</code> qui peut-être constitue un problème. </p>
<p>Le deuxième problème que j’ai c’est que dans mon fichier <code>.js</code> je fais à la fin <code>const interval = window.setInterval(getSearchResult, 100);</code> mais du coup si il y a plein d’utilisateurs le serveur va être complètement dépassé non ? Y a t-il une autre solution qu’utiliser cette fonction ? Par exemple c’est au serveur de dire au client quand il y a un nouveau post, au lieu que ça soit toujours à moi de demander si de nouveaux posts sont apparues. </p>
<p>J’espère que mes problèmes sont clairs <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"> </p>
<p>Merci beaucoup. </p>probleme PHP token, message #2373242021-09-07T13:21:08+02:00VeGeTa/@VeGeTahttps://zestedesavoir.com/forums/sujet/15671/probleme-php-token/?page=1#p237324<p>J’ai trouvé !<br>
Dans ma BDD le format reset_at etait en date et non pas en datetime <img src="/static/smileys/svg/blink.svg" alt="o_O" class="smiley"><br>
Problème résolu !!</p>probleme PHP token, message #2373222021-09-07T11:51:40+02:00VeGeTa/@VeGeTahttps://zestedesavoir.com/forums/sujet/15671/probleme-php-token/?page=1#p237322<p>J’ai fait comme tu m’as dit<br>
Quand je vais sur la page <kbd>reset.php</kbd> </p>
<div class="hljs-code-div hljs-code-PHP"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span></div><pre><code class="hljs language-PHP"><span class="hljs-meta"><?php</span>
<span class="hljs-keyword">echo</span> <span class="hljs-string">'<pre>'</span>;
print_r(<span class="hljs-variable">$_GET</span>[<span class="hljs-string">'id'</span>]);
<span class="hljs-keyword">echo</span> <span class="hljs-string">'<pre>'</span>;
print_r(<span class="hljs-variable">$_GET</span>[<span class="hljs-string">'token'</span>]);
<span class="hljs-keyword">exit</span>;
</code></pre></div>
<p>cela me retourne si je le met avant la condition : </p>
<ul>
<li>45</li>
<li>7A644wcl2pHdCwrw8rKld9LwCxtszgB0fBlTpauIcHPc8ANumtt4o0tPwy0v
Ce qui correspond a ce que j’ai dans ma BDD </li>
</ul>
<p>Après avoir fait des "echo" dans toutes les conditions, il rentre dans la 1ere condition mais il va dans le "else" </p>
<div class="hljs-code-div hljs-code-PHP"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span><span data-count="29"></span><span data-count="30"></span><span data-count="31"></span><span data-count="32"></span><span data-count="33"></span><span data-count="34"></span><span data-count="35"></span><span data-count="36"></span><span data-count="37"></span><span data-count="38"></span><span data-count="39"></span><span data-count="40"></span><span data-count="41"></span><span data-count="42"></span><span data-count="43"></span><span data-count="44"></span><span data-count="45"></span><span data-count="46"></span><span data-count="47"></span><span data-count="48"></span><span data-count="49"></span><span data-count="50"></span><span data-count="51"></span><span data-count="52"></span><span data-count="53"></span><span data-count="54"></span><span data-count="55"></span><span data-count="56"></span><span data-count="57"></span><span data-count="58"></span><span data-count="59"></span><span data-count="60"></span></div><pre><code class="hljs language-PHP"><span class="hljs-meta"><?php</span>
<span class="hljs-keyword">if</span>(<span class="hljs-keyword">isset</span>(<span class="hljs-variable">$_GET</span>[<span class="hljs-string">'id'</span>]) && <span class="hljs-keyword">isset</span>(<span class="hljs-variable">$_GET</span>[<span class="hljs-string">'token'</span>])){
<span class="hljs-keyword">require</span> <span class="hljs-string">'inc/db.php'</span>;
<span class="hljs-keyword">require</span> <span class="hljs-string">'inc/functions.php'</span>;
<span class="hljs-comment">//echo '<pre>';</span>
<span class="hljs-comment">//print_r($_GET['id']);</span>
<span class="hljs-comment">//print_r($_GET['token']);</span>
<span class="hljs-variable">$req</span> = <span class="hljs-variable">$pdo</span>->prepare(<span class="hljs-string">'SELECT * FROM cafeland_users WHERE id = ? AND reset_token IS NOT NULL AND reset_token = ? AND reset_at > DATE_SUB(NOW(), INTERVAL 30 MINUTE)'</span>);
<span class="hljs-variable">$req</span>->execute([<span class="hljs-variable">$_GET</span>[<span class="hljs-string">'id'</span>], <span class="hljs-variable">$_GET</span>[<span class="hljs-string">'token'</span>]]);
<span class="hljs-variable">$user</span> = <span class="hljs-variable">$req</span>->fetch();
<span class="hljs-comment">//echo '<pre>';</span>
<span class="hljs-comment">//print_r($req);</span>
<span class="hljs-comment">//print_r($user);</span>
<span class="hljs-keyword">if</span>(<span class="hljs-variable">$user</span>){
<span class="hljs-keyword">if</span>(!<span class="hljs-keyword">empty</span>(<span class="hljs-variable">$_POST</span>)){
<span class="hljs-keyword">if</span>(!<span class="hljs-keyword">empty</span>(<span class="hljs-variable">$_POST</span>[<span class="hljs-string">'password'</span>]) && <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'password'</span>] == <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'password_confirm'</span>]){
<span class="hljs-variable">$password</span> = password_hash(<span class="hljs-variable">$_POST</span>[<span class="hljs-string">'password'</span>], PASSWORD_BCRYPT);
<span class="hljs-variable">$pdo</span>->prepare(<span class="hljs-string">'UPDATE cafeland_users SET password = ?; reset_at = NULL, reset_token = NULL'</span>)->execute([<span class="hljs-variable">$password</span>]);
session_start();
<span class="hljs-variable">$_SESSION</span>[<span class="hljs-string">'flash'</span>][<span class="hljs-string">'success'</span>] = <span class="hljs-string">'Votre mot de passe a bien été modifié.'</span>;
<span class="hljs-variable">$_SESSION</span>[<span class="hljs-string">'auth'</span>] = <span class="hljs-variable">$user</span>;
header(<span class="hljs-string">'Location : account.php'</span>);
<span class="hljs-keyword">exit</span>();
}
}
} <span class="hljs-keyword">else</span> {
**********************************************************je suis ici
session_start();
<span class="hljs-variable">$_SESSION</span>[<span class="hljs-string">'flash'</span>][<span class="hljs-string">'error'</span>] = <span class="hljs-string">"Ce token n'est pas valide"</span>;
header(<span class="hljs-string">"Location:login.php"</span>);
<span class="hljs-keyword">exit</span>();
}
} <span class="hljs-keyword">else</span> {
header (<span class="hljs-string">'Location : login.php'</span>);
<span class="hljs-keyword">exit</span>();
}
<span class="hljs-meta">?></span>
<span class="hljs-meta"><?php</span> <span class="hljs-keyword">require</span> <span class="hljs-string">'inc/header.php'</span>; <span class="hljs-meta">?></span>
<h1>Réinitialisation du Mot de Passe</h1>
<form method=<span class="hljs-string">"POST"</span> action=<span class="hljs-string">""</span>>
<div <span class="hljs-class"><span class="hljs-keyword">class</span>="<span class="hljs-title">form</span>-<span class="hljs-title">group</span>">
<<span class="hljs-title">label</span> <span class="hljs-title">for</span>=""><span class="hljs-title">Nouveau</span> <span class="hljs-title">mot</span> <span class="hljs-title">de</span> <span class="hljs-title">Passe</span></<span class="hljs-title">label</span>>
<<span class="hljs-title">input</span> <span class="hljs-title">type</span>="<span class="hljs-title">password</span>" <span class="hljs-title">name</span>="<span class="hljs-title">password</span>" <span class="hljs-title">class</span>="<span class="hljs-title">form</span>-<span class="hljs-title">control</span>" <span class="hljs-title">required</span>>
</<span class="hljs-title">div</span>>
<<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">form</span>-<span class="hljs-title">group</span>">
<<span class="hljs-title">label</span> <span class="hljs-title">for</span>=""><span class="hljs-title">Confirmation</span> <span class="hljs-title">du</span> <span class="hljs-title">mot</span> <span class="hljs-title">de</span> <span class="hljs-title">Passe</span></<span class="hljs-title">label</span>>
<<span class="hljs-title">input</span> <span class="hljs-title">type</span>="<span class="hljs-title">password</span>" <span class="hljs-title">name</span>="<span class="hljs-title">password_confirm</span>" <span class="hljs-title">class</span>="<span class="hljs-title">form</span>-<span class="hljs-title">control</span>" <span class="hljs-title">required</span>>
</<span class="hljs-title">div</span>>
<<span class="hljs-title">button</span> <span class="hljs-title">type</span>="<span class="hljs-title">submit</span>" <span class="hljs-title">class</span>="<span class="hljs-title">btn</span> <span class="hljs-title">btn</span>-<span class="hljs-title">primary</span>"><span class="hljs-title">R</span>é<span class="hljs-title">initialiser</span> <span class="hljs-title">votre</span> <span class="hljs-title">Mot</span> <span class="hljs-title">de</span> <span class="hljs-title">Passe</span></<span class="hljs-title">button</span>>
</<span class="hljs-title">form</span>>
<?<span class="hljs-title">php</span> <span class="hljs-title">require</span> '<span class="hljs-title">inc</span>/<span class="hljs-title">footer</span>.<span class="hljs-title">php</span>';?>
</span></code></pre></div>
<p>Mais pourquoi??</p>probleme PHP token, message #2373212021-09-07T11:24:05+02:00VeGeTa/@VeGeTahttps://zestedesavoir.com/forums/sujet/15671/probleme-php-token/?page=1#p237321<p>Salut Viki53 et merci pour ta réponse.
J’ai remarqué que j’avais une mauvaise "}" <img src="/static/smileys/svg/langue.svg" alt=":p" class="smiley"> </p>
<p>Maintenant la page se charge mais va sur login.php direct. Donc elle ne rentre plus dans les conditions. Je galère avec l’objet <kbd>$user->id</kbd>. J’ai l’impression que dans le mail que j’envoi, même s’il apparait, sur la page reset.php il doit y avoir un problème. Je tourne en rond </p>