[Résolu] Requête d'insertion impossible

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Résolu] Requête d'insertion impossible

Re: [Résolu] Requête d'insertion impossible

par Yunge » 16 oct. 2011, 23:39

Merci pour la précision ! Une dernière chose, est-ce qu'une âme bienveillante saurait m'expliquer ce qui est faut dans ma toute première requête ? J'ai beau essayer de comprendre, je n'y arrive pas.

Merci ;)

Re: [Résolu] Requête d'insertion impossible

par moogli » 16 oct. 2011, 21:26

Et pour bindParam, si tu précises pas que tes chaines sont des strings ( PDO::PARAM_STR), y'aura une erreur.

D'ailleurs tu devrais normalement en obtenir une, si du moins ta requête est exécutée.
pour info http://fr2.php.net/manual/fr/pdostatement.bindparam.php

si tu ne précise pas le 3ème paramètres c'est considéré comme une chaine de caractère.

c'est justement si ta donnée n'est pas une chaine de caractère qu'il faut le préciser :mrgreen:


@+

Re: Requête d'insertion impossible

par Yunge » 16 oct. 2011, 20:25

Merci pour ta réponse, si je comprends bien dans mon cas je dois utiliser la fonction exec, et non execute ?

EDIT :

C'est bon ça marche, j'ai apporté quelques modifications à la requête préparée et aux binds :

Avant :
<?php
                        $req = $bdd->prepare('INSERT INTO gallery(cat_id, title, description, before, after) VALUES(:cat_id, :title, :description, :before, :after)');
                        $req->bindParam(':cat_id',$imgcatid);
                        $req->bindParam(':title',$imgtitle);
                        $req->bindParam(':description',$imgdescription);
                        $req->bindParam(':before',$imgbefore);
                        $req->bindParam(':after',$imgafter);
                        $req->execute();
?>
Après :
<?php
			$req = $bdd->prepare('INSERT INTO gallery VALUES("", :cat_id, :title, :description, :before, :after)');
			$req->bindParam(':cat_id',$imgcatid, PDO::PARAM_INT);
			$req->bindParam(':title',$imgtitle, PDO::PARAM_STR);
			$req->bindParam(':description',$imgdescription,  PDO::PARAM_STR);
			$req->bindParam(':before',$imgbefore,  PDO::PARAM_STR);
			$req->bindParam(':after',$imgafter,  PDO::PARAM_STR);
			$req->execute();
?>
Merci beaucoup pour ton aide !

Re: Requête d'insertion impossible

par soycd » 16 oct. 2011, 20:00

Bah oui, tes 2 requêtes sont fausses.
int PDO::exec ( string $statement )
Et pour bindParam, si tu précises pas que tes chaines sont des strings ( PDO::PARAM_STR), y'aura une erreur.

D'ailleurs tu devrais normalement en obtenir une, si du moins ta requête est exécutée.

[Résolu] Requête d'insertion impossible

par Yunge » 16 oct. 2011, 18:36

Bonjour tout le monde !

Après un week-end passé à chercher une solution, que ce soit de moi-même ou bien sur internet, je viens dans le plus grand désespoir vous demander votre aide.
J'ai créé un panneau d'administration à partir duquel il est possible d'uploader une image à partir de son ordinateur.
Mon script consiste à enregistrer l'image dans le FTP, ainsi que les informations liées dans la base de donnée.
Je vérifie donc l'intégralité et la validité de l'image et des informations avant d'exécuter le script.

Une fois la condition remplie, le fichier chargé est correctement enregistré à l'endroit voulu mais la requête SQL pour enregistrer les informations ne fonctionne pas.
Aucun élément n'est ajouté à la base de donnée ...

Voici mon script
<?php
if(!empty($_POST['title']) && !empty($_POST['cat_id']) && isset($_FILES['img']) && $_FILES['img']['error'] == 0)
	{
		$imgtitle = secure($_POST['title']);
		$imgcatid = intval($_POST['cat_id']);
		$imgdescription = !empty($_POST['description'])?secure($_POST['description']):'';
		
		$fileinfo = pathinfo($_FILES['img']['name']);
		$ext_upload = $fileinfo['extension'];
		$ext_allowed = array('jpg', 'jpeg', 'gif', 'png', 'psd');
		
		if (in_array($ext_upload, $ext_allowed))
		{
			move_uploaded_file($_FILES['img']['tmp_name'], 'images/gallery/' . basename($_FILES['img']['name']));
		
			$req = $bdd->prepare('INSERT INTO gallery(id, cat_id, title, description, before, after) VALUES(:id, :cat_id, :title, :description, :before, :after)');
			$req->execute(array(
				'id' => '',
				'cat_id' => $imgcatid,
				'title' => $imgtitle,
				'description' => $imgdescription,
				'before' => '',
				'after' => "images/gallery/".$_FILES['img']['name']
				));
				
			header('Location: admin.php?g=gallery');
		}
	}
?>
Et encore un autre test que j'ai fais :
<?php 
	if(!empty($_POST['title']) && !empty($_POST['cat_id']) && isset($_FILES['img']) && $_FILES['img']['error'] == 0)
	{
		$imgtitle = secure($_POST['title']);
		$imgcatid = intval($_POST['cat_id']);
		$imgdescription = !empty($_POST['description'])?secure($_POST['description']):'';
		$imgafter = $_FILES['img']['name'];
		$imgbefore = $_FILES['img_before']['name'];
		
		$fileinfo = pathinfo($_FILES['img']['name']);
		$ext_upload = $fileinfo['extension'];
		$ext_allowed = array('jpg', 'jpeg', 'gif', 'png', 'psd');
		
		if (in_array($ext_upload, $ext_allowed))
		{
			move_uploaded_file($_FILES['img']['tmp_name'], 'images/gallery/' . basename($_FILES['img']['name']));
			
			$req = $bdd->prepare('INSERT INTO gallery(cat_id, title, description, before, after) VALUES(:cat_id, :title, :description, :before, :after)');
			$req->bindParam(':cat_id',$imgcatid);
			$req->bindParam(':title',$imgtitle);
			$req->bindParam(':description',$imgdescription);
			$req->bindParam(':before',$imgbefore);
			$req->bindParam(':after',$imgafter);
			$req->execute();
		}
	}
?>
A noter que :
- Je suis bel et bien connecté à la base de donnée
- Lorsque j'active le report d'erreurs PDO, il me retourne un array(0=>0000, 1=>, 2=>)

Voilà la structure de ma table "gallery" :

Image

Merci d'avance pour votre aide !
Bonne fin de journée et de week-end ;)