IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Insertion checkbox multichoix dans ma base


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut Insertion checkbox multichoix dans ma base
    Bonjour,

    Je réalise un site web en interne permettant de referencer mes applications et mes serveurs. Pour savoir quel(s) serveur(s) héberge quelle appli(s) et quelle(s) appli(s) est hébergée sur quel(s) serveur(s).

    Jusque la rien de compliqué.

    J'ai un formulaire pour creer une nouvelle application.

    Cette application peut etre installée sur un ou plusieurs serveurs et correspondre à plusieurs envirronnements.


    Ex je creer l'application APPTEST cf capture d'écran 1

    je vais la lier à un ou plusieurs serveurs.

    APPTEST

    Est installée sur le serveur FRPIVSRV0720 et c'est de la production.

    Elle est installée sur FRPIVSRV1563 et c'est de la recette

    Juste que la pas de problème, ca enregistre bien dans ma table HOST
    ID_APP ID_ENV ID_SERVER
    21 1 1
    21 4 3

    les infos que je veux sont bien enregistrées dans la base. Mon appli APPTEST ayant pour ID (21) est en production (1) sur le serveur (1) et en recette (4) sur le serveur (3).

    Maintenant ce que je voudrais faire c'est associer une appli à plusieurs envirronnements sur le meme serveur.

    EX appli : APPTEST2 est installée sur le SERVEUR FRPIVSRV0720 et c'est à la fois de la production et de la recette et du developpement.

    Ce qui donne FRPIVSRV0720 et les 3 checkboxs cochées

    cf capture 2.

    Comment faire pour que ca donne ca :

    ID_APP ID_ENV ID_SERVER
    22 1 1
    22 4 1
    22 5 1

    Actuellement ca me donne ca :

    22 1 1
    22 4 0
    22 5 0
    avec l'erreur suivante :
    Notice: Undefined offset: 1 in /var/www/html/cmdb/test1.php on line 38 Notice: Undefined offset: 2 in /var/www/html/cmdb/test1.php on line 38
    Mon code est le suivant :

    Formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php 
    // database connect infos
    include "config.php";
     
     
    echo '<form method="post" action="test1.php">';
     
    echo 'Nom : <br> <input type="text" name="NAME_APP" style="text-transform: uppercase"/><br/>';
     
     
    // database connect
    $connect = mysql_connect("$serveur","$login","$pass"); 
    mysql_select_db("$bd",$connect);
     
    // Select query pour ma liste de serveurs
    $sql = ("SELECT * FROM SERVER");
    $query=mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement
    	while ($result = mysql_fetch_assoc($query))
    	{
    // affichage des noms de serveurs en checkbox
            echo "<INPUT TYPE=checkbox NAME=CHECK_SERVER[] value=".$result["ID_SERVER"].">".$result["NAME_SERVER"]."";
     
    		// Select query pour ma liste d'environnements
    		$sql3 = ("SELECT * FROM ENV");
    		$query3=mysql_query($sql3) or die('Erreur SQL !<br>'.$sql3.'<br>'.mysql_error());
     
    		// on fait une boucle qui va faire un tour pour chaque enregistrement
    		while ($result3 = mysql_fetch_assoc($query3))
    		{
    			echo "<INPUT TYPE=checkbox NAME=CHECK_ENV[] value=".$result3["ID_ENV"].">".$result3["NAME_ENV"]."";
    		}	
     
    		echo '<br />';
    		echo '</div>';
    		echo '<br />';
    	}
     
    echo '<input type="submit" value="Valider" />';
    echo '</form>';	
     
    ?>
    Traiement du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php 
     
    include "config.php";
     
    // database connect
    $connect = mysql_connect("$serveur","$login","$pass"); 
    mysql_select_db("$bd",$connect);
     
     
    $NAME_APP = $_POST['NAME_APP'];
    $ID_SERVER = $_POST['CHECK_SERVER'];
     
    $ID_ENV = $_POST['CHECK_ENV'];
     
     
    //insertion table APPLICATION
    $sql1 = ("INSERT INTO APPLICATION (NAME_APP) VALUES('$NAME_APP')");
    $res1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
     
    //recupération du dernier id généré pour reutilisation apres
    $ID_APP = mysql_insert_id();
     
    echo $NAME_APP;
    echo $ID_APP;
     
    foreach($ID_ENV AS $checkbox => $value)
    	{
    $sql4 = ("INSERT INTO HOST VALUES('$ID_APP','".$ID_ENV[$checkbox]."','".$ID_SERVER[$checkbox]."')");
    $res4 = mysql_query($sql4) or die('Erreur SQL !<br>'.$sql4.'<br>'.mysql_error());
     
    	}	
     
    ?>

    A mon avis ce qui cloche est juste dans la boucle foreach mais comment faire svp ??

    Merci d'avance.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Si tu as plusieurs checkboxes avec le même nom alors la variable $_POST contient un tableau avec les valeurs des checkboxes cochées.

    Dans ton exemple, il y a une valeur dans ID_ENV et trois dans ID_SERVER. Donc si tu parcours les deux tableaux avec le même indice, ça provoque une erreur.

    Dans ton formulaire, il y a deux boucles imbriquées pour générer les chechboxes. Si tu regardes le code source de la page html, tu verras que toutes les checkboxes d'environnement ont le même nom. Tu ne peux donc pas faire la différence entre les checkoxes cochées pour le serveur 1 et celles pour le serveur 2.

    Pour les identifier, tu peux ajouter l'identifiant du serveur au nom des checkboxes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<INPUT TYPE=checkbox NAME=CHECK_ENV_".$result["ID_SERVER"]."[] value=".$result3["ID_ENV"].">".$result3["NAME_ENV"]."";
    Pour récupérer les valeurs, il faut utiliser deux boucles imbriquées en commençant par les serveurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($_POST['CHECK_SERVER'] as $id_serveur)
    {
    foreach($_POST['CHECK_ENV'.$id_serveur] as $id_env)
    {
    ...
    }
    }

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    Merci pour ta réponse Luna

    J'ai remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<INPUT TYPE=checkbox NAME=CHECK_ENV[] value=".$result3["ID_ENV"].">".$result3["NAME_ENV"]."";
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<INPUT TYPE=checkbox NAME=CHECK_ENV[]".$result["ID_SERVER"]."[] value=".$result3["ID_ENV"].">".$result3["NAME_ENV"]."";
    Sur ma première page.

    Et remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($ID_ENV AS $checkbox => $value)
    	//{
    $sql4 = ("INSERT INTO HOST VALUES('$ID_APP','".$ID_ENV[$checkbox]."','".$ID_SERVER[$checkbox]."')");
    $res4 = mysql_query($sql4) or die('Erreur SQL !<br>'.$sql4.'<br>'.mysql_error());
     }
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     foreach($_POST['CHECK_SERVER'] as $id_serveur)
    {
    foreach($_POST['CHECK_ENV'.$id_serveur] as $id_env)
    {
    $sql4 = ("INSERT INTO HOST VALUES('$ID_APP','".$ID_ENV[$checkbox]."','".$ID_SERVER[$checkbox]."')");
    $res4 = mysql_query($sql4) or die('Erreur SQL !<br>'.$sql4.'<br>'.mysql_error());
    }
    }
    Sur ma page de traitement.


    mais ca ne fonctionne pas et j'ai le mesage d'erreur suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Notice: Undefined index: CHECK_ENV0 in /var/www/html/cmdb/test1.php on line 35 Warning: Invalid argument supplied for foreach() in /var/www/html/cmdb/test1.php on line 35
    Ave vous une idée ou est ce un problème de syntaxe ???

    Merci d'avance.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    En effet, il a une erreur dans la boucle :
    il manque _ entre $_POST['CHECK_ENV et '.$id_serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($_POST['CHECK_SERVER'] as $id_serveur)
    {
    foreach($_POST['CHECK_ENV_'.$id_serveur] as $id_env)
    {
    ...
    }
    }
    Il faut aussi vérifier que les variables $_POST utilisées ne sont pas vides avec la fonction php empty().

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Effectivement ça fonctionne .....

    J'ai modifié ma requete sql en conséquence ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql4 = ("INSERT INTO HOST VALUES('$ID_APP','$id_env','$id_serveur')");
    $res4 = mysql_query($sql4) or die('Erreur SQL !<br>'.$sql4.'<br>'.mysql_error());
    Merci 1000 fois !!!!!!!!!!!!!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Conception] Problème d'insertion de tuples dans la base
    Par grumly22 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 11/05/2006, 09h02
  2. Réponses: 3
    Dernier message: 27/03/2006, 17h25
  3. [MySQL] Insertion d'image dans une base de données
    Par dragonfly dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/03/2006, 14h59
  4. Réponses: 11
    Dernier message: 01/06/2005, 15h18
  5. [Debutant]Insertion nulle mais '' dans la base
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 18/04/2005, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo