8768 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Bon...j'ai essayé plusieurs choses...

if (!empty($_POST['noms_salaries'])){

foreach($_POST['noms_salaries'] as $les_salaries)
{
if($les_salaries > 0){

//echo $les_salaries . "</br>"; //ici tu peux mettre ta requete SQL pour mettre ton salarié en liaison avec ton équipe
$req = $pdo->prepare("SELECT equipes.id FROM equipes JOIN utilisateurs_particuliers ON equipes.ID_utilisateur = utilisateurs_particuliers.id");
$req->execute($noms_salaries);
$utilisateur_particulier = $req->fetch();
}else{echo $les_salaries . "</br>";
$erreurs['noms_salaries'] = "Vous n'avez pas choisis au moins deux salariés";
}
}
}

avec ça, il passe dans le else, et niveau $les_salaries j'ai bien les deux cochés, et le var dump m'affiche seulement le dernier...
azert qzesr (le nom et prénom)
hgfd sdfghj
C:\wamp\www\Equipes.php:107:string 'hgfd sdfghj' (length=12) (seulement le dernier dans ma variable, le var dump est en fin de else en cas d'erreur)

tout le script :

if (!empty($_POST['noms_salaries'])){

foreach($_POST['noms_salaries'] as $les_salaries)
{
if($les_salaries > 0){

//echo $les_salaries . "</br>"; //ici tu peux mettre ta requete SQL pour mettre ton salarié en liaison avec ton équipe
$req = $pdo->prepare("SELECT equipes.id FROM equipes JOIN utilisateurs_particuliers ON equipes.ID_utilisateur = utilisateurs_particuliers.id");
$req->execute($noms_salaries);
$utilisateur_particulier = $req->fetch();
}else{echo $les_salaries . "</br>";
$erreurs['noms_salaries'] = "Vous n'avez pas choisis au moins deux salariés";
}
}

}

if(empty($erreurs)){

$req = $pdo->prepare('INSERT INTO equipes (nom_equipe, noms_salaries, ID_utilisateur) VALUES (:nom_equipe, :noms_salaries, :ID_utilisateur)');

$nom_equipe = $_POST["nom_equipe"];
// $noms_salaries = $noms_salaries;
$ID_utilisateur = $_SESSION['auth']->id;

$req->execute(array(
':nom_equipe' => $nom_equipe,
':noms_salaries' => $les_salaries,
':ID_utilisateur' => $ID_utilisateur));

header('Location: Equipes.php');

exit();
}else{

echo '<div id="div_ajout_salarie" style="display: block">';
echo '<h1>Ajouter un Salarié</h1>';
echo '<div>';

if(!empty($erreurs['nom_equipe'])){
echo $erreurs['nom_equipe'] . '</br>';}

if(!empty($erreurs['noms_salaries'])){
echo $erreurs['noms_salaries'] . '</br>';}

echo '</div>';
echo '<form id="" action="" method="POST">';
echo '<label>Nom :</label></br >';
echo '<input type="text" name="nom"></br >';
echo '<label>Prénom :</label></br >';
echo '<input type="text" name="prenom"></br >';
echo '<label>Age :</label></br >';
echo '<input type="text" name="age"></br >';
echo '<label>Adresse :</label></br >';
echo '<input type="text" name="adresse"></br >';
echo '<label>Spécialité :</label></br >';
echo '<input type="text" name="specialite"></br >';
echo '<label>Taux horaire but :</label></br >';
echo '<input type="text" name="taux_horaire_brut"></br >';
echo '<input type="submit" name="" value="Ajouter">';
echo '<input type="reset" name="" value="annuler" onclick="cache_div(this, \'div_ajout_salarie\')">';
echo '</form></div>';

echo "<div>";
echo "<pre>";
var_dump($les_salaries);
echo "</pre>";
echo "</div>";
}
}




