IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

génération d'une page PHP via un formulaire


Sujet :

Langage PHP

  1. #21
    Invité
    Invité(e)
    Par défaut
    Bnojour,
    il faut que chaque ligne soit identifiée (et identifiable) de façon UNIQUE.

    remplace ton champ "numero" par un champ ""id" ou "id_article" AUTO-INCREMENTE, donc unique.

  2. #22
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Manifestement tu confonds les champs id et numero. Je pense qu'il y en a un qui fait double emploi.

    Je pense aussi qu'on va avoir besoin de voir tous les messages d'erreur potentiels si on veut être efficaces. Ajoute cette ligne au début de ton script PHP :
    (voir http://php.net/manual/fr/function.error-reporting.php)

    Et celle-ci juste après avoir initialisé $bdd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    (voir http://php.net/manual/fr/pdo.setattribute.php)

    Je voudrais voir :
    1. Les changements que tu as faits quand tu as essayé de remplacer id par numero
    2. Le type de la colonne ID (y compris les attributs, le type de clé, etc. en bref tout ce que tu vois avec la commande DESCRIBE)
    3. Une description (ou une capture) de ce que tu vois quand tu navigues à l'adresse article.php?id=99
    4. idem avec article.php?id=79
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #23
    Nouveau Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Je n'obtient aucune erreur en insérant le code error_reporting, donc je pense que pour ça c'est bon.
    Après avoir inséré tes deux bouts de codes, j'ai crée une page 987 et une page 988 (dans les numéros), ce qui correspond aux ID 81 et 82 dans ma table, l'article le plus récent étant l'article 988/82
    Pour ma colonne ID ça donne :
    -Type : int(11)
    -Null : NO
    -Key : PRI
    -Default : NULL
    -Extra : auto_increment

    C'est ma seule colonne avec une clé primary et ayant l'auto_increment activé.

    -----------

    Maintenant, quand je change id par numero, en sélectionnant le champ numero dans ma requête sql, j'obtient un message "Pas d’id, pas d’article !".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php	
    error_reporting(-1);
    if (isset($_GET['numero'])) { // je vérifie que l'id a été fourni
      $numero = (int) $_GET['numero']; // je transtype en nombre entier pour éviter les attaques les plus simples
    } else {
      // message d'erreur, à adapter...
      echo '<p>Pas d’id, pas d’article !</p>';
      exit;
    }
     
    $statement = $bdd->prepare('SELECT article, numero FROM article WHERE numero = :numero LIMIT 0,1');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $statement->execute(array(':numero'=> $numero));
    $donnees = $statement->fetch(PDO::FETCH_ASSOC);
     
    echo stripslashes($donnees['article']);
    ?>
    J'obtient le même résultat si je ne sélectionne pas numero dans ma requête SQL.

  4. #24
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tant que tu mélangeras "id" et "numero", tu n'arriveras à rien de cohérent.

    Seul "id" est auto-incrémenté, donc UNIQUE.
    LUI SEUL peut identifier chaque ligne à coup sûr.

    Donc, arrête de modifier tes bouts de code sans comprendre ce que tu fais.
    Prends du recul pour avoir une vue d'ensemble, et sois cohérent d'un bout à l'autre.

    N.B. Et je répète que " LIMIT 0,1" ne sert à rien ici.

  5. #25
    Nouveau Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Février 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Bon, j'ai supprimé la table numero, ça sera beaucoup plus simple.
    Ceci ne change pas mon problème, mais quand j'envoie le formulaire, j'ai cette ligne de code pour la redirection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('location: article.php?id='.$_POST['id'].''); exit;
    Sauf que ça me donne cette url : article.php?id=
    Sans numéro a la fin. Il faudrait que je récupère l'id qui a été généré automatiquement, mais comment m'y prendre ?
    Le code de ajouterarticle_post.php, que j'utilise pour transmettre les informations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO(xxxxxxxxxx);
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    // Insertion de l'article
    $req = $bdd->prepare('INSERT INTO article (article, imageun, imagedeux, titre, date, auteur, categorie, scores) VALUES(?, ?, ?, ?, ?, ?, ?, ?)');
    $req->execute(array($_POST['article'], $_POST['imageun'], $_POST['imagedeux'], $_POST['titre'], $_POST['date'], $_POST['auteur'], $_POST['categorie'], $_POST['scores']));
     
    // Redirection
    header('location: article.php?id='.$_GET['id'].''); exit;
    ?>

  6. #26
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Bonsoir,

    Nulle part je n'ai vu le code de ton formulaire donc je vais faire des suppositions. D'abord je te rappelle que $_POST et $_GET ne contiennent des données que quand le formulaire a été soumis avec la méthode idoine. Il peut y avoir des données dans les deux quand tu ajoutes des paramètres à l'URL en plus de soumettre un formulaire POST, mais ce n'est pas une pratique que je conseille : on s'embrouille vite. Dans ton dernier code tu utilises les deux. C'est volontaire ?

    Ensuite, attention à la terminologie : numero était une colonne, pas une table.

    Enfin, si tu veux rediriger l'utilisateur vers l'article nouvellement inséré, il faut que tu récupères l'id de cet article. Comme il est auto-increment, c'est la base de données qui te le fournit, il ne peut pas venir de l'utilisateur. Si ta base est MySQL, tu peux utiliser lastInsertId. Sinon, fais une requête SELECT MAX(ID) FROM article;.

    D'autre part, en utilisant la donnée $_POST['id'] sans la nettoyer dans ton header, tu réinjectes dans l'URL du client une donnée provenant du client. C'est potentiellement une vulnérabilité XSRF.

    Je m'étonne de ne pas te l'avoir encore dit, mais en PHP il faut retenir ce principe de sécurité : on n'utilise jamais telles quelles les données qui viennent du client ($_GET ou $_POST), il faut les « nettoyer » avant, c'est-à-dire faire un certain nombre de vérifications dessus pour s'assurer qu'elles ne peuvent pas contenir quelque chose de dangereux.

    Quelques exemples :
    • Si la variable est supposée être un nombre, c'est facile : tu la castes en nombre, et ça élimine tout code malicieux potentiel.
    • Si elle est censée avoir seulement un certain nombre de valeurs possibles, vérifie qu'elle a bien une de ces valeurs par exemple avec in_array.
    • Si elle est destinée à être affichée dans une page web, désamorce le code HTML avec htmlspecialchars ou strip_tags.
    • etc.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #27
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    pour récupérer l'id juste après une requête INSERT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    // Insertion de l'article
    $req = $bdd->prepare('INSERT INTO article (article, imageun, imagedeux, titre, date, auteur, categorie, scores) VALUES(?, ?, ?, ?, ?, ?, ?, ?)');
    $req->execute(array($_POST['article'], $_POST['imageun'], $_POST['imagedeux'], $_POST['titre'], $_POST['date'], $_POST['auteur'], $_POST['categorie'], $_POST['scores']));
    // -----------------
    // id de la dernière fiche créée
    $articleId = $bdd->lastInsertId('id');
    // -----------------
    // Redirection
    header('location: article.php?id=' . $articleId); exit;
    Dernière modification par Invité ; 27/02/2015 à 22h59.

Discussions similaires

  1. apel d'une page.php via zend
    Par chadnour dans le forum Zend Framework
    Réponses: 1
    Dernier message: 16/04/2010, 20h42
  2. Modifier une page HTML via un formulaire HTML
    Par neo76910 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/07/2009, 11h41
  3. [AJAX] Lancer une page Ajax via un formulaire et un javascript
    Par ccsuperstar dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 16/04/2008, 18h58
  4. [AJAX] passage de valeur pour une page php depuis un formulaire
    Par Ministar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2007, 21h29
  5. appel d'une page php et passage de paramètres via un SRC
    Par yoda_style dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/01/2006, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo