[RESOLU] Inscription en bas de données (Notice: Array to string conversion)

Petit nouveau ! | 7 Messages

29 déc. 2015, 21:40

Bonjour à tous,

Voilà mon problème, j'ai un champs commentaire et je veux inscrire le commentaire de l'internaute en base je reçois systématiquement le message d'erreur suivant :

"Notice: Array to string conversion in C:\wamp\www\PHP\TP3\lokireservation_detail.php on line 66"
(la ligne 66 correspond à ma requête SQL :"$mysqli->query("REPLACE INTO avis (id_membre, id_salle, commentaire, note, date) VALUES ('$_SESSION[membre][id_membre]', '$salle_choisie[id_salle]', '$_POST[commentaire]', '$_POST[note]', now())");)

Voici mon code
<?php
$produit_demande=$mysqli->query("SELECT * FROM produit WHERE id_produit = '$_GET[id_produit]'");
$salle_demandee=$mysqli->query("SELECT * FROM salle INNER JOIN produit ON salle.id_salle = produit.id_salle");
$avis_demande=$mysqli->query("SELECT * FROM avis INNER JOIN produit ON avis.id_salle = produit.id_salle");

$produit_choisi = $produit_demande->fetch_assoc();
$avis_choisie = $avis_demande->fetch_assoc()
$salle_choisie = $salle_demandee->fetch_assoc();



var_dump($_SESSION);
var_dump($salle_choisie);
var_dump($_POST);

echo '<div class="blocpage">';
	if(!InternauteEstConnecte()){
		echo '<a href="connexion.php">connectez-vous pour laisser un commentaire</a>';
		}else{
				echo '<form method="post" action="">';
				echo '<p><label for="Commentaire">Ajouter un commentaire</label></p>';
				echo '<p><input type="text" id="commentaire" name="commentaire" style="width:200px; height:150px;"></p>';
				echo '<p><label for="note">Notez nous sur une échelle de 1 à 10 : </label></p>';
				echo '<p><input type="number" min="0" max="10" id="note" name="note" style="width:30px; height:15px;"> /10</p>';
				echo '<p><input type="submit" name="validation_commentaire" value="soumettre"></p>';
				echo '</form>';
				if($_POST){
					$mysqli->query("REPLACE INTO avis (id_membre, id_salle, commentaire, note, date) VALUES ('$_SESSION[membre][id_membre]', '$salle_choisie[id_salle]', '$_POST[commentaire]', '$_POST[note]', now())");
				}
			}	
			
echo '</div>';						
echo '<div class="blocpage">';
if($avis_choisie['note']){
	echo  'Note : ' . $avis_choisie['note']. '/10';
}else{
	echo 'Pas encore d\'avis sur cette salle';
}
echo '</div>';			
?>
Voici ce que me donne les var_dump de $_SESSION; '$salle_choisie; $_POST

Code : Tout sélectionner

array (size=1) 'membre' => array (size=11) 'id_membre' => string '1' (length=1) 'pseudo' => string 'Laurent' (length=7) 'mdp' => string 'f817e4c76c91b9d3cc6d88cbf033651b' (length=32) 'nom' => string 'Laurent' (length=7) 'prenom' => string 'Laurent' (length=7) 'email' => string '[email protected]' (length=18) 'sexe' => string 'm' (length=1) 'ville' => string 'Ermont' (length=6) 'cp' => string '0' (length=1) 'adresse' => string '400 Rue Paul Bert' (length=17) 'statut' => string '0' (length=1) array (size=16) 'id_salle' => string '1' (length=1) 'pays' => string 'France' (length=6) 'ville' => string 'Paris' (length=5) 'adress' => string '10 Rue des peuplier' (length=19) 'cp' => string '75' (length=2) 'titre' => string 'Saint Duval' (length=11) 'description' => string 'Jolie Salle' (length=11) 'photo' => string '/PHP/TP3/images/salle100x100.jpg' (length=32) 'capacite' => string '50' (length=2) 'categorie' => string 'reunion' (length=7) 'id_produit' => string '1' (length=1) 'date_arrivee' => string '2016-03-22 09:00:00' (length=19) 'date_depart' => string '2016-03-25 18:00:00' (length=19) 'id_promo' => null 'prix' => string '300' (length=3) 'etat' => string '0' (length=1) array (size=0) empty
$_POST(le dernier) est vide car je n'ai rien rempli dans les champs. Je pense que mon code ne me renvoie pas le bon type car tout est en "string".

D'avance merci

Laurent

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

30 déc. 2015, 01:39

Bonjour,

Fais un var_dump de chacune des variables passées en paramètre à la ligne 66 et tu verras bien laquelle est un array et pas un string
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 7 Messages

30 déc. 2015, 14:08

Bonjour,

Déjà hier j'ai fait une petite erreur soxy95 c'est la même personne que Soxy... désolé

Donc j'ai fait un var_dump de toutes les variables que je veux inscrire en base et elles sont toutes de type string

Image

Le premier correspond à : var_dump($_SESSION['membre']['id_membre']);
Le deuxième correspond à : var_dump($salle_choisie['id_salle']);
Le troisième correspond à : var_dump($_POST['commentaire']);
Le quatrième correspond à : var_dump($_POST['note']);
.... et toujours mon :" Notice: Array to string conversion "

Je me demande si le problème ne pourrait pas venir de la fonction now()... Mais je n'y crois pas pas....

Petit nouveau ! | 7 Messages

30 déc. 2015, 14:13

En version clickable car c'était un peu petit....

Image

Eléphant du PHP | 385 Messages

30 déc. 2015, 17:11

Bonjour,

La fonction now() est censé te renvoyer la date courante essaye de stocker la valeur de ta fonction dans une variable et utilise cette variable dans la requête pour voir si le problème vient de là.

Eléphanteau du PHP | 16 Messages

30 déc. 2015, 18:01

Salut,

C'est plutôt un simple problème de concaténation. Regarde cet exemple avec ta syntaxe qui donne la même erreur ;)

Code : Tout sélectionner

$test = array(); $test['membre'] = array(); $test['membre']['id'] = 1; echo "'$test[membre][id]'";
A mon sens, il est préférable d'adopter une écriture avec un sprintf

Code : Tout sélectionner

$sql = "REPLACE INTO avis (id_membre, id_salle, commentaire, note, date) VALUES (%s, %s, %s, %s, now())" $sql = sprintf($sql, $_SESSION['membre']['id_membre'], $salle_choisie['id_salle'], $_POST['commentaire'], $_POST['note']);
ou une concaténation plus simple

Code : Tout sélectionner

$mysqli->query("REPLACE INTO avis (id_membre, id_salle, commentaire, note, date) VALUES ('".$_SESSION['membre']['id_membre']."', '".$salle_choisie['id_salle']."', '".$_POST['commentaire']."', '".$_POST['note']."', now())");

Petit nouveau ! | 7 Messages

30 déc. 2015, 19:22

Salut

Je te le fais où le bisous ?
Merci beaucoup ça fonctionne. =D>