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

PHP & Base de données Discussion :

Récupérer les 5 premières cases cochées, sur 30 au total [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut Récupérer les 5 premières cases cochées, sur 30 au total
    Bonjour,

    J'ai une pile de 30 cases à cocher, comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <input type="checkbox" name="specialite[]" value="2" id="1" >choix 1
    <input type="checkbox" name="specialite[]" value="3" id="2" >choix 2
    <input type="checkbox" name="specialite[]" value="4" id="3" >choix 3
    <input type="checkbox" name="specialite[]" value="5" id="4" >choix 4
    <input type="checkbox" name="specialite[]" value="6" id="5" >choix 5
    <input type="checkbox" name="specialite[]" value="7" id="6" >choix 6
    Dans la base de donnée, j'ai 5 champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    specialiteA, specialiteB, specialiteC, specialiteD, specialiteE
    Le client va cocher, par exemple, les cases 2, 4, 8, 15, 16, 26, 30.

    Dans ce cas, je veux récupérer les 5 premières cases cochées, soit ici 2, 4, 8, 15, 16 et les expédier respectivement dans specialiteA, specialiteB, specialiteC, specialiteD, specialiteE.

    S'il en a coché que 3, par exemple, alors on utilise seulement les champs sA, sB, et sC. S'il en a coché plus que 5, l'excédent est ignoré.


    Donc voilà l'exposé du problème, et j'ai besoin de vous pour m'aider à le solutionner

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    La fonction array_slice permet de ne prendre qu'une seule partie d'un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $specialite = array_slice($_GET['specialite'],0,5);

  3. #3
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Ok, alors à réception du form, j'ai fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //on filtre
    $specialite = array_map( 'intval', $_POST['specialite'] );
    //on récupère les 5 premiers choix du tableau
    print_r(array_slice($specialite,0,5));
    Et j'obtiens justement pour ces deux lignes l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: array_map() [function.array-map]: Argument #2 should be an array in /home/site/www/modifier-page.php on line 91
     
    Warning: array_slice() [function.array-slice]: The first argument should be an array in /home/site/www/modifier-page.php on line 93
    L'idée c'est donc de récupérer les 5 premières cases cochées et les envoyer chacune dans les 5 champs de la table (ou dans 3champs si 3 cases sont cochées).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    Il faudrait verifier que array_key_exists('specialite', $_POST). Es-ce une requete de type post? Des elements ont-ils etes selectiones?

    Si oui, verifie que is_array($_POST['specialite']) ou fait un print_r($_POST['specialite']) pour voir ce qu'il contient.

  5. #5
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Bon ça fonctionne en faisant ça, mais si quelqu'un a quelque chose de plus subtil qu'il ne se gêne pas pour le proposer, parce que là c'est vraiment du lourd.
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    if(!isset($_POST['specialite'][0]))
    {
    $sA=intval($_POST['specialite'][0]);
    $update="
    UPDATE  
    `pageProGratuite` 
    SET 
    specialiteA='".$sA."' 
    WHERE 
    idMembre='".$idMembre."'"; 
    mysql_query($update); 
    }
     
    if(isset($_POST['specialite'][1]))
    {
    $sB=intval($_POST['specialite'][1]);
    $update="
    UPDATE  
    `page` 
    SET 
    specialiteB='".$sB."' 
    WHERE 
    idMembre='".$idMembre."'"; 
    mysql_query($update); 
    }
     
    if(isset($_POST['specialite'][2]))
    {
    $sC=intval($_POST['specialite'][2]);
    $update="
    UPDATE  
    `page` 
    SET 
    specialiteC='".$sC."' 
    WHERE 
    idMembre='".$idMembre."'"; 
    mysql_query($update); 
    }
     
    if(isset($_POST['specialite'][3]))
    {
    $sD=intval($_POST['specialite'][3]);
    $update="
    UPDATE  
    `page` 
    SET 
    specialiteD='".$sD."' 
    WHERE 
    idMembre='".$idMembre."'"; 
    mysql_query($update); 
    }
     
    if(isset($_POST['specialite'][4]))
    {
    $sE=intval($_POST['specialite'][4]);
    $update="
    UPDATE  
    `page` 
    SET 
    specialiteE='".$sE."' 
    WHERE 
    idMembre='".$idMembre."'"; 
    mysql_query($update); 
    }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    Ce code marche sur mon serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(array_key_exists('specialite',$_POST)){
      $specialite = array_map( 'intval', $_POST['specialite'] );
      print_r(array_slice($specialite,0,3));
    }
    Pour le mysql, il suffirait surement de rajouter qqchose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      $update="UPDATE `pageProGratuite` SET ";
      for($i=0;$i<count($specialite);$i++){
        $update= $update . "specialite" . chr(ord('A')+$i) . "='" . $specialite[$i] . "', ";
      }
      // print $update
      $update = $update . " WHERE idMembre='".$idMembre."'";
      mysql_query($update);

  7. #7
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Je vais voir ce que je peux faire avec tout ça. Un grand merci à toi atnnn.


    Pourrais-tu simplement m'expliquer cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $update= $update . "specialite" . chr(ord('A')+$i) . "='" . $specialite[$i] . "', ";
    En particulier le chr(ord)... Là comme ça, je suis incapable de traduire cette ligne en français.

  8. #8
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    http://www.php.net/manual/fr/function.chr.php
    http://www.php.net/manual/fr/function.ord.php
    chr(ord('A')+$i) te permet donc de parcourir l'alphabet...
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

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

Discussions similaires

  1. Récupérer les indices de cases non cochées
    Par zozoman dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/07/2013, 09h40
  2. Comment compter les cases cochées sur une page ?
    Par Paul Reed Smith dans le forum Débuter
    Réponses: 4
    Dernier message: 24/03/2011, 12h03
  3. Réponses: 3
    Dernier message: 10/10/2010, 16h29
  4. Récupérer les 50 premières lignes du requête
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/08/2006, 11h15
  5. Récupérer les deux premières lettres d'une chaine
    Par moscovisci dans le forum ASP
    Réponses: 3
    Dernier message: 10/01/2006, 14h53

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