Bonsoir a tous,

Alors voila j'ai fais une recherche sur le forum je ne parviens toujours pas a envoyer mes donner via un formulaire.

J'ai créer une table que j'ai appeler projetweb dans une bdd test en local avec comme structure : titre, date, description, img, user.

Ma req de récupération fonction bien mai l'envois galère :

extract($_POST);
        if(isset($titre) && isset($description) && !empty($user)){
           $sql = "INSERT INTO projetweb (titre,date,description,img,user) VALUES ('$titre','','$description','','$user')";
           $req = mysql_query($sql) or die(mysql_error());
        }

Pour l'envoie je ne veut envoyer que le titre la description et user avec le form :

<div class="col-md-12">
    <form method="post" action="post.php">
        <div class="form-group">
            <label for="inputEmail">Titre</label>
            <input type="text" name="titre" class="form-control" id="inputEmail" placeholder="Titre">
        </div>

        <div class="form-group">
            <label for="Pseudo">Pseudo</label>
            <input type="text" name="pseudo" class="form-control" id="inputEmail" placeholder="Pseudo">
        </div>

        <div class="form-group">
            <label for="description">description</label>
            <textarea class="form-control" name="description" id="description" placeholder="description"></textarea>
        </div>
        <button type="submit" class="btn btn-primary">Envoyer</button>
    </form>

    </div>

La co a la BDD ce fait par une include :

mysql_connect('localhost','root','');
mysql_select_db('test');

Le truc c'est que j'arrive bien a récupéré mes données mai pas en envoyer j'ai aussi vue ce tuto mai ça ne m'avance pas non plus.

Je suis paumé mon code est mal foutue si vous avez une piste je prend.

14 réponses


alors on commence.

« appeler la fonction extract() sur des données partagées comme les variables $_FILES est, comme mentionné ci-dessus, un risque potentiel pour la sécurité. »
« N'utilisez pas extract() sur des données inconnues, comme les données utilisateurs (i.e. $_GET, $_FILES, etc.) »
Cf: http://us3.php.net/manual/fr/function.extract.php

déjà, je vais te demande de re-donné ton code une fois avoir corrigé le point ci-dessus, en donnant plus de lignes si possible.

test aussi si ta condition est true de la manière suivante:

var_dump( isset($titre) && isset($description) && !empty($user) );
die( __FILE__.':'. __LINE__ );

Bonjour,

Qu'est ce qui "galère à l'envoi" ?
Vous avez un message d'erreur ?

Tout textera doit au minimum être récupérer comme ceci :

Par :
$description = addslashes($_POST'description']);

addslashes(); permet de remplacer le " et ' qui peuvent interféré avec les requêtes.

neecride
Auteur

Bonsoir,

Donc alors voila j'ai refait un peut le bousin cette fois si ça envoie bien un truc mai vide je rempli les champs du formulaire et rien n'est stocker juste la date qui en timestamp et l'id en AI même actualiser la page sans remplir de champ envoie un contenue vide.

Voici la req :

require('../config.php');       
        mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
        mysql_select_db(DB_BDD);

        // On commence par récupérer les champs 
        if(isset($_POST'titre'])) $titre=$_POST'titre'];
        else $titre="";
        if(isset($_POST'description'])) $description=$_POST'description'];
        else $description="";
        if(isset($_POST'user'])) $user=$_POST'user'];
        else $user="";
        // on écrit la requête sql 
        $sql = "INSERT INTO projetweb(titre,description,user) VALUES ('$titre','$description','$user')"; 
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

Je ne sais pas si je me rapproche du but je suis un peut perdu ! Pour répondre a Carouge10 je n'ai aucune erreur rien n'est retourner.

ton champ titre, description, et user, peuvent être null dans ta table ?

neecride
Auteur

Toutes mes ligne son null = non dans la structure

