Bonjour,
Voila je rencontre un petit problème avec mon code.
j'ai un formulaire avec 4 champs plus 2 menus déroulant
filiale :
services :
personnel :
mon code :
<?php
$error="";
// Insertion du message dans la base de donnée
if(isset($_POST['submit']))
{
$nom=htmlentities(trim($_POST['nom']));
$prenom=htmlentities(trim($_POST['prenom']));
$interne=htmlentities(trim($_POST['interne']));
$mobile=htmlentities(trim($_POST['mobile']));
$filiale=htmlentities(trim($_POST['filiale']));
$service=htmlentities(trim($_POST['service']));
if($nom)
{
$insert = $PDO->prepare('INSERT INTO personnel (personnel.nom, personnel.prenom, personnel.interne, personnel.mobile, personnel.filiale, personnel.service)
SELECT :nom, :prenom, :interne, :mobile, filiale, service
FROM filiale, services
WHERE filiale = :filiale
AND service = :service');
$insert->execute(array(
':nom' => $nom,
':prenom' => $prenom,
':interne' => $interne,
':mobile' => $mobile,
':filiale' => $filiale,
':service' => $service
));
header('Location:index.php?p=listetel');
}else $error = "Veuillez saisir tous les champs";
}
?>
<?php if($Auth->user('role') >= 'admin'): ?>
<article class="login">
<form class="form" id="login" method="POST" action="index.php?p=listetel">
<div id="error"><?php echo $error; ?></div>
<fieldset id="inputs">
<p class="">
Bonjour, <?php echo $Auth->user('login'); ?>
</p>
<label>Filiale :</label>
<select name="filiale" id="filiale">
<?php
$select = $PDO->prepare('SELECT * FROM filiale');
$select->execute();
while($users = $select->fetch(PDO::FETCH_OBJ)){
?>
<option value="ta_valeur"><?php echo $users->filiale; ?></option>
<?php
};
?>
</select><br />
<label>Service :</label>
<select name="service" id="service">
<?php
$select = $PDO->prepare('SELECT * FROM services');
$select->execute();
while($users = $select->fetch(PDO::FETCH_OBJ)){
?>
<option value="ta_valeur"><?php echo $users->service; ?></option>
<?php
};
?>
</select><br />
<label>Nom :</label> <input type="text" name="nom" /><br />
<label>Prenom :</label> <input type="text" name="prenom" /><br />
<label>Interne :</label> <input type="tel" name="interne" /><br />
<label>Mobile :</label> <input type="tel" name="mobile" /><br />
<p class="submit">
<input id="submit" type="submit" value="Ajouter" name="submit" />
<div id="error"><?php echo $error; ?></div>
</p>
</fieldset>
</form>
</article>
<?php endif; ?>
<article>
<?php if(!$Auth->user('role') == 'member'): ?>
<p>Pour poster un message, vous devez être connecter <a href="index.php?p=login">Se connecter</a></p>
<?php endif; ?>
<table>
<tr>
<th>Filiale</th>
<th>Service</th>
<th>Nom / Prénom</th>
<th>Interne</th>
<th>Mobile</th>
</tr>
<?php
$select = $PDO->prepare('SELECT personnel.nom, personnel.prenom, personnel.interne, personnel.mobile, filiale.filiale, services.service FROM personnel, filiale, services WHERE filiale.id=personnel.filiale AND services.id=personnel.service');
$select->execute();
while($users = $select->fetch(PDO::FETCH_OBJ)){
?>
<tr>
<td><?php echo $users->filiale; ?></td>
<td><?php echo $users->service; ?></td>
<td><?php echo $users->nom." ".$users->prenom; ?></td>
<td><?php echo $users->interne; ?></td>
<td><?php echo $users->mobile; ?></td>
</tr>
<?php
};
?>
</table>
</article>
mais rien ne s'enregistre dans ma base de donnée, si je fais le test uniquement avec les champs sans les menus déroulant, ça fonctionne.
la partie qui me cause problème c'est :
$insert = $PDO->prepare('INSERT INTO personnel (personnel.nom, personnel.prenom, personnel.interne, personnel.mobile, personnel.filiale, personnel.service)
SELECT :nom, :prenom, :interne, :mobile, filiale, service
FROM filiale, services
WHERE filiale = :filiale
AND service = :service');
$insert->execute(array(
':nom' => $nom,
':prenom' => $prenom,
':interne' => $interne,
':mobile' => $mobile,
':filiale' => $filiale,
':service' => $service
));
Je n'arrive pas à importer les champs du menu déroulant qui sont alimenter par les table filiale et services.
Merci pour votre aide.
Bonjour à tous,
désolé pour ce retour tardif.
Après plusieures test, j'ai relu mon code et je me suis aperçu que j'avais une erreur dans option de mon select :
<option value="ta_valeur"><?php echo $users->service; ?></option>
j'avais oublié de mettre ma valeur à la place de ta_valeur :
<option value="<?php echo $users->id; ?>"><?php echo $users->service; ?></option>
je n'avais donc pas besoin de faire de requête supplémentaire, juste besoin de mettre mon echo au bonne endroit.
Désolé pour cette mauvaise relecture de mon code et merci d'avoir pris le temps de répondre.
Et si je ne me trompe pas les insertions en BDD se font comme ça !
<?php
$insert = $PDO->prepare('INSERT INTO personnel (personnel.nom, personnel.prenom, personnel.interne, personnel.mobile, personnel.filiale, personnel.service) VALUES(:nom, :prenom, :interne, :mobile, :filiale, :service));
$insert->execute(array(
':nom' => $nom,
':prenom' => $prenom,
':interne' => $interne,
':mobile' => $mobile,
':filiale' => $filiale,
':service' => $service
));
?>
Bonsoir,
Merci pour vos réponse.
@Carouge10
Il a un WHERE suivi d'un AND pour le 2ème, j'ai testé uniquement avec "filiale mais ça ne fonctionne pas non plus.
@JeremieMeunier
l'insertion fonctionne comme indiquer avec le VALUE mais ce que je souhaite c'est importer les 2 menus déroulant qui son alimenter par d'autres tables (filiale et services) dans la table personnel.
si je ne me trompe, je dois faire un SELECT dans un INSERT INTO.
Merci pour votre aide.
En toutes logique, il te suffit de créer des select
avec ta BDD puis de soumettre le formulaire et de récupérer la valeur !
Si je comprend bien, puisque mon menu déroulant est alimenter, je n'ai pas besoin de faire de SELECT ?
Je viens de faire le test, l'importation se fait mais mes valeurs filiale et service dans ma table personnel sont 0, normalement je devrais récupérer un INT entre 1 et 17.
tous les champs s'importent correctement sauf les 2 champs mentionné ci-dessus, les fameux menus déroulant alimenter par 2 tables.
Merci d'avance.
Montre ton code actuel ce sera plus simple
Et petite parenthèse :
$nom=htmlentities(trim($_POST['nom']));
$prenom=htmlentities(trim($_POST['prenom']));
$interne=htmlentities(trim($_POST['interne']));
$mobile=htmlentities(trim($_POST['mobile']));
$filiale=htmlentities(trim($_POST['filiale']));
$service=htmlentities(trim($_POST['service']));
Pas beau
Je te conseil une petite fonction très éfficace
Dans un fichier function.php (par exemple) :
function secureData($data){
if(is_array($data)){
$secure = array();
foreach($data as $key => $value){
$secure[htmlspecialchars($key)] = htmlspecialchars($value);
}
}else{
$secure = htmlspecialchars($data);
}
return $secure;
}
Tu n'as plus qu'à faire dans ton code:
require 'function.php';
$secure = secureData($_POST);
Et tu peux l'utiliser comme un POST
echo $secure['name'];
Salut Jinou,
Mon code actuel est celui présenté au début.
Merci pour le conseils, je créerai une fonction comme montré.
Je que je cherche à faire c'est de récupérer un champ de la table filiale et un champ de la table services et de les impoter dans la table personnel.
Merci pour votre aide.
Dans ce cas, je pense que tu devrais faire 2 requêtes "select" et ensuite faire ton "insert" avec toutes les données
Ou une jointure de table tout simplement. Ca éviterai les surchages de requetes de connexion inutiles