Vérifications validité d'un formulaire et insertion dans une bdd
Bonjour,
Avant l'insertion de données dans une base Mysql, je vérifie qu'un champ input :
1) ne contient pas une saisie qui correspond à un enregistrement déjà présent dans la base (via une requête SELECT et la fonction mysql_num_rows)
2) n'est pas vide pour éviter l'insertion des données vides dans la base (via la fonction empty)
3) contient une saisie dont le formatage est conforme à celui attendu : en l'occurrence saisie du nom et prénom d'un contributeur sous la forme nom, prénom (délimitateur virgule + espace : utilisation d'explode et de la fonction count)
Si les 3 conditions sont remplies, j'insère dans ma base la donnée saisie dans le champ imput. Le code que j'utilise :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
<form action="" method="POST" onsubmit="valid5();" >
<p>
<br />
<input type="text" name="text5" id="text5" />
<br />
<?php
if(isSet($_POST["ajouter"])) {
$text5=trim(mysql_real_escape_string($_POST['text5']));
$text5 = explode(", ", $text5);
if(is_array($text5) && isset($text5[1])) {// sinon affiche l'erreur Undefined offset: 1
$sql = mysql_query("SELECT nom_contributeur,prenom_contributeur FROM contributeurs WHERE nom_contributeur ='$text5[0]'and prenom_contributeur='$text5[1]' ");
if(mysql_num_rows($sql) >=1)
{
echo 'le contributeur existe déjà <br/>';
}
}
elseif (empty ($_POST['text5'])) {
echo "Le champ nouveau contributeur est obligatoire <br/>";
}
elseif (count($text5)<2) {// le format attendu de la saisie suppose 2 éléments : nom et prénom. Donc si moins de 2 éléments : saisie incorrecte
echo"format saisie incorrecte";
}
else {
// requete pour chercher le prochain identifiant contributeur => utile pour traitement javascript
$requete="SELECT MAX(id_contributeur) AS nb5 FROM contributeurs WHERE id_contributeur IN (SELECT id_contributeur FROM contributeurs) ;";
$result=mysql_query($requete,$db);
$ligne=mysql_fetch_array($result);
$value5 = $ligne['nb5'];
$value5 = $value5 + 1;
echo '<input type="hidden" name="value5" id="value5" value="'.$value5.'" />';
echo $value5;//debug : ne s'affiche pas
$add5 = sprintf('INSERT INTO contributeurs (nom_contributeur,prenom_contributeur) VALUES ("'.ucfirst($text5[0]).'", "'.ucfirst($text5[1]).'")');
// requête ne se s'effectue pas
$result = mysql_query($add5, $db) or die(mysql_error());
?>
<script type="text/javascript">
self.close();
</script>
<?php
}
}
?>
<input type="submit" name="ajouter" value="Ajouter" />
</p>
</form> |
Ce code fonctionne partiellement : j'ai bien l'affichage de l'un des 3 messages d'erreur si la condition correspondante n'est pas remplie.
Mais si la saisie est correcte (ne correspond pas à un enregistrement existant, non vide et correctement formatée), ma requête ne s'effectue pas ni d'ailleurs l'envoi du champ input type="hidden" "value5".
Voyez-vous comment modifier mon code pour y arriver ? Merci.