Probleme de modification

Mammouth du PHP | 19672 Messages

01 nov. 2010, 11:03

Il y a donc de fortes chances pour que ce soit le nom de ta colonne de description qui pose problème.

Néanmoins, il faut quand même traiter les données et pour ça, effectuer des requêtes préparées est la solution la plus simple. Renomme ta colonne pour commencer, ensuite essaye de mettre au point un code de préparation de requête avec PDO, sers-toi de la doc et reviens avec ton brouillon, on ajustera si nécessaire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 32 Messages

01 nov. 2010, 11:17

j'ai renommer ma colonne desc en description ( oui je suis pas alle bien loin : ) ) et ca ne fonctionne toujours pas

je vais voir pour les requete preparer entre temps

Mammouth du PHP | 19672 Messages

01 nov. 2010, 11:24

Qu'est-ce qui ne fonctionne pas ? Sois clair et précis dans tes explications, je ne devinerai pas. Si tu as tenté d'exécuter le code actuel avec les mêmes données, il est normal que ça plante et je t'ai expliqué pourquoi, même en renommant la colonne. Or il ne faut pas compter juste sur le fait qu'il sera exceptionnel d'avoir une apostrophe dans une chaine de caractère donnant lieu à une erreur de syntaxe dans la requête SQL. Les données doivent impérativement être traitées.

Tu dois donc faire en sorte que les chaines soient convenablement préparées pour être utilisées dans une requête SQL : PDO offre les outils appropriés pour ça, utilise-les.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 32 Messages

01 nov. 2010, 12:48

ce qui ne fonctionne pas c'est de modifier les entrees

je suis dans un admin que j ai fait, je peux ajouter un produit, je peux le supprimer en fonction de son id et quand je veux le modifier,
je clique sur le produit a modifier, je me retrouve devant le formulaire contenant les champs du produit que je veux modifier et quand je modifie et execute , il ne se passe rien... que ce soit avec des apostrophes ou pas , rien ne se passe .

si je veux juste modifier un prix nada.

j;ai essaye d'executer la modification avec une requete prepare comme celle ci :

Code : Tout sélectionner

error_reporting(E_ALL | E_STRICT); if(isset($_POST["Modifier"])) { var_dump($_POST); try { $bdd = new PDO('mysql:host=localhost;dbname=BDD', 'USER', 'PASS'); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $id=$_POST['id']; $categorie=$_POST['categorie']; $sscategorie=$_POST['sscategorie']; $accueil=$_POST['accueil']; $focus=$_POST['focus']; $nom=$_POST['nom']; $ref=$_POST['ref']; $intro=$_POST['intro']; $description=$_POST['description']; $prix=$_POST['prix']; $dossier=$_POST['dossier']; $photo01 = $_POST['photo01']; $photo02 = $_POST['photo02']; $photo03 = $_POST['photo03']; $photo04 = $_POST['photo04']; $req = $bdd->prepare('UPDATE produits SET categorie = :nvcategorie, sscategorie = :nvsscategorie, accueil = :nvaccueil, focus = :nvfocus, nom = :nvnom, ref = :nvref, intro = :nvintro, description = :nvdescription, prix = :nvprix, dossier = :nvdossier, photo01 = :nvphoto01, photo02 = :nvphoto02, photo03 = :nvphoto03, photo04 = :nvphoto04 WHERE id = :nvid '); $req->execute(array( 'nvcategorie' => $categorie, 'nvsscategorie' => $sscategorie, 'nvaccueil' => $accueil, 'nvfocus' => $focus, 'nvnom' => $nom, 'nvref' => $ref, 'nvintro' => $intro, 'nvdescription' => $description, 'nvprix' => $prix, 'nvdossier' => $dossier, 'nvphoto01' => $photo01, 'nvphoto02' => $photo02, 'nvphoto03' => $photo03, 'nvphoto04' => $photo04, 'nvid' => $id ));
mais ca ne marche pas : (

Mammouth du PHP | 19672 Messages

01 nov. 2010, 12:52

Yllan, une fois de plus : « ça ne marche pas » ne me sert à rien qui puisse t'aider.

Mets l'exécution dans un try/catch pour récupérer l'erreur, parce qu'il y a forcément une erreur.

Et au lieu du bouton

Code : Tout sélectionner

, utilise donc le bouton [PHP] pour afficher ton code s'il te plait.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 32 Messages

01 nov. 2010, 13:06

voila j'ai mis l execution dans un try catch et je ne recois aucun message d'erreur

quand je valide la modification

je recois ce message :
array(17) { ["categorie"]=> string(4) "Geek" ["nom"]=> string(6) "test06" ["sscategorie"]=> string(6) "Bagues" ["accueil"]=> string(10) "Fantaisies" ["focus"]=> string(3) "Oui" ["ref"]=> string(6) "test06" ["intro"]=> string(3) "www" ["dossier"]=> string(6) "test06" ["MAX_FILE_SIZE"]=> string(8) "10485760" ["photo01"]=> string(27) "produits/test06/photo01.jpg" ["photo02"]=> string(23) "produits/test06/photo02" ["photo03"]=> string(23) "produits/test06/photo03" ["photo04"]=> string(23) "produits/test06/photo04" ["description"]=> string(3) "eee" ["prix"]=> string(2) "50" ["id"]=> string(2) "46" ["Modifier"]=> string(8) "Modifier" }
j'ai mis comme ca le code :
<?php
error_reporting(E_ALL | E_STRICT);
if(isset($_POST["Modifier"]))
{
var_dump($_POST);
try
			{
				$bdd = new PDO('mysql:host=localhost;dbname=BDD', 'USER', 'PASS');
			}
			catch(Exception $e)
			{
	        die('Erreur : '.$e->getMessage());
			}
 			$id=$_POST['id'];
			$categorie=$_POST['categorie'];
            $sscategorie=$_POST['sscategorie'];
            $accueil=$_POST['accueil'];
            $focus=$_POST['focus'];
            $nom=$_POST['nom'];
            $ref=$_POST['ref'];
            $intro=$_POST['intro'];
            $description=$_POST['description'];
            $prix=$_POST['prix'];
            $dossier=$_POST['dossier'];
			$photo01 = $_POST['photo01'];
			$photo02 = $_POST['photo02'];
			$photo03 = $_POST['photo03'];
			$photo04 = $_POST['photo04'];

try
			{
$req = $bdd->prepare('UPDATE produits SET categorie = :nvcategorie, sscategorie = :nvsscategorie, accueil = :nvaccueil, focus = :nvfocus, nom = :nvnom, ref = :nvref, intro = :nvintro, description = :nvdescription, prix = :nvprix, dossier = :nvdossier, photo01 = :nvphoto01, photo02 = :nvphoto02, photo03 = :nvphoto03, photo04 = :nvphoto04 WHERE id = :nvid ');

$req->execute(array(
	'nvcategorie' => $categorie,
	'nvsscategorie' => $sscategorie,
	'nvaccueil' => $accueil,
	'nvfocus' => $focus,
	'nvnom' => $nom,
	'nvref' => $ref,
	'nvintro' => $intro,
	'nvdescription' => $description,
	'nvprix' => $prix,
	'nvdossier' => $dossier,
	'nvphoto01' => $photo01,
	'nvphoto02' => $photo02,
	'nvphoto03' => $photo03,
	'nvphoto04' => $photo04,
	'nvid' => $id 
	));

}
			catch(Exception $e)
			{
	        die('Erreur : '.$e->getMessage());
			}
			 
$dossier = $_POST['dossier'];
$photo01 = $_POST['photo01'];
$photo02 = $_POST['photo02'];
$photo03 = $_POST['photo03'];
$photo04 = $_POST['photo04'];

$destination = "../produits/";
function upload($index,$destination,$maxsize=FALSE,$extensions=FALSE)
{
   //Test1: fichier correctement uploadé
     if (!isset($_FILES[$index]) OR $_FILES[$index]['error'] > 0) return FALSE;
   //Test2: taille limite
     if ($maxsize !== FALSE AND $_FILES[$index]['size'] > $maxsize) return FALSE;
   //Test3: extension
     $ext = substr(strrchr($_FILES[$index]['name'],'.'),1);
     if ($extensions !== FALSE AND !in_array($ext,$extensions)) return FALSE;
   //Déplacement
     return move_uploaded_file($_FILES[$index]['tmp_name'],$destination);
}
 
//EXEMPLES
   chmod("../produits/$dossier", 0777);

  $upload1 = upload("photo1","../$photo01",10485760, FALSE );
  $upload2 = upload("photo2","../$photo02",10485760, FALSE );
  $upload3 = upload("photo3","../$photo03",10485760, FALSE );
  $upload4 = upload("photoplus","../$photo04",10485760, FALSE );		 

if (!$bdd) 
{
    die('Requête invalide : ' . mysql_error());
}
else 
{
echo '

bon desole pour le desordre mais c est seulement la 2eme fois que j ecris dans un forum pour de l aide, et la vraiment je ne comprends pas pourquoi la modification ne se fait pas, car j avais utilise deja ce code avant ( enfin sans requete preparee ) et la modification se faisait sans probleme.

Mammouth du PHP | 19672 Messages

01 nov. 2010, 15:27

Je sens que ça va être laborieux... :roll:

Pour commencer, tu vas aligner ton code proprement en utilisant une indentation régulière au lieu de mettre tout ça en vrac, ce sera plus facile à lire et tu éviteras pas mal d'erreurs. Tu verras notamment que de temps en temps, tu as des accolades ouvertes mais jamais fermées, et des éléments de codes placés à des endroits où ils n'ont strictement rien à faire. Tu éviteras les répétitions inutiles aussi : regarde tes variables $photo01, 02 etc..., tu répètes deux fois leur initialisation : à quoi sert donc la seconde fois ?

Rigueur, ordre et discipline doivent être ta règle, sinon tu vas y passer des mois sans rien apprendre et tu vas épuiser ceux qui tenteront malgré tout de t'aider....

Ensuite, vérifie donc que tu as une configuration de PHP avec un display_error à ON.

Ton code sommairement ré-aligné:
<?php
error_reporting(E_ALL | E_STRICT);

function upload($index,$destination,$maxsize=FALSE,$extensions=FALSE)
{
    //Test1: fichier correctement uploadé
    if (!isset($_FILES[$index]) || $_FILES[$index]['error'] > 0)
    {
        return FALSE;
    }
    //Test2: taille limite
    if ($maxsize !== FALSE && $_FILES[$index]['size'] > $maxsize)
    {
        return FALSE;
    }
    //Test3: extension
    $ext = substr(strrchr($_FILES[$index]['name'],'.'),1);
    if ($extensions !== FALSE && !in_array($ext,$extensions))
    {
        return FALSE;
    }
    //Déplacement
    return move_uploaded_file($_FILES[$index]['tmp_name'],$destination);
}

if(isset($_POST["Modifier"]))
{
    echo("<pre>\n");
    var_dump($_POST);
    echo("</pre>\n");
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=BDD', 'USER', 'PASS');
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
    $id           = $_POST['id'];
    $categorie    = $_POST['categorie'];
    $sscategorie  = $_POST['sscategorie'];
    $accueil      = $_POST['accueil'];
    $focus        = $_POST['focus'];
    $nom          = $_POST['nom'];
    $ref          = $_POST['ref'];
    $intro        = $_POST['intro'];
    $description  = $_POST['description'];
    $prix         = $_POST['prix'];
    $dossier      = $_POST['dossier'];
    $photo01      = $_POST['photo01'];
    $photo02      = $_POST['photo02'];
    $photo03      = $_POST['photo03'];
    $photo04      = $_POST['photo04'];
    try
    {
        $sql  = 'UPDATE produits SET '.
                '  categorie = :nvcategorie, '.
                '  sscategorie = :nvsscategorie, '.
                '  accueil = :nvaccueil, '.
                '  focus = :nvfocus, '.
                '  nom = :nvnom, '.
                '  ref = :nvref, '.
                '  intro = :nvintro, '.
                '  description = :nvdescription, '.
                '  prix = :nvprix, '.
                '  dossier = :nvdossier, '.
                '  photo01 = :nvphoto01, '.
                '  photo02 = :nvphoto02, '.
                '  photo03 = :nvphoto03, '.
                '  photo04 = :nvphoto04 '.
                'WHERE id = :nvid ';
        $req = $bdd->prepare($sql);
        $parametres = array(
            ':nvcategorie'     => $categorie,
            ':nvsscategorie'   => $sscategorie,
            ':nvaccueil'       => $accueil,
            ':nvfocus'         => $focus,
            ':nvnom'           => $nom,
            ':nvref'           => $ref,
            ':nvintro'         => $intro,
            ':nvdescription'   => $description,
            ':nvprix'          => $prix,
            ':nvdossier'       => $dossier,
            ':nvphoto01'       => $photo01,
            ':nvphoto02'       => $photo02,
            ':nvphoto03'       => $photo03,
            ':nvphoto04'       => $photo04,
            ':nvid'            => $id
        );
        $bdd->execute($parametres);
    }
    catch(PdoException $e)
    {
        die('Erreur : '.$e->getMessage());
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }

    $destination = "../produits/";

    //EXEMPLES
    chmod("../produits/$dossier", 0777);

    $upload1 = upload("photo1",    "../$photo01", 10485760, FALSE );
    $upload2 = upload("photo2",    "../$photo02", 10485760, FALSE );
    $upload3 = upload("photo3",    "../$photo03", 10485760, FALSE );
    $upload4 = upload("photoplus", "../$photo04", 10485760, FALSE );                 
    if (!$bdd)
    {
        die('Requête invalide : ' . mysql_error());
    }

//... et la suite...?
Corrige sur cette base et note la correction dans ton tableau de paramètres envoyé pour l'exécution de requêtes.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 32 Messages

01 nov. 2010, 18:11

oui la suite :
else 
{
echo '
<font style="color:#CC3300; font-family:Arial, Helvetica, sans-serif; font-size:24px; font-weight:bold">
VOUS AVEZ BIEN MODIFIER LE PRODUIT</font>
';
}
 
/On ferme if(isset($_POST["Modifier"]))
}
?>
voila je suis entrain de voir ce que tu m as envoye
merci

Eléphanteau du PHP | 32 Messages

01 nov. 2010, 19:25

petite erreur de manip , ca se termine comme ca :
//On ferme if(isset($_POST["Modifier"]))
}
?>
et j'essai de voir ou est le probleme je ne vois pas...
et pour la configuration de php sur display error on, je travaille directement sur le serveur, je ne sais pas ou voir ...
:cry:

Mammouth du PHP | 19672 Messages

01 nov. 2010, 19:28

Comment ça « directement sur le serveur » : tu travailles en ligne chez ton hébergeur au lieu de développer ça en local ? :shock:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 32 Messages

02 nov. 2010, 01:29

euh :)

en fait j'ai fait tout le site en local bien sur et il y avait juste le problème de modification donc je me suis dit je le met sur le serveur pour vérifier si le reste marche et ensuite j’essaierai de m arranger pour les modifications :)

bon j ai été un peu présomptueux puisque je n'ai pas réussi a faire fonctionner la modifications des articles...

Mammouth du PHP | 19672 Messages

02 nov. 2010, 10:01

Je vois : règle n°1 du bon développeur : mettre au point son code dans un environnement qu'il maitrise et qu'il peut configurer de la manière la plus stricte. Si il y a des erreurs, tu les verras immédiatement, tu détecteras les problèmes dès leur apparition et tu pourras leur apporter un correctif avant une quelconque mise en ligne.

Ce que ça veut dire, c'est que je te recommande très vivement de rapatrier tes développements en local et de configurer ton php.ini avec un display_error à ON et un error_reporting à E_ALL | E_STRICT, mais directement dans le php.ini et non, comme tu l'as fait, en début de script. Ce type de configuration doit être systématique en phase de développement. Comme ça tu sauras que si tu mets quelque chose en ligne qui fonctionne correctement en local, tu n'as presque aucune chance pour que ça plante, enfin presque parce qu'il peut toujours y avoir des problèmes avec par exemple des différences de versions, des librairies implémentées en dev mais indisponibles en prod. C'est du reste un des intérêts majeurs de WAMP parce que tu peux justement avoir plusieurs versions en parallèle de PHP, de MySQL ou encore d'Apache pour pouvoir calquer ton environnement de dev à l'environnement de production auquel sont destines tes travaux.
Mais n'oublie jamais que dans la très grande majorité des cas, les environnements de production sont configurés précisément pour ne pas afficher les erreurs : la raison est simple, on met en production des applications destinées à un public qui n'est pas forcément très averti en matière de programmation, et il ne saurait être question de les affoler avec des messages rédigés dans un jargon qu'ils ne comprennent pas et que de toutes façons ils ne peuvent pas résoudre eux-même.

J'ai, pour ma part, toujours travaillé de cette manière et je n'ai jamais eu à m'en repentir.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 32 Messages

02 nov. 2010, 10:39

bon on apprend tout les jours : )))))

