Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

j'ai creer une page profil.php qui affiche les info d'utilisateur ainsi sa photo de profil et fait appel
a la page avatar.php qui manipule le code d'ajout de photo
voici le code de avatar.php

<?php
session_start();
require_once 'inc/autoloadeur.php';
require_once 'class/App.php';
$db=App::getDatabase();
if(isset($_POST['upload'])) {

    $taillemax = 2097152;
    $extension = array('jpg', 'gif', 'png');
    if ($_FILES['avatar']['size'] <= $taillemax) {
           //strrchr permet de renvoyer l'extension de fichier avec le point
           // substr eviter la premiere caractere de la chaine (1)
          //strtolower convertir la chaine en miniscule
        $extensionupload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'),1));
        if (in_array($extensionupload, $extension)) {
            $chemin = "avatar/" . $_GET['id'] . "." . $extensionupload;
            $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
          ;
            $id=$_GET['id'];
            if ($resultat) {
                $insertAvatar = $db->query("insert into user (avatar) VALUE (:avatar) WHERE id=$id",
                                          array("avatar" =>  $_GET['id'] . "." . $extensionupload,
                                              "id"=>$_GET['id'] ));
                App::redirect("espace_adherent.php?id=" . $_SESSION['id']);
            } else {
                $erreur = "erreur lors de l'importation de votre photo de profil";
            }

        } else {
            $erreur = " extension de votre photo de profil invalide";
        }

    } else {
        $erreur = " Votre photo de profil ne doit pas dépasser 2 mo ";
    }
}
?>

une partie de code profil.php qui affiche la photo
<header class="header">
<div class="container">

    <form method="post" action="avatar.php?id=<?php echo $id ?>" enctype="multipart/form-data">
        <input type="file" name="avatar">
        <input type="submit" name="upload">
        </form>

    <?php
                if(!empty($data->avatar)){
                    echo "<img class='profile-image img-circle pull-left' src='avatar/".$data->avatar."' width='150' />";

                } else {
                    echo '<img  class="profile-image  img-circle  pull-left" src="avatar/profile.png" width="150" />';//si pas d'avatar, ont en affiche un manuellement.
                }
                ?>

        <div class="profile-content pull-left">
            <h1 class="name"><?php echo stripslashes(htmlspecialchars($data->nom) .'<br>'. ($data->prenom)); ?></h1>

        </div><!--//profile-->
    </form>
    <a class="btn btn-cta-primary pull-right" target="_blank"><i class="fa fa-paper-plane"></i> Contact Me</a>
</div><!--//container-->

</header><!--//header-->



### Ce que je veux
je veux ajouter une photo de profil d'un utilisateur . merci de votre aide :) 

### Ce que j'obtiens

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\wamp\www\assos\class\Database.php on line 14

6 réponses


Dans ton tableau de paramètres, tu passes l'avatar et l'id
alors que l'id tu l'a déjà mis en dur $id
Soit tu retires l'id du tableau de paramètres, soit tu remplaces id=$id par id=:id dans le sql

beyen
Auteur

j'ai corrigé l'erreur . voici une autre erreur sera afficher

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id='1'' at line 1' in C:\wamp\www\assos\class\Database.php on line 14

Tu as une erreur de syntaxe évidente, il te manque une quote après le 1
mais pourquoi tu mets 1 en dur ?
De plus, pas besoin de quote pour un numérique

beyen
Auteur

1 c'est l'id de l'utilisateur recupérer a partir la BD

Ok, mais c'est bien une histoire de quote ?

beyen
Auteur

ok merci bcq Huggy :)