Ranger données formulaire dans base données.

Répondre
niconicochan
le 22/12/2013 à 10:26
niconicochan
Problème pour insérer données formulaire dans base de données.

Bonjour,
J'ai besoin d'aide pour résolution d'un problème, apparemment au niveau de la fonction msqli_query puisqu'il ressort le texte "Exécution de la requête impossible".
J'ai une page de formulaire et une page de traitement de formulaire (j'ai appelé cette dernière RangFormEnCoursTrainb.php).
J'ai remplacé tous mes codes par confidentiel, sachant qu'ils marchent bien puisque j'arrive à envoyer sur mon site des données se trouvant dans mes bases de données.
--------------------------
Page de formulaire
--------------------------

<?php
echo "<html>"
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.
dtd">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>

<body>
<h1>Quel animal voulez-vous mettre en vente?<h1>
<p style:'text-align: right; font-weight: bold'>
Remplissez les champs ci-dessous en présisant
bien le prix de vente que vous estimez.<br>
Cliquez sur valider.<br>
Nous nous occupons alors de la vente de l'animal qui sera<br>
présenté tel que vous nous le décrivez.<br>
<?php

echo "<form action='RangFormEnCoursTrainb.php' method='POST'><table>\n";

$tableau = array ( "animalnom" => "Nom de l'animal:",
"animaltype" => "Type de l'animal:",
"animaldesc" => "Description de l'animal:",
"animalprix" => "Prix de l'animal:");

foreach($tableau as $champ => $presentation)
{
echo "<tr>
<td style='text-align: right; font-weight: bold'>$presentation<td>
<td><input type='text' name='$champ' size='255' maxlength='255'><br></td>
</tr>";
}
echo "<tr>
<td colspan='2' style='text-align: center'>
<input type='submit' value='Validez la saisie'>;
</td></tr></table></form>";
?>
</body>
</html>

---------------------------------------------
Page de traitement de formulaire
---------------------------------------------

<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.
dtd">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>

<body>

<?php

$tableau = array ( "animalnom" => "Nom de l'animal:",
"animaltype" => "Type de l'animal:",
"animaldesc" => "Description de l'animal:",
"animalprix" => "Prix de l'animal:");


foreach($_POST as $champ => $valPresentation)
{
if($valPresentation =="")
{
$champVide[] = $champ;
}
elseif(!ereg("^[A-Za-z0-9' -]{1,255}$",$valPresentation))
{
$mauvaisFormat[] = $champ;
}
}
/* fin de la boucle for */

if(@sizeof($champVide) > 0 or @sizeof($mauvaisFormat) > 0)
{
/* l'accolade qui s'ouvre ci-dessus se ferme juste avant le else */
if(@sizeof($champVide) > 0)
{
echo "Un champ au moins est vide. Vous devez remplir:<br>";
foreach($champVide as $valPresentation)
{
echo "&nsbp;&nsbp;&nsbp;{$tableau[$valPresentation]}<br>";
}
}
if(@sizeof($mauvaisFormat) > 0)
{
echo "<b>Un champs contient au moins une donnée incorrecte. Corrigez:</b><br>";
foreach($mauvaisFormat as $valPresentation)
{
echo "&nsbp;&nsbp;&nsbp;{$tableau[$valPresentation]}<br>";
}
}
echo "<p><hr />";
echo "<h3>Saisissez les données manquantes.<h3>";
echo "<form action='RangFormEnCoursTrainb.php' method='POST'><table>";
foreach($tableau as $champ => $presentation)
{
$dataOK[$champ]=strip_tags(trim($_POST[$champ]));
echo "<tr>
<td style='text-align: right; font-weight: bold'>$presentation</td>
<td><input type='text' name='$champ' size='255' maxlength='255' value='$dataOK[$champ]'><br></td>
</tr>";
}
echo "<tr>
<td colspan='2' style='text-align: center'>
<input type='submit' value='Validez la saisie'>";
echo "</td></tr></table>
</form>";
exit();
}
else
{
$hôte="confidentiel";
$utilisateur="confidentiel";
$motPasse="confidentiel";
$nombase="confidentiel";

$connexion=mysqli_connect($hôte,$utilisateur,$motPasse)
or die ("Connexion au serveur impossible.");
$nombase=mysqli_select_db($connexion,$nombase)
or die ("Sélection de la base impossible");

$champsTous = array_keys($tableau);
foreach($champsTous as $champ)
{
$dataOK[$champ] = strip_tags(trim($_POST[$champ]));

$dataOK[$champ] = mysqli_real_escape_string
($connexion,$dataOK[$champ]);
}
$req="INSERT INTO Animal (animalnom, animaltype, animaldesc, animalprix)
VALUES('$dataOK[animalnom]','$dataOK[animaltype]', '$dataOK[animaldesc]',
'$dataOK[animalprix]')";
$query=mysqli_query($connexion,$req)
or die ("Exécution de la requête impossible.");
echo "<h4>Les données que vous avez saisies ont bien été enregistrées.</h4>";
}
?>
</body>
</html>