et si je remplace le
if($les_salaries > 0){
par
if($les_salaries){
il me met bien la nouvelle équipe, mais seulement avec le dernier salarié...

ca commence a me.... hein... Smiley lol
Modifié par melER5 (31 Mar 2020 - 18:44)
J'imagine assez mal ta BDD.

normalement elle devrait être comme ceci

En gros tu devrais avoir:
Une table "Salaries" contenant toutes les infos propre à chaque salarié
Une table "Equipes" contenant le nom de l'équipe
Une table dîtes de jointure qui ne sert qu'à associé une équipe à un salarié

Il est inutile de répéter des infos dans plusieurs tables.

Dans le principe :
Tu affiches toutes les salarié (checkbox) depuis ta requête initial
Tu crées un regroupement d'équipe (dans ton formulaire)
Tu sélectionnes les salariés à ajouter à cette équipe
Tu envois le formulaire ...

Ensuite:
Tu récupère le nom de l'équipe
Puis tu l'ajoutes en BDD
Tu récupère ensuite l'Id de cette insertion (PDO::lastInsertId) que tu mets dans une variable temporaire
Puis tu récupère chaque IdSalarie
Tu ajoutes en BDD dans ta table de jointure l'id de la nouvelle équipe et l'id salarié

Quand tu voudras afficher une équipe dans une autre vue tu n'auras qu'à faire ceci:

Select * from Equipes where id = 1 (par exemple)
left join tableDejointure ON Equipes .id = tableDejointure .equipeId
left join Salaries ON tableDejointure .equipeId = Salaries .Id


cela à l'air lourd mais en fait c'est très pratique à utiliser.
Surtout pour la gestion de ton code par la suite.
Modifié par biduletruck (31 Mar 2020 - 22:33)
Sinon quelques astuces pratique:

1- avec PDO pas besoin de faire une requête préparée sur un "SELECT" cela ne risque rien, uniquement sur un "INSERT" ou un "UPDATE"

2- Ton var_dump($les_salaries); n'affiche que la dernière ligne c'est normal cette variable est écrasée à chaque boucle que tu as fait ..
Si tu veux avoir un dump de chaque variable il faut inclure le var_dump($les_salaries)) dans la boucle avant que la variable soit écrasée.

3- l'affichage de balise HTML dans un code php

Il est peut pratique, voir même difficile à lire un code avec des "ECHO" partout perso je trouve que cela est source d'érreurs.

Donc tu as la possibilité de faire ainsi: (en reprenant ton exemple)

Tu peux fermer et ré-ouvrir tes balises php


else{

    echo '<div id="div_ajout_salarie" style="display: block">';
    echo '<h1>Ajouter un Salarié</h1>';
    echo '<div>';

    if(!empty($erreurs['nom_equipe'])){
        echo $erreurs['nom_equipe'] . '</br>';}

    if(!empty($erreurs['noms_salaries'])){
        echo $erreurs['noms_salaries'] . '</br>';}

    echo '</div>';
    echo '<form id="" action="" method="POST">';
    echo '<label>Nom :</label></br >';
    echo '<input type="text" name="nom"></br >';
    echo '<label>Prénom :</label></br >';
    echo '<input type="text" name="prenom"></br >';
    echo '<label>Age :</label></br >';
    echo '<input type="text" name="age"></br >';
    echo '<label>Adresse :</label></br >';
    echo '<input type="text" name="adresse"></br >';
    echo '<label>Spécialité :</label></br >';
    echo '<input type="text" name="specialite"></br >';
    echo '<label>Taux horaire but :</label></br >';
    echo '<input type="text" name="taux_horaire_brut"></br >';
    echo '<input type="submit" name="" value="Ajouter">';
    echo '<input type="reset" name="" value="annuler" onclick="cache_div(this, \'div_ajout_salarie\')">';
    echo '</form></div>';

    ?>

    </div>
        <form id="" action="" method="POST">
            <label>Nom :</label></br >
            <input type="text" name="nom"></br >
            <label>Prénom :</label></br >
            <input type="text" name="prenom"></br >
            <label>Age :</label></br >
            <input type="text" name="age"></br >
            <label>Adresse :</label></br >
            <input type="text" name="adresse"></br >
            <label>Spécialité :</label></br >
            <input type="text" name="specialite"></br >
            <label>Taux horaire but :</label></br >
            <input type="text" name="taux_horaire_brut"></br >
            <input type="submit" name="" value="Ajouter">
            <input type="reset" name="" value="annuler" onclick="cache_div(this, \'div_ajout_salarie\')">
        </form>
    </div>

<?php
    
    echo "<div>";
    echo "<pre>";
    var_dump($les_salaries);
    echo "</pre>";
    echo "</div>";
}




Si tu veux ajouter un boucle par exemple dans un code HTML, il faut juste faire attention au niveau de l'accolade fermante de bien mettre des espaces (comme mis dans l'exemple)


<?php
  foreach($_POST['noms_salaries'] as $les_salaries)
    { ?>

<!-- ton code HTML -->

<?php } ?>

Je n'avais pas de table simplement pour les deux id Smiley lol .
Je mettrai également l'id de l'utilisateur.
Qu'entends-tu par créer un regroupement d'équipes dans le formulaire?
Car je souhaite pouvoir juste entrer le nom voulu par l'utilisateur (accepté si le nom n'es pas déjà utilisé par cet utilisateur).

En effet ça paraît un peu lourd Smiley lol mais ça va le faire, même si j'y passe du temps.

Je ne met pas encore le sujet résolu, je vais essayer ça au plus vite.

En tout cas merci pour l'aide apporté ! Smiley biggrin

Bonne soirée

Edit : je viens de voir ton deuxième message, merci encor pour tes conseils Smiley cligne
effectivement c'est plus simple en les fermant/ré-ouvrant, j'avais fait ça car j'était dans la partie php Smiley lol
Modifié par melER5 (31 Mar 2020 - 23:19)
Re bonjour!

Merci à vous encore pour votre aide ! Smiley cligne
ça marche niquel, maintenant, a moi de bien faire ma requete pour afficher les salariés qui forment une équipe !

Merci et bonne continuation à vous ! Smiley smile

RESOLU
Pages :