Bonjour,
Voila je rencontre un petit problème avec mon code. voilà une portion du formulaire<form method="POST" action="" enctype="multipart/form-data">
<div class="form-group">
<label>Catégorie</label>
<select name="categorie" class="form-control">
<option value="Maison">Maison</option>
<option value="Appartement">Appartement</option>
<option value="Chambre">Chambre</option>
<option value="Magasin">Magasin</option>
<option value="Terrain">Terrain</option>
</select>
</div>
<div class="form-group">
<div class="checkbox">
<label>
<input type="checkbox" name="choix[]" value="A vendre">A vendre
</label>
<label>
<input type="checkbox" name="choix[]" value="A louer">A louer
</label>
</div>
</div><br><br>
Et coté PHP je veux enregistrer comme ça:
juste une petite portion
$categorie = $_POST['categorie'];
$choix = $_POST['choix'];
Enfin quand je fais une requête pour insérer tout dans ma base
$req= $pdo->prepare('INSERT INTO `posts`(`id_post`, `post_categorie_id`, `post_titre`, `post_date`, `photo`, `post_content`, `choix`, `post_view`, `prix`, `adresse`,`categorie`) VALUES (?,?,?,?,?,?,?,?,?,?,?)');around$req->execute(array(NULL,NULL, $titre,NULL,$fichier,$commentaires, $_POST['choix'], $post_view, $prix, $adresse, $categorie ));
On me signale cette erreur:
Notice: Array to string conversion in C:\wamp\www\site\forms.php on line 248
Et je signale que la ligne 248 est la dernière ligne, c'est à dire celle de $categorie.
Aidez-moi SVP!!!
L'erreur ne viendrait pas du fait que tu fournis un "id_post" à null alors que le champ est en auto-increment ?
Ta variable $_POST['choix'] est un tableau et tu ne peux pas enregistrer un tableau en base de données
Oui et donc comment je vais enregistrer mes valeurs? JE signale que dans la base de donnée l'index s'appel choix
Voici le résultat du var_dump($_POST)```
array (size=6)
'categorie' => string 'Maison' (length=6)
'choix' =>
array (size=1)
0 => string 'A louer' (length=7)
'post_titre' => string 'nnn' (length=3)
'prix' => string '45541' (length=5)
'adresse' => string 'vb' (length=2)
'post_content' => string 'fg' (length=2)
Donc, si on transforme en tableaur
$_POST = [
'categorie' => Maison',
'choix' => [ // Tableau !!!!!
0 => 'A louer'
],
'post_titre' => 'nnn',
'prix' => '45541',
'adresse' => 'vb',
'post_content' => 'fg'
];
Comme tu peux le voir, seul le "choix" est un tableau, tu dois donc faire en sorte d'avoir un string.
Oui donc je vais faire un
$choix = $_POST['choix'];
$choix = implode(',' , $choix);
pour l'enregistrer dans la bdd puis le reconvertir avec
$choix = explode(',' , $choix)
Du moment que les données s'enregistrent bien en base de données, tu peux choisir le séparateur (ou la glue, selon la doc de PHP)
Bon j'ai remis le implode en mettant dans la requete un $choix au lieu de $_POST['choix'}
$req= $pdo->prepare('INSERT INTO `posts`(`id_post`, `post_categorie_id`, `post_titre`, `post_date`, `photo`, `post_content`, `choix`, `post_view`, `prix`, `adresse`, `categorie`) VALUES (?,?,?,?,?,?,?,?,?,?,?)');
$req->execute(array(NULL,NULL, $titre,$date,$fichier, $commentaires,$choix,$post_view, $prix,$adresse, $categorie ));
L'erreur disparait certes mais en affiche une autre
Fatal error: in C:\wamp\www\site\forms.php on line 245
PDOException: in C:\wamp\www\site\forms.php on line 245
La ligne 245 est la ligne de l'execution de la requete.
Pourquoi tout le monde sur ce site croit qu'on est des magiciens ? Comment veux-tu qu'on t'aides si tu ne postes pas ton problème (précis) ? Dans ce cas, le message de l'exception est nécessaire pour résoudre ton problème.
C'est quoi ton problème o juste? Qui te croit magicien toi?
Faut savoir parler aux gens sinon c mieux de se taire.
ish
Bonjour.
Les messages d'erreurs que tu nous fournis ne sont pas assez précis.
D'aiileurs, si des données ne sont pas obligatoires pour l'insertion dans ta table, il est inutile de vouloir les définir dans ta requête SQL.
Il n'est pas impossible que tu aies une erreur concernant des données que tu passes dans la requête, mais sans message d'erreur précis, nous ne pourrons pas t'aider.
Tu devrais définir un ERRMODE_WARNING
ou un ERRMODE_EXCEPTION
et si possible, pendant tes essaies en développement, faire un try catch
en utilisant la methode getMessage
de PDOException
.
Bonjour Lartak.
Voici mon code
<div class="col-md-6">
<form method="POST" action="" enctype="multipart/form-data">
<div class="form-group">
<label>Catégorie</label>
<select name="categorie" class="form-control">
<option value="maison">Maison</option>
<option value="appartement">Appartement</option>
<option value="chambre">Chambre</option>
<option value="magasin">Magasin</option>
<option value="terrain">Terrain</option>
</select>
</div>
<div class="form-group">
<div class="checkbox">
<label>
<input type="checkbox" name="choix[]" value="A vendre">A vendre
</label>
<label>
<input type="checkbox" name="choix[]" value="A louer">A louer
</label>
</div>
</div>
<div class="form-group">
<label>Titre</label>
<input class="form-control" name="post_titre" placeholder="Ex: Chez M.X">
</div>
<div class="form-group">
<label>Prix</label>
<input class="form-control" name="prix" placeholder="Ex: 450 000 FCFA">
</div>
<div class="form-group">
<label>Adresse</label>
<input class="form-control" name="adresse" placeholder="Ex: Mermoz">
</div>
<div class="form-group">
<label>Photo</label>
<input type="file" name="photo">
<p class="help-block">Ajouter une photo à votre article.</p>
</div>
<div class="form-group">
<label>Commentaires</label>
<textarea class="form-control" name='post_content' rows="3"></textarea>
</div>
<button type="submit" class="btn btn-primary">Charger</button>
<button type="reset" class="btn btn-danger">Annuler</button>
</div>
</form>
</div>
</div>
Coté PHP
<?php
if ($_POST) {
var_dump($_POST);
var_dump($_FILES);
$post_view = 2;
$date = date("l F jS, Y - g:ia", time());
$categorie = $_POST['categorie'];
$choix = $_POST['choix'];
$choix = implode(',' , $choix);
$titre = $_POST['post_titre'];
$prix = $_POST['prix'];
$adresse = $_POST['adresse'];
$commentaires = $_POST['post_content'];
$photo_error = $_FILES['photo']['error'];
$photo_name = $_FILES['photo']['name'];
$photo_type = $_FILES['photo']['type'];
$photo_tmp_name = $_FILES['photo']['tmp_name'];
$photo_size = $_FILES['photo']['size'];
$extensionUpload = strtolower(substr(strrchr($_FILES['photo']['name'], '.'), 1));
var_dump($choix);
$array_types_images = array('image/png', 'image/jpg','image/jpeg','image/bmp', 'image/gif');
$taille_max= 1048576;
if ($photo_error ==0) {
if ($photo_size <= $taille_max) {
if (in_array($photo_type, $array_types_images)) {
//$chemin = getcwd(); si on transferait notre site dans une
// autre machine, on aura l'adresse de la photo exacte
$id = $photo_name;
$fichier = $id. ".". $extensionUpload;
$chemin = "../images/portfolio" .$id. ".".$extensionUpload;
if( move_uploaded_file($_FILES['photo']['tmp_name'], $chemin)){
echo "<img src='$chemin' alt='Photo immobilier' width='250px' height='250px'>";
require_once 'config.php';
$req= $pdo->prepare('INSERT INTO `posts`(`id_post`, `post_categorie_id`, `post_titre`, `post_date`, `photo`, `post_content`, `choix`, `post_view`, `prix`, `adresse`, `categorie`)
VALUES (?,?,?,?,?,?,?,?,?,?,?)');
$req->execute(array(NULL,NULL, $titre,$date,$fichier, $commentaires,$choix,$post_view, $prix,$adresse, $categorie ));
echo $req. '<br>';
print_r( $req). '<br>';
var_dump( $req). '<br>';
if ($req) {
echo "<h2 style='color:green'>Successful: </h2>";
}else echo "<h2 style='color:red'>Error:</h2>";
}
}else echo "Format invalide, veuillez choisir un fichier jpg, jpeg, png, bmp ou gif";
}else echo "Taille trop grande";
}else echo "Erreur de chargement du fichier";
}
?>
C'est bien de fournir plus de code, mais dans ce cas là, ce qui nous aiderait plus par exemple, ce serait la structure de la table concernée par la requête et je le dit une fois de plus, des messages d'erreurs plus précis en rapport avec la requête.
Oui j'ai supprimé le post_id de la requete et laisser mysql le gérer seul... Et maintenant ça marche...
MErci beaucoup....