donc je suis tes conseils ; )

alors j ai tout mis sur le local cette fois , verifier que tout est comme tu as dit display error on ... et fait la modification d un article et voici le message que je recois :
array(17) {
  ["categorie"]=>
  string(6) "Bijoux"
  ["nom"]=>
  string(9) "Serpentin"
  ["sscategorie"]=>
  string(6) "Bagues"
  ["accueil"]=>
  string(4) "Luxe"
  ["focus"]=>
  string(3) "Oui"
  ["ref"]=>
  string(9) "BagSer001"
  ["intro"]=>
  string(26) "Tres belle bagues Or Blanc"
  ["dossier"]=>
  string(9) "BagSer001"
  ["MAX_FILE_SIZE"]=>
  string(8) "10485760"
  ["photo01"]=>
  string(29) "produits/BagSer001/photo1.jpg"
  ["photo02"]=>
  string(29) "produits/BagSer001/photo2.jpg"
  ["photo03"]=>
  string(25) "produits/BagSer001/photo3"
  ["photo04"]=>
  string(28) "produits/BagSer001/photoplus"
  ["description"]=>
  string(39) "				Or blanc

Crystal Swarovski
"
  ["prix"]=>
  string(3) "10$"
  ["id"]=>
  string(2) "12"
  ["Modifier"]=>
  string(8) "Modifier"
}
Fatal error: Call to undefined method PDO::execute() in C:\wamp\www\eliateOK\adm\modifierproduitok.php on line 123

la ligne 123 est celle ci :
        $bdd->execute($parametres);

Mammouth du PHP | 19672 Messages

02 nov. 2010, 10:53

l doit y avoir un problème dans ton code la j'ai aps le temps de regarder les détails. Au besoin, jette un coup d'œil dans la documentation sur PDO::exec() et PDOStatement::execute()
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 32 Messages

02 nov. 2010, 11:04

bon la je suis largue j ai change execute en exec, verifier la doc sur exec...

tout parait normal dans le code et cette fois quand j opere la modification ca m'ecrit :

Code : Tout sélectionner

Warning: PDO::exec() expects parameter 1 to be string, array given in C:\wamp\www\eliateOK\adm\modifierproduitok.php on line 123
aussi le array que je vois une fois que je fais la modification me donne les champs de la bdd dans un ordre autre que celui dans lequel la modification s'effectue... n'est ce pas un probleme aussi ?

bon largue vraiment la