Page 1 sur 1

formulaire-->requete sql-->affichage (help!)

Posté : 12 avr. 2016, 11:19
par yvautrin
Bonjour,

Je souhaiterais avoir une page php incluant un formulaire qui permet de passer les parametres un requete sql puis afficher la liste des entrees correspondantes sous forme de tableau.

Est il possible de tout faire sous la meme page? ou bien mon formulaire doit il renvoyer vers une autre page qui se chargera de lancer la requete et d'afficher les resultats?

Merci de votre aide!

Re: formulaire-->requete sql-->affichage (help!)

Posté : 12 avr. 2016, 12:24
par Ascla
Bonjour,
Le php est un langage serveur, cela signifie qu'il agira avant le chargement de la page.
Dans le cas de ton formulaire, sans Javascript il te faudra bien un rechargement de page pour permettre l'envoi des informations au serveur.
Ce que tu peux cependant faire, c'est appeler cette même page. Il y aura un rechargement mais tu resteras bien sur ta page.
Si c'est ce que tu veux faire, il suffira d'introduire sur ta page une script vérifiant si le formulaire à été soumis. Dans ce cas là, on execute la requête puis on affiche les données.
Si tu as des questions, n'hésite pas ;)

Re: formulaire-->requete sql-->affichage (help!)

Posté : 12 avr. 2016, 14:02
par yvautrin
Merci pour ta reponse!

Je ne vaux pas passer par du Javascript, j'ai donc cree un formulaire qui renvois a une page .php contenant ma requete SQL.

Maintenant, nouveau probleme, voici mon code actuel (qui, bien sur renvoie des erreurs sql! ):

Code : Tout sélectionner

// variable definition $itemlist=$_POST["itemlist"]; $criteria=$_POST["criteria"]; echo $itemlist; echo $criteria; ?><html><head> <title>wrapper generator</title></head><body> </body></html> <?php // Define SQL Query $sql = 'SELECT engine4_sitestoreproduct_products.product_id, engine4_sitestoreproduct_products.title, engine4_sitestoreproduct_products.body, engine4_sitestoreproduct_products.photo_id, engine4_storage_files.storage_path FROM engine4_sitestoreproduct_products INNER JOIN engine4_storage_files ON engine4_sitestoreproduct_products.photo_id = engine4_storage_files.file_id WHERE owner_id = "5742" ORDER BY "'.$_POST["criteria"];.'" LIMIT "'.$_POST["itemlist"];.'"'; // LIMIT "'.$_POST["criteria"];.'"'; // Launch SQL query $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // Fetch results as array $data = mysql_fetch_array($req); // Free database memory from request mysql_free_result ($req); mysql_close (); // Display informations echo $data['product_id']; echo $data['body']; ?>
Ce que je cherche a faire :
1. passer en argument dans ma requete sql les infos recuperees par le formulaire
2. afficher tous les enregistrements de ma base de donnee resultant de ma requete sql

Et la....je coince.....

Re: formulaire-->requete sql-->affichage (help!)

Posté : 12 avr. 2016, 18:40
par Ascla
Pour ta requête, retire le point virgule ";" après tes $_POST.
Il manque la connexion à la base de données : mysql_connect()
Serait-il possible d'avoir les erreurs renvoyées ?
De plus, mysql est obsolète et supprimé depuis php 7.0.0

Voici un model de connexion de type procédural pour récupérer plusieurs données :
<?php
    // variable definition
    $itemlist=$_POST["itemlist"];
    $criteria=$_POST["criteria"];

    $link = mysqli_connect("127.0.0.1", "user", "password", "bdd");

    /* Vérifie la connexion */
    if (mysqli_connect_errno()) {
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
    }

    $query = "SELECT engine4_sitestoreproduct_products.product_id, engine4_sitestoreproduct_products.title, engine4_sitestoreproduct_products.body, engine4_sitestoreproduct_products.photo_id, engine4_storage_files.storage_path FROM engine4_sitestoreproduct_products INNER JOIN engine4_storage_files ON engine4_sitestoreproduct_products.photo_id = engine4_storage_files.file_id WHERE owner_id = '5742' ORDER BY '".$criteria."' LIMIT '".$itemlist."'";

    if ($stmt = mysqli_prepare($link, $query)) {

        /* Exécution de la requête */
        mysqli_stmt_execute($stmt);

        /* Association des variables de résultat */
        mysqli_stmt_bind_result($stmt, $product_id, $title, $body, $photo_id, $storage_path);

        /* Lecture des valeurs */
        while (mysqli_stmt_fetch($stmt)) {
            echo $product_id;
            echo $body;
        }

        /* Fermeture de la commande */
        mysqli_stmt_close($stmt);
    }

    /* Fermeture de la connexion */
    mysqli_close($link);
?>
Jette un coup d'œil de ce côté : http://php.net/manual/fr/mysqli-stmt.fetch.php

Re: formulaire-->requete sql-->affichage (help!)

Posté : 13 avr. 2016, 04:49
par yvautrin
Merci, ca commence a ressembler a qualquechose grace a ton aide!

Maintenant, plus d'erreur sql, les resultats s'affichent bien, sauf quand je passe la commande "LIMIT", que ce soit en "dur" avec par exemple LIMIT = 5 ou avec la variable...

Quand la commande LIMIT est dans la requete sql, rien ne s'affiche...???

Re: formulaire-->requete sql-->affichage (help!)

Posté : 13 avr. 2016, 13:25
par Aureusms
Bonjour,