ALTER TABLE `projetweb` CHANGE `id` `id` INT( 255 ) NOT NULL AUTO_INCREMENT ,
CHANGE `titre` `titre` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL ,
CHANGE `description` `description` TEXT CHARACTER SET latin1 COLLATE latin1_bin NOT NULL ,
CHANGE `date` `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
CHANGE `img` `img` TEXT NOT NULL ,
CHANGE `user` `user` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL ;

Je me demande si img je peut la passer a null comme je n'ai pas forcément envie de mettre une img a chaque fois ?

fais un

var_dump($sql);

et vérifie ta requête

ta un gros problème de conception, tu mes des else truc = "", sauf que coté structure de ta table c'est du NOT NULL derrière

neecride
Auteur

Je vais tous reprendre de zero et le faire en PDO je pense que comme cela ça ira bien mieux jusque la je n'ai pas trop de soucis.

Merci de ton aide ! je reviendrai surement car PDO je ne connait pas tant que ça.

neecride
Auteur

Bonsoir/bonne journée vue l'heur,

Je reviens après avoir suivie le tuto j'en suis a la 3ième vidéo 29min40 environ tous ce passe bien jusqu’à ce que je veuille édité les entrés de la bdd.

Alors je n'ai pas fait le foufou histoire de tous bien comprendre sur les nouvelles façon d'utilisée les requête etc.. avec PDO j'ai suivi le tuto a la lettre et a la variable prêt, et je suis arriver a la fonction édité qui ne fonctionne pas le reste ça va login, création et supprimer.

Voici la la fonction complète de categories_edite.php :

/* $auth = 0; */
require('../lib/includes.php');
/*
* creat categories
*/
if(isset($_POST'name']) && isset($_POST'slug'])){
    checkCsrf();
    $slug = $_POST'slug'];
    if(preg_match('/^[a-z\-0-9]+$/', $slug)){
        $name = $db->quote($_POST'name']);
        $slug = $db->quote($_POST'slug']);
        if(isset($_GET'id'])){
            $id = $db->quote($_GET'id']);
            $db->query("UPDATE categories SET name=$name, slug=$slug WHERE id=$id");
        }else{
            $db->query("INSERT INTO categories SET name=$name, slug=$slug");
        }
        setFlash('La catégorie a bien étais ajouée');
        header('Location:category.php');
        die();
    }else{
        setFlash('Le slug n\'est pas correct !', 'danger');
    }
}
if(isset($_GET'id'])){
    $id = $db->quote($_GET'id']);
    $select = $db->query("SELECT * FROM categories WHERE id=$id");
    if($select->rowCount() == 0){
        setFlash('Il n\'y a pas de catégorie avec cet ID');
        header('Location:category.php');
        die();
    }
    $_POST = $select->fecth();
}
include('header-admin.php');

Dans un premier temps quand je veut édité ça me redirige bien avec l'id et quand j'édit et j'accepte le form ben ça fait un INSERT INTO au lieu d'un UPDATE.

Aussi quand j'entre n'importe quel id dans la barre d'adresse ben ça s'enregistre quand même et aussi

$_POST = $select->fecth();

n'est pas retourner dans les champs.

Jusque la tout aller bien vos yeux son plus habitué que moi alors je vous laisse jetée l'oeil voir si j'ai pas oublié un truc c'est forcément dans ces lignes, car quand Grafik le fait ben ça fonctionne bien.

Sinon tout fonctionne le login la suppression l'insertion sauf l'édition, aucune erreur retourner etc.. donc je ne vois plus j'ai re-regarder le tuto depuis le début pour voir, c'est pourquoi je vous demande de regarder si j'ai pas un truc qui manque j'avoue que la je sèche.

Merci !

Bonjour,

Pour le $_POST, c'est le mot fetch et non fecth http://php.net//manual/fr/pdostatement.fetch.php

neecride
Auteur

Effectivement j'avais vue cela quand j'ai poster mai j'ai toujours ce souci d'édit dans le doute je vais quand m^me tout vérifier.

essais ceci

<?php
// $auth = 0;
require('../lib/includes.php');
// create categories
if(isset($_POST'name'], $_POST'slug']))){ // isset() accepte plusieurs arguments
    checkCsrf();
    $slug = $_POST'slug'];
    if(preg_match('/^[a-z\-0-9]+$/', $slug)){
        $bind = array(
            'name' => $_POST'name'],
            'slug' => $_POST'slug'],
        );
        if(isset($_GET'id'])){
            $bind'id'] = $_GET'id'];
            $sql = "UPDATE categories SET name=:name, slug=:slug WHERE id=:id";
        }else{
            $sql = "INSERT INTO categories SET name=:name, slug=:slug";
        }
        $req = $db->prepare($sql);
        $req->execute($bind);

        setFlash('La catégorie à bien été ajoutée');
        header('Location: category.php');
        die;
    }else{
        setFlash('Le slug n\'est pas correct !', 'danger');
    }
}

if(isset($_GET'id'])){
    $sql = "SELECT * FROM categories WHERE id=?";
    $req = $db->prepare($sql);
    $select = $req->execute(array(
        $_GET'id']
    ));
    if($select->rowCount() == 0){
        setFlash('Il n\'y a pas de catégorie avec cette ID');
        header('Location: category.php');
        die;
    }
    $_POST = $select->fetch();
}
include('header-admin.php');

J'ai passé toutes tes requêtes en requêtes préparées, j'ai fait une modif' sur le isset, et corrigé tes fautes d'ortho'

j'ai un doute sur le bon fonctionnement de $select->rowCount(),

neecride
Auteur

Glaived : on a répondu en m^me temps désolé : et j'ai le m^me problème avec ton code

Re bonjour,

Alors le souci viens bien des édition je n'ai aucun souci ailleurs ça me fait la même chose avec la vidéo suivante.

je vous passe le form.php :

function input($id){
    $value = isset($_POST$id]) ? $_POST$id] : '';
    return "<input type='text' class='form-control' id='$id' name='$id' value='$value'>";
}
function textarea($id){
    $value = isset($_POST$id]) ? $_POST$id] : '';
    return "<textarea type='text' class='form-control' id='$id' name='$id'>$value</textarea>";
}
function select($id, $options = array()){
    $return = "<select class='form-control' id='$id' name='$id'>";
    foreach($options as $id => $v){
        $selected = '';
        if(isset($_POST$id]) && $k == $_POST$id]){
            $selected = 'selected="selected"';
        }
        $return .= "<option value='$k' $selected>$v</option>";

    }
    $return .= '</select>';
    return $return;
}

et le work_edit.php :

/* $auth = 0; */
require('../lib/includes.php');
/*
* creat works
*/
if(isset($_POST'name']) && isset($_POST'slug'])){
    checkCsrf();
    $slug = $_POST'slug'];
    if(preg_match('/^[a-z\-0-9]+$/', $slug)){
        $name = $db->quote($_POST'name']);
        $slug = $db->quote($_POST'slug']);
        $category_id = $db->quote($_POST'category_id']);
        $content = $db->quote($_POST'content']);
        /*on fait un update si on récupère l'id*/
        if(isset($_GET'id'])){
            $id = $db->quote($_GET'id']);
            $db->query("UPDATE works SET name=$name, slug=$slug, content=$content, category_id=$category_id WHERE id=$id");
        }else{
            $db->query("INSERT INTO works SET name=$name, slug=$slug, content=$content, category_id=$category_id ");
        }
        setFlash('La réalisation a bien étais ajouée');
        header('Location:work.php');
        die();
    }else{
        setFlash('Le slug n\'est pas correct !', 'danger');
    }
}
if(isset($_GET'id'])){
    $id = $db->quote($_GET'id']);
    $select = $db->query("SELECT * FROM works WHERE id=$id");
    if($select->rowCount() == 0){
        setFlash("Il n'y a pas de réalisation avec cet ID", 'danger');
        header('Location:work.php');
        die();
    }
    $_POST = $select->fetch();
}
$select = $db->query('SELECT id, name FROM categories ORDER BY name ASC');
$categories = $select->fetchAll();
$categories_list = array();
foreach($categories_list as $category){
    $categories_list$category'id']] = $category'name'];
}
include('header-admin.php');

ça ne veut toujours pas me reprendre les champs avec :

$_POST = $select->fetch();

quand je veut édité ça laisse les champs vide et quand j'envoie ça fait toujours un INSERT au lieu d'un UPDATE je récupère pourtant bien l'id dans la barre d'adresse.

Les INSERT, les DELETE fonctionne bien mai c'est toujours les UPDATE qui foire il doit y avoir une erreur dans form.php car les champ reste vide alors que j'ai ma requête qui devrait les retourner dans l'édition.

Donc voila je ne sais plus trop où regarder j'ai regarder les vidéo plusieurs fois en HD en plus surement une concaténation je ne sais pas.

Merci !

neecride
Auteur

Pff c'étais dure de trouver le truc ça venez des input la tous fonctionne édition, suppression, ajout etc... maintenant je vais amélioré le tous voir même placer un système de template le seul truc qui bug c'est son redimensionnement d'image pour moi ne fonctionne que en local.

et pour ceux qui passerai par la dans le htacces faut placer - RewriteEngine On - sans les tirets en début de fichier, sans cette ligne sur ovh et mon wamp ça ne fonctionner pas.

Merci de vos intervention l'erreur ne venais pas du tuto mai de moi !

neecride
Auteur

Bonsoir,

J'ai encore une question je suis bien partie pour amélioré ce que j'ai appris dans le tuto portfolio mai je me pose tous de même la question sur la sécurité.

cette variable es t'elle correctement écrite ça ne me retourne pas d'erreur le formulaire s'envoie bien alors je ne sais pas trop ?

$username = $db->quote(addslashes($_POST'username']));

sinon pour le reste j'ai ajouté un espace membres qui reste a finir mai au mois l'inscription fonctionne avec une valeur de 0 par défaut si l'utilisateur n'est pas valider etc...

Voila merci a vous et à grafik pour ces tuto !