Erreur de syntaxe

Par JPierre74, il y a 4 ans


Bonjour à tous, je suis un grand débutant, j'ai commencé à lire , écouté, et à écrire le code "espace membre", un super tutoriel, merci à Grafikart. Tout fonctionne correctement. J'ai ajouté la partie mise à jour d'un avatar ou photo ou logo ... et là je bloque, si une âme de bonne volonté pourrait me dire la grosse bêtise que je fais , je lui en serai reconnaissant.
Cordialement

voici la page qui sert à uploder et mettre à jour la BD
"
<?php
$target_dir = "fic/photo/"; // dossier où seront déposé les images
$target_file = $target_dir . basename($_FILES["photo"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Vérifier si le fichier image est une image réelle ou fausse image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["photo"]["tmp_name"]);
if($check !== false) {
echo "<h2 class='alert-success'>  Le fichier est une image - " . $check["mime"] . ". </h2>";
$uploadOk = 1;
} else {
echo "<h3 class='alert-danger'>  Le fichier n’est pas une image.</h3>";
$uploadOk = 0;
}
}

// Vérifier si le fichier existe déjà
if (file_exists($target_file)) {
echo "<h3 class='alert-danger'>  Désolé, le fichier existe déjà.</h3>";
$uploadOk = 0;
}

// Vérifier la taille du fichier
if ($_FILES["photo"]["size"] > 500000) {
echo "<h3 class='alert-danger'>  Désolé, votre dossier est trop volumineux.</h3>";
$uploadOk = 0;
}

// Autoriser certains formats de fichiers
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "<h3 class='alert-danger'>  Désolé, seuls les fichiers JPG, JPEG, PNG et GIF sont autorisés.</h3>";
$uploadOk = 0;
}

// Vérifier si $uploadOk est défini à 0 par une erreur
if ($uploadOk == 0) {
echo "<h3 class='alert-danger'>  Désolé, votre fichier n’a pas été téléchargé.</h3>";
// si tout va bien, essayez de télécharger le fichier et de mettre à jour la bd

} else {
if (move_uploaded_file($_FILES["photo"]["tmp_name"], $target_file)) {
require_once 'inc/db.php'; // cnx bd
// sql pour sélectionner le membre à modifier

  $query =  $pdo->prepare('UPDATE membres SET avatar=:avatar  WHERE id =" '.$_SESSION['auth']->id .' ');
 // Liaisopn des paramètres nommés
$query->bindValue(':avatar',  $_POST['photo']);
$query->execute();

echo "<h1 class='alert-success'>Le fichier ". htmlspecialchars( basename( $_FILES["photo"]["name"])). " a été téléchargé.</h1>";

} else {
echo "<h3 class='alert-danger'>  Désolé, il y a eu une erreur de téléchargement de votre fichier.</h3>";
}
}

?>
"
Le message d'erreur:
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 MariaDB server version for the right syntax to use near '" 10' at line 1' in /home/users3/h/hww2897/www/dev/contact-mb/upload.php:69 Stack trace: #0 /home/users3/h/hww2897/www/dev/contact-mb/upload.php(69): PDOStatement->execute() #1 {main} thrown in /home/users3/h/hww2897/www/dev/contact-mb/upload.php on line 69

La ligne 69 correspont à $query->execute();

Merci de votre aide

9 réponses

Carouge10, il y a 4 ans

bonjour.
pas de session start ?
pourquoi l'id n'est pas lui aussi binder ?

pour insérer ton code correctement. utilise les balises du markdown les backstick si je me trompe

devdox, il y a 4 ans

demmare la session aussi tout depuis de la page

if(session_status() == PHP_SESSION_NONE){ session_start(); } $query = $pdo->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id '); // Liaisopn des paramètres nommés $query->execute([ 'avatar' => ..., 'id' => $_SESSION['auth']->id ]);

JPierre74, il y a 4 ans

Merci pour vos réponses, j'ai oublié de dire quand début de page j'avais ce code pour lancer la session
"" <?php session_start(); require_once 'inc/functions.php'; logged_only(); ?> <?php require 'inc/header_espace.php'; ?> ""
Le code que j'ai modifié delon "devox"
"```"
{
if (move_uploaded_file($_FILES["photo"]["tmp_name"], $target_file)) {
// sql pour sélectionner le membre à modifier
require_once 'inc/db.php'; // cnx une fois seulement
$query = $pdo->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id ');
// Liaison des paramètres nommés
$query->execute([ 'avatar' => $_POST['photo'], 'id' => $_SESSION['auth']->id ]);
echo "<h1 class='alert-success'>Le fichier ". htmlspecialchars( basename( $_FILES["photo"]["name"])). " a été téléchargé.</h1>";

} else {
echo "<h3 class='alert-danger'>  Désolé, il y a eu une erreur de téléchargement de votre fichier.</h3>";
}
}
"```"
plus d'érreur de syntax, le fichier est bien posé dans le bon dossier (fic/photo/), mais le nom du fichier ne figure pas dans le champ "avatar' de la table , aurai-je oublié quelques chose?

devdox, il y a 4 ans

Stp format le code c dure a lire comme ca

utilise plutot
$target_file // au lieu de $_POST['photo']

JPierre74, il y a 4 ans

Super devvox, ça marche bien, upload -> Ok, bd ->Ok.
J'ai remarqué la chose suivante, comme tout est OK, la photo devrait s'afficher, elle ne s'affiche que lorsque on se déconnecte et reconnecte.
Question peut régler ou pas ce problème ? Est-ce normal, cela est peut être du au fait que l'on garde en mémoire une session active?
Merci pour le temps que vous m'avez accorder, je suis vraiment debutant, excusez moi encore...

devdox, il y a 4 ans

apres ta req met a jour ta session avatar j´imagine c comme ca tu l´affiche $_session['avatar'] ?

tu fait $_SESSION['avatar'] = $target_file;

pas de soucis. :*-

JPierre74, il y a 4 ans

Cool, ça marche bien, merci beaucoup devox.

devdox, il y a 4 ans

C'est cool pense a convertir en .webp par exemple, compressé tes images reduire leur tailles pour la performance 😙

JPierre74, il y a 3 ans

Ok, mais là il faut que je trouve un tuto qui m'explique comment le mettre en oeuvre :), je ne connaissais pas ce type de format, c'est Google qui souhaite l'imposer, comme Adobe souhaite imposer le format DNG. Je pense qu'il y a une fonction en php qui le permet?