Bonjour à tous !

Je sollicite votre aide sur ce bout de code qui me sert à mettre à jour la quantité de produits ainsi que le prix total de ma table:
$Fr_Pseudo = $_SESSION["Connexion"]["user_log"]['Pseudo'];
$Fr_Date = strftime("%Y-%m-%d");
$Fr_Valider = "1";
$Fr_NumId = !empty($_POST['Fr_NumId']) ? $_POST['Fr_NumId'] : NULL;
$array_lib = !empty($_POST['Fr_Libelle']) ? $_POST['Fr_Libelle'] : NULL;
$array_qte = !empty($_POST['Fr_Quantite']) ? $_POST['Fr_Quantite'] : 0;
$array_tot = !empty($_POST['Fr_PrixTotal']) ? $_POST['Fr_PrixTotal'] : 0;
try
	{
	$FR_PDO = $pdo->prepare("UPDATE tb_user_voucher_test SET Libelle=:array_lib, Quantite=:array_qte, PrixTotal=:array_tot, Valider=:Fr_Valider WHERE NumId = '" . $Fr_NumId . "' ");
	foreach($array_lib as $key => $value)
		{
		if ($array_qte[$key] <> 0)
			{
			$FR_PDO->bindParam(":array_lib", $value);
			$FR_PDO->bindParam(":array_qte", $array_qte[$key]);
			$FR_PDO->bindParam(":array_tot", $array_tot[$key]);
			$FR_PDO->bindParam(":Fr_Valider", $Fr_Valider);
			$FR_PDO->execute();
			}
		}
	}

catch(PDOException $e)
	{
	echo "Erreur: " . $e->getMessage();
	}
Je rencontre un problème au niveau du NumId qui me dit
Notice: Array to string conversion


J'ai beau cherché mais en vain, pouvez-vous m'aider svp ?

Cordialement.
Visiblement ta variable $_POST['Fr_NumId'] est de type array.
Lorsque tu la concatènes dans ta requête SQL, PHP la transforme en string.

Vérifies que tu n'aies pas mis des [] dans ton formulaire html.
Il faut que ce soit écrit <input type="text" name="Fr_NumId"> et pas <input type="text" name="Fr_NumId[]">

Pour mieux comprendre ce que contient $_POST['Fr_NumId'] tu peux faire un echo var_dump($_POST['Fr_NumId']);
Modifié par taspeur (18 Dec 2017 - 15:01)
Merci taspeur pour ton aide !

En effet, c'était comme ceci
<input type="text" name="Fr_NumId[]" id="Fr_NumId_<?php echo $i;?>" value="<?php echo $data["NumId"]; ?>" >
et lorsque j'ai mis à jour il a enregistré la dernière ligne uniquement en sautant les autres.
Comment faire la boucle dans ce cas ?
Modifié par Sinistrus (18 Dec 2017 - 15:05)
Voici le code source de ma page si cela peut aider :
<input type="text"     name="Fr_Libelle[]"     id="Fr_Libelle_0"     value="Crème défrisante SOFT-HAIR noir - Pot de 150ml" >
<input type="text"     name="Fr_NumId"         id="Fr_NumId"         value="1" >
<input type="number"   name="Fr_Quantite[0]"   id="Fr_Quantite_0"    value="2">
<input type="text"     name="Fr_PrixUnit[0]"   id="Fr_PrixUnit_0"    value="500">
<input type="text"     name="Fr_PrixTotal[0]"  id="Fr_PrixTotal_0"   value="800">

<br><br><br>

<input type="text"     name="Fr_Libelle[]"     id="Fr_Libelle_1"     value="Déodorant AVIATOR Authentic - Flacon spray de 200ml" >
<input type="text"     name="Fr_NumId"         id="Fr_NumId"         value="3" >
<input type="number"   name="Fr_Quantite[1]"   id="Fr_Quantite_1"    value="3">
<input type="text"     name="Fr_PrixUnit[1]"   id="Fr_PrixUnit_1"    value="1500">
<input type="text"     name="Fr_PrixTotal[1]"  id="Fr_PrixTotal_1"   value="3600">

<br><br><br>

<input type="text"     name="Fr_Libelle[]"     id="Fr_Libelle_2"     value="Eau de Toilette AVIATOR Code - Vaporisateur de 100ml" >
<input type="text"     name="Fr_NumId"         id="Fr_NumId"         value="5" >
<input type="number"   name="Fr_Quantite[2]"   id="Fr_Quantite_2"    value="4">
<input type="text"     name="Fr_PrixUnit[2]"   id="Fr_PrixUnit_2"    value="6500">
<input type="text"     name="Fr_PrixTotal[2]"  id="Fr_PrixTotal_2"   value="20800">

<br><br><br>

<input type="text"     name="Fr_Libelle[]"     id="Fr_Libelle_3"     value="Crème de rasage SIVODERM - Tube de 150g" >
<input type="text"     name="Fr_NumId"         id="Fr_NumId"         value="7" >
<input type="number"   name="Fr_Quantite[3]"   id="Fr_Quantite_3"    value="5">
<input type="text"     name="Fr_PrixUnit[3]"   id="Fr_PrixUnit_3"    value="1000">
<input type="text"     name="Fr_PrixTotal[3]"  id="Fr_PrixTotal_3"   value="4000">
Ok, du fait que tu aies besoin de plusieurs id, c'est normal que tu aies les crochets dans ton input name.

Remets les [] dans ton html et utilises ce code php à la place :
<?php
$Fr_Pseudo  = $_SESSION["Connexion"]["user_log"]['Pseudo'];
$Fr_Date    = strftime("%Y-%m-%d");
$Fr_Valider = "1";
$Fr_NumId   = !empty($_POST['Fr_NumId']) ? $_POST['Fr_NumId'] : array();
$array_lib  = !empty($_POST['Fr_Libelle']) ? $_POST['Fr_Libelle'] : array();
$array_qte  = !empty($_POST['Fr_Quantite']) ? $_POST['Fr_Quantite'] : array();
$array_tot  = !empty($_POST['Fr_PrixTotal']) ? $_POST['Fr_PrixTotal'] : array();
try{
  $FR_PDO = $pdo->prepare("UPDATE tb_user_voucher_test SET Libelle=:array_lib, Quantite=:array_qte, PrixTotal=:array_tot, Valider=:Fr_Valider WHERE NumId =:Fr_NumId");
  foreach($array_lib as $key => $value){
    if($array_qte[$key] <> 0){
    $FR_PDO->bindParam(":array_lib", $value);
    $FR_PDO->bindParam(":array_qte", $array_qte[$key]);
    $FR_PDO->bindParam(":array_tot", $array_tot[$key]);
    $FR_PDO->bindParam(":Fr_Valider", $Fr_Valider);
    $FR_PDO->bindParam(":Fr_NumId", $Fr_NumId[$key]);
    $FR_PDO->execute();
    }
  }
}catch(PDOException $e){
  echo "Erreur: " . $e->getMessage();
}
?>


J'ai juste passé NumId en bindParam, où on récupère le bon id dans le array Fr_NumId
Modifié par taspeur (18 Dec 2017 - 21:45)
Meilleure solution
euh non, : array(); remplace les 0 et NULL parce que ces variables sont attendues sous forme d'array et rien d'autre.
C'est uniquement pour t'éviter d'avoir des erreurs php