Bonjour,

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

Ce que je fais

Je fais un actuellement un projet en php et je voudrais upload des images sur ma base de donnée.

<?php
require_once 'db.php';
require_once 'header.php';

if (!empty($_FILES['photo']) && !empty($_POST['immatriculation']) && !empty($_POST['marque']) && !empty($_POST['prix'])) {
    $immatriculation = $_POST['immatriculation'];
    $marque = $_POST['marque'];
    $prix = $_POST['prix'];
    $photo = $_POST['photo'];
    $file_name = $_FILES['photo']['name'];
    $file_extension = strchr($file_name, ".");

    $file_tmp_name = $_FILES['photo']['tmp_name'];
    $file_dest = 'files/' . $file_name;

    $extensions_autorisees = array('jpg', 'jpeg', 'png');

    if (in_array($file_extension, $extensions_autorisées)) {
        if (move_uploaded_file($file_tmp_name, $file_dest)) {
            $sql = 'INSERT INTO automobile(`Immatriculation`, `Marque`, `Prix`, `Photo`) VALUES(:marque, :immatriculation, :prix, :photo)';
            if ($statement = $dbh->prepare($sql)) {
                $statement->bindParam(':immatriculation', $immatriculation, PDO::PARAM_STR);
                $statement->bindParam(':marque', $marque, PDO::PARAM_STR);
                $statement->bindParam(':prix', $prix, PDO::PARAM_STR);
                $statement->bindParam(':photo', $photo, PDO::PARAM_STR);
                if ($statement->execute()) {
                    $message = 'données envoyées avec succés';
                }
            } else {
                echo 'Une erreur est survenue lors de l\'envoie du fichier';
            }
        } else {
            echo 'Seuls les fichiers jpg, jpeg et png sont autorisés';
        }
    }
}
?>
<div class="card bg-info mt-5 col-8">
    <div class="card-header">
        <h2>Créer votre annonces</h2>
    </div>
    <div class="card-body">
        <?php if (!empty($message)) : ?>
            <div class=" text-center alert alert-success">
                <?= $message ?>
            </div>
        <?php endif; ?>
        <form method="POST" enctype="multipart/form-data">
            <div class="form-group">
                <label for="name">Marque</label>
                <input type="text" name="marque" id="marque" class="form-control">
            </div>
            <div class="form-group">
                <label for="mail">Immatriculation</label>
                <input type="text" name="immatriculation" id="immatriculation" class="form-control">
            </div>
            <div class="form-group">
                <label for="mail">Prix</label>
                <input type="number" name="prix" id="prix" class="form-control">
            </div>
            <div class="form-group">
                <label for="mail">Image</label>
                <input type="file" name="photo" id="image" class="form-control">
            </div>
            <div class="form-group">
                <input type="submit" value="Valider" class="btn btn-success">
            </div>
        </form>
    </div>
</div>
</div> 

Ce que j'obtiens

Malheuresement rien ne s'affiche sur ma bdd.

15 réponses


Bonsoir,
1/ pas d'accents dans les noms de variables
2/ Actives les erreurs PDO (cf la doc)
3/ A quel moment fais-tu $photo = ? ( idem pour $marque, $prix, $immatriculation)

J'ai pu modifiez certaines choses du code mais rien ne s'affiche.

nouveau code ?
qu'est ce que tu n'as pas fait dans ce que je t'ai demandé ?

J'ai retiré l'accent, j'ai remis les variables au debut mais je n'arrive pas à activé les erreurs php

le nouveau, code je dois le deviner ?
Poste ton nouveau code pour voir si tu n'as pas fait d'erreur, merci.

Je l'ai modifié sur le post en haut

ah oui comme ça je passe pour un idiot, c'est gentil. Le fil de la conversation ne veux plus rien dire. Merci
On post le nouveau code dans un nouveau message, comme ça on peut suivre les modifications

$_POST['photo'] n'existe pas puisque l'input est de type file.
Donc $photo devrait correspondre à autre chose ($file_name, non ?)

Autant pour moi c'est mon problème que je post sur un forum.

if (!empty($_FILES['photo']) && !empty($_POST['immatriculation']) && !empty($_POST['marque']) && !empty($_POST['prix'])) {
    $immatriculation = $_POST['immatriculation'];
    $marque = $_POST['marque'];
    $prix = $_POST['prix'];
    $photo = $_FILES['photo'];
    $file_name = $_FILES['photo']['name'];
    $file_extension = strchr($file_name, ".");

    $file_tmp_name = $_FILES['photo']['tmp_name'];
    $file_dest = 'files/' . $file_name;

    $extensions_autorisees = array('jpg', 'jpeg', 'png');

    if (in_array($file_extension, $extensions_autorisées)) {
        if (move_uploaded_file($file_tmp_name, $file_dest)) {
            $sql = 'INSERT INTO automobile(`Immatriculation`, `Marque`, `Prix`, `Photo`) VALUES(:marque, :immatriculation, :prix, :photo)';
            if ($statement = $dbh->prepare($sql)) {
                $statement->bindParam(':immatriculation', $immatriculation, PDO::PARAM_STR);
                $statement->bindParam(':marque', $marque, PDO::PARAM_STR);
                $statement->bindParam(':prix', $prix, PDO::PARAM_STR);
                $statement->bindParam(':photo', $photo, PDO::PARAM_STR);
                if ($statement->execute()) {
                    $message = 'données envoyées avec succés';
                }
            } else {
                echo 'Une erreur est survenue lors de l\'envoie du fichier';
            }
        } else {
            echo 'Seuls les fichiers jpg, jpeg et png sont autorisés';
        }
    }
}

j'ai remis $photo = $_FILES['photo']

et $_FILES['photo'], il vaut quoi ?
un petit var_dump($_FILES['photo'] ..... pour te donner une idée
As-tu activé les erreurs PDO (cf la doc de new PDO)

j'ai ça comme résultat du dump:
array(5) { ["name"]=> string(10) "classA.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpq5UMyL" ["error"]=> int(0) ["size"]=> int(47856) }.
Mais je viens de remarquer que le var_dump ne fonctionne pas quand je rentre dans le second if.

Oui je l'ai activé

oui car tu n'as pas corrigés les accents dans les noms de variables
ensuite tu ne vas pas mettre un "array" dans $photo....

if (!empty($_FILES['photo']) && !empty($_POST['immatriculation']) && !empty($_POST['marque']) && !empty($_POST['prix'])) {
    $immatriculation = $_POST['immatriculation'];
    $marque = $_POST['marque'];
    $prix = $_POST['prix'];
    $photo = $_FILES['photo'];
    $file_name = $_FILES['photo']['name'];
    $file_extension = strchr($file_name, ".");

    $file_tmp_name = $_FILES['photo']['tmp_name'];
    $file_dest = 'files/' . $file_name;

    $extensions_autorisees = array('jpg', 'jpeg', 'png');

    if (in_array($file_extension, $extensions_autorisees)) {

        if (move_uploaded_file($file_tmp_name, $file_dest)) {
            $sql = 'INSERT INTO automobile(`Immatriculation`, `Marque`, `Prix`, `Photo`) VALUES(:marque, :immatriculation, :prix, :photo)';
            if ($statement = $dbh->prepare($sql)) {
                $statement->bindParam(':immatriculation', $immatriculation, PDO::PARAM_STR);
                $statement->bindParam(':marque', $marque, PDO::PARAM_STR);
                $statement->bindParam(':prix', $prix, PDO::PARAM_STR);
                $statement->bindParam(':photo', $photo, PDO::PARAM_STR);
                if ($statement->execute()) {
                    $message = 'données envoyées avec succés';
                }
            } else {
                echo 'Une erreur est survenue lors de l\'envoie du fichier';
            }
        } else {
            echo 'Seuls les fichiers jpg, jpeg et png sont autorisés';
        }
    }else{
        echo'faux';
    }
}

je ne rentre pas dans la seconde condition

que dises les logs du serveur ?

Merci de ton aide, je reprendrai mon code demain