Je ne suis pas un adepte de mysqli_prepare mais ne faut-il pas protéger contre les injection sql ?
Concernant ta limite, tu peux vérifier si la valeur est bien un entier positif. De plus, je ne pense pas qu'il faille rajouter des simples quotes dans les clauses ORDER et LIMIT
<?php
    $link = mysqli_connect("127.0.0.1", "user", "password", "bdd");

    /* Vérifie la connexion */
    if (mysqli_connect_errno()) {
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
    }

    // variable definition
    $itemlist=mysqli_real_escape_string($_POST["itemlist"]);
    $itemlist = (!is_numeric($itemlist) || !filter_var($itemlist,FILTER_VALIDATE_INT) || $itemlist < 0) ? 5 : $itemlist;
    $criteria=mysqli_real_escape_string($_POST["criteria"]);

    $query = "SELECT engine4_sitestoreproduct_products.product_id, engine4_sitestoreproduct_products.title, engine4_sitestoreproduct_products.body, engine4_sitestoreproduct_products.photo_id, engine4_storage_files.storage_path FROM engine4_sitestoreproduct_products INNER JOIN engine4_storage_files ON engine4_sitestoreproduct_products.photo_id = engine4_storage_files.file_id WHERE owner_id = '5742' ORDER BY ".$criteria." LIMIT ".$itemlist;

    if ($stmt = mysqli_prepare($link, $query)) {

        /* Exécution de la requête */
        mysqli_stmt_execute($stmt);

        /* Association des variables de résultat */
        mysqli_stmt_bind_result($stmt, $product_id, $title, $body, $photo_id, $storage_path);

        /* Lecture des valeurs */
        while (mysqli_stmt_fetch($stmt)) {
            echo $product_id;
            echo $body;
        }

        /* Fermeture de la commande */
        mysqli_stmt_close($stmt);
    }

    /* Fermeture de la connexion */
    mysqli_close($link);
?>

Re: formulaire-->requete sql-->affichage (help!)

Posté : 14 avr. 2016, 12:51
par Ascla
Il est vrai que nous ne sommes pas à l'abri d'injection SQL.
Effectivement, je n'avais pas regardé ta requête mais l'ajout de quotes après le LIMIT est responsable du problème d'affichage. (C'est même bizarre que tu ne reçoives pas d'erreurs).
Belle journée.

Re: formulaire-->requete sql-->affichage (help!)

Posté : 14 avr. 2016, 14:29
par yvautrin
Hello,

Grace a votre aide a tous, j'sy suis presque! Tout fonctionne! sauf.....

Je n'arrives pas a passer l'user_id dans ma requete sql...

Voici comment je recupere la variable de session :

Code : Tout sélectionner

echo ($_SESSION['cometchat']['user']['id']);
et voila ou je veut la placer dans ma requete :

Code : Tout sélectionner

$query = "SELECT engine4_sitestoreproduct_products.product_id, engine4_sitestoreproduct_products.price, engine4_sitestoreproduct_products.title, engine4_sitestoreproduct_products.body, engine4_sitestoreproduct_products.photo_id, engine4_storage_files.storage_path FROM engine4_sitestoreproduct_products INNER JOIN engine4_storage_files ON engine4_sitestoreproduct_products.photo_id = engine4_storage_files.file_id WHERE owner_id ='user_id' AND engine4_sitestoreproduct_products.featured = '0' LIMIT ".$itemlist;

a mon avis, c'est encore au niveau de la syntaxe que ca bloque...

Re: formulaire-->requete sql-->affichage (help!)

Posté : 14 avr. 2016, 14:30
par or 1
$user_id au lieu de user_id

Re: formulaire-->requete sql-->affichage (help!)

Posté : 14 avr. 2016, 16:01
par Aureusms
Bonjour,

Essayes ceci :
$user_id = $_SESSION['cometchat']['user']['id'];

$query = "SELECT engine4_sitestoreproduct_products.product_id, engine4_sitestoreproduct_products.price, engine4_sitestoreproduct_products.title, engine4_sitestoreproduct_products.body, engine4_sitestoreproduct_products.photo_id, engine4_storage_files.storage_path FROM engine4_sitestoreproduct_products INNER JOIN engine4_storage_files ON engine4_sitestoreproduct_products.photo_id = engine4_storage_files.file_id WHERE owner_id ='".$user_id."' AND engine4_sitestoreproduct_products.featured = '0' LIMIT ".$itemlist;
ou
$query = "SELECT engine4_sitestoreproduct_products.product_id, engine4_sitestoreproduct_products.price, engine4_sitestoreproduct_products.title, engine4_sitestoreproduct_products.body, engine4_sitestoreproduct_products.photo_id, engine4_storage_files.storage_path FROM engine4_sitestoreproduct_products INNER JOIN engine4_storage_files ON engine4_sitestoreproduct_products.photo_id = engine4_storage_files.file_id WHERE owner_id ='".$_SESSION['cometchat']['user']['id']."' AND engine4_sitestoreproduct_products.featured = '0' LIMIT ".$itemlist;
N'oublies pas de protéger $_SESSION['cometchat']['user']['id'] des injections SQL si tu ne maitrise pas ce qu'il y a dans cette variable.

Re: formulaire-->requete sql-->affichage (help!)

Posté : 03 janv. 2017, 15:32
par saidalami
yvautrin , je partage le même intérêt pour Cometchat, l'avez-vous déjà intégré dans votre site ?
Merci