Bonjour,
Voila je rencontre un petit problème avec mon code.
<form action="ajouter.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="size" value="1000000">
<div class="form-group">
<label class="control-label col-lg-12">Téléchargement d'image extensions autorisées (png, jpeg, jpg, gif).</label>
<input type="file" name="image" class="btn-upload">
<?php
if (isset($_FILES['image']) AND $_FILES['image']['error'] == 0)
{
if ($_FILES['image']['size'] <= 1000000)
{
$fichier = pathinfo($_FILES['image']['name']);
$extension_upload = $fichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png', 'JPG', 'JPEG');
if (in_array($extension_upload, $extensions_autorisees))
{
move_uploaded_file($_FILES['image']['tmp_name'], '../img/produits/' . basename($_FILES['image']['name']));
$requete = $bdd->prepare('INSERT INTO products(image) VALUES (?)') or exit(print_r($bdd->errorInfo()));
$requete->execute(array($_FILES['image']['name']));
}else{
$erreur = "un problème de téléchargement est survenu !!";
}
}
}
?>
</div>
<div class="form-group">
<label>Nom du produit</label>
<input type="text" name="name" id="name" class="form-control">
</div>
<div class="form-group">
<label>Description du produit</label>
<textarea name="description" id="description" class="form-control" rows="3"></textarea>
</div>
<div class="form-group">
<label>Prix du produit Junior</label>
<input type="text" name="priceJ" id="priceJ" class="form-control"><br>
</div>
<div class="form-group">
<label>Prix du produit Adulte</label>
<input type="text" name="priceA" id="priceA" class="form-control"><br>
</div>
<?php
if(isset($_POST['name']) AND isset($_POST['description']) AND isset($_POST['priceA']) AND isset($_POST['priceJ']))
{
$requete = $bdd->prepare('INSERT INTO products(name, description, priceA, priceJ,) VALUES (?, ?, ?, ?)');
$requete->execute(array($_POST['name'],$_POST['description'],$_POST['priceA'],$_POST['priceJ']));
}
?>
<input type="submit" class="btn btn-primary" id="ajouter" name="ajouter" value="Ajouter">
</form>
<?php if (isset($erreur)) { echo $erreur;} ?>
Comme vous pouvez le voir j'ai un formulaire pour insérer des données dans une base.
Dans le formulaire j'ai un upload d'image.
Quand je soumet le formulaire rempli avec une photo il n'y a que le nom de la photo qui est inséré.
Comment combiner les deux ?
merci
C'est pas l'upload qui ne fonctionne pas c'est l'autre INSERT INTO
Ah,
peut-être à cause de la virgule après priceJ
.
Je ne vois pas comment faire pour combiner les deux.
Effectivement là, les 2 INSERT
créeront 2 "id" différents en BDD, pour le même "produit", et ce n'est pas bon.
Bon alors, il faut juste imbriquer toutes les conditions, et si elles sont toute respectées, on fait un seul INSERT
:
<?php
if (in_array($extension_upload, $extensions_autorisees))
{
if (isset($_POST['name']) &&
isset($_POST['description']) &&
isset($_POST['priceA']) &&
isset($_POST['priceJ']) &&
move_uploaded_file($_FILES['image']['tmp_name'], '../img/produits/' . basename($_FILES['image']['name']))
{
$requete = $bdd->prepare('INSERT INTO products(name, description, priceA, priceJ, image) VALUES (?, ?, ?, ?, ?)') or exit(print_r($bdd->errorInfo()));
$requete->execute(array($_POST['name'], $_POST['description'], $_POST['priceA'], $_POST['priceJ'], $_FILES['image']['name']));
else
{
$erreur = "Un problème de téléchargement est survenu !!";
}
}
else
{
$erreur = "Formats autorisés : jpg, png, gif";
}
?>
À modifier un peu pour l'adapter comme tu le souhaite.
Salut,
Il faut insérer en BDD le même "chemin" où tu as upoad l'image.
<?php
...
$image_path = '../img/produits/' . basename($_FILES['image']['name']);
// upload de l'image
move_uploaded_file($_FILES['image']['tmp_name'], $image_path);
// enregistre le chemin en BDD
$requete = $bdd->prepare('INSERT INTO products(image) VALUES (?)') or exit(print_r($bdd->errorInfo()));
$requete->execute(array($image_path));
...
?>
Salut,
Plutôt que d'insérer le chemin de ton image, tu peux également insérer uniquement le nom de ton image, et créer un dossier ayant comme nom l'id de ton produit. Ce sera plus simple à organiser et à aller récupérer (selon moi). Ou encore organiser en dossiers 'année/mois'.
Enfin après tu fais comme tu veux, mais de mon point de vue il est plus simple (et plus économe en ressources) de stocker uniquement le nom du fichier.
Par contre si tu as plusieurs images à stocker pour un même produit, là il faut revoir ton système ;)
Salut,
C'est pas l'upload qui ne fonctionne pas c'est l'autre INSERT INTO, celui qui gére l'insertion des autres données.
Le nom de l'image est bien entrée dna sla base mais pas les autres infos.
Je ne vois pas comment faire pour combiner les deux.
salut j'ai fait modifié mais il y a une erreur dans le code je ne la trouve pas :
<?php
$ext = substr(strrchr($_FILES[$index]['name'],'.'),1);
$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
if (in_array($ext, $extensions_valides)) {
if (isset($_POST['name']) AND isset($_POST['description']) AND isset($_POST['priceA']) AND isset($_POST['priceJ']) AND
move_uploaded_file($_FILES['image']['tmp_name'], '../img/produits/'.basename($_FILES['image']['name'])){
$requete = $bdd->prepare('INSERT INTO products(name, description, priceA, priceJ, image) VALUES (?, ?, ?, ?, ?)');
$requete->execute(array($_POST['name'], $_POST['description'], $_POST['priceA'], $_POST['priceJ'], $_FILES['image']['name']));
}else{
$erreur = "Un problème de téléchargement est survenu !!";
}else{
$erreur = "Formats autorisés : jpg, png, gif";
}
}
?>
merci
bool(false) voilà
Ah ben voilà !
le 1 dans substr ne me parait pas bon.
Je me suis trompé, il n'y a rien d'anormal.