-----------------------------------------------------
Avec tous mes remerciements si vous
pouvez me donner un coup de main ^ ^

Nicolas.
LupusMic
le 04/01/2014 à 09:31
LupusMic
Le bbcode permettrait de rendre ton code lisible pour les visiteurs.

Pour un site en production, je t'encourage à ne pas utiliser la construction « or die ». En gros, tu dois faire quelque chose dans ce goût, à chaque fonction qui peux échouer (à adapter selon la fonction invoquée) :

Note que le code peut échouer s'il ne peut créer le fichier de log (ligne 19).
<?php

function http_500()
{
ob_clean();
header('HTTP/1.1 500 Internal Server Error');
echo '<!DOCTYPE HTML><body><h2>Internal server Error</h2></body>';
}

function write_log($message, $file, $line)
{
static $log_fp;

if(is_null($logfp))
{
$log_fp = @fopen('errors.log', 'a');

if(false === $log_fp)
// XXX
http_500();

set_file_buffer($log_fp, 0);
}

$message = sprintf('%2$s:%3$s %1$s', $message, $file, $line);

// I don't care if I wrote every byte
fwrite($log_fp, $message);
}


$result = mysqli_query($sql);
if(false === $result) {

write_log($result, __FILE__, __LINE__);
http_500();
return;
}
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
niconicochan
le 07/01/2014 à 12:31
niconicochan
Mon problème venait d'une table de My SQL.
Il faut en effet avoir toujours la première ligne d'une table en AUTO_INCREMENT
pour pouvoir envoyer des entrées de formulaire dans une table située dans une
base de données. Sinon, ça ne marche pas (une nouvelle ligne aura
le numéro 0 au lieu de venir s'ajouter sous celles déjà existantes, ce qui
n'est pas possible puisqu'il existe déjà un numéro 0).
J'ai également écris une page de formulaire en .html
et mon programme en .php (avec uniquement du php: ma page commence
par <?php et se termine par ?>
C'est ainsi déjà beaucoup plus clair.
Face à un problème comme ça sélectionner sa requête et la tester dans phpmyadmin
permet déjà d'identifier si le soucis vient de php ou de sql.

Question pour le bbcode: comment on fait?
Morganpog
le 07/01/2014 à 23:25
Morganpog
Il faut mettre les deux balises
[code]<?php Votre code php ?>[/code]

Regarde en bas à droite lorsque tu veux envoyé un message (bb-code) et choisis les bonnes balises.
LupusMic
le 14/01/2014 à 16:35
LupusMic
> Il faut en effet avoir toujours la première ligne d'une table en AUTO_INCREMENT

Non, non, et non. C'est en fonction des besoins. Mais en effet, si tu compte sur MySQL pour générer cette séquence, et que la définition de ta table ne le fait pas, ça ne va pas bien marcher ^^
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours