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 de valeurs checkbox (PHP/MySQL)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Par défaut Insertion de valeurs checkbox (PHP/MySQL)
    Salut,
    Tout d'abord j'espère que vous pardonnerez mes lacunes: je débute :-°

    Je cherche à modifier un script PHP de petites annonces.

    Actuellement, le script ne permet que de poster dans une seule ville, mais je cherche à mettre en place une checkbox qui permettrait de sélectionner plusieurs villes pour qu'y soit postée la même annonce..

    En ce qui concerne la checkbox, je devrais avoir ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
    <body>
    <form method="post" action="post.php">
    <input type="checkbox" name="cityid[]" value="1"> Brest <br />
    <input type="checkbox" name="cityid[]" value="2"> Paris <br />
    </form>
    </body>
    </html>

    Je vous épargne le code très long pour ne poster ici que l'extrait qui m'intéresse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql = "INSERT INTO $t_ads 
    				SET adtitle = '$data[adtitle]',
    				addesc = '$data[addesc]',
    				cityid = $xcityid,
    				createdon = NOW(),
    				timestamp = NOW(),";
     
    	mysql_query($sql) or die($sql.mysql_error());


    Je pense que le bout de code ci-dessus (cityid = $xcityid) est à modifier, et c'est ici que mes connaissances limitées me bloquent...

    J'ai bien essayé d'intégrer le code suivant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if(isset($_POST['cityid']))
    {
    foreach($_POST['cityid'] as $value){
    $insert=mysql_query("INSERT INTO $t_ads('cityid') VALUES ('$value')");
    }
    }
    ?>

    ...mais sans succès. Je dois être à côté de la plaque.
    Merci d'avance à ceux qui m'apporteront leur aide.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Starmagh Voir le message
    $insert=mysql_query("INSERT INTO $t_ads('cityid') VALUES ('$value')");
    La requête est mal formée, un nom de champ (ici cityid) ne doit pas être encadré de '.

    ...mais sans succès.
    Message d'erreur ? Autre ?

    En tout cas je suis étonné de l'usage fait de ta table $t_ads, es-tu sûr que tu pourras y stocker plusieurs villes pour une même annonce ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Message d'erreur ? Autre ?
    Merci pour ta réponse.
    Lorsque je coche les checkbox, en cliquant sur submit j'ai l'erreur suivante:
    Fatal error: Unsupported operand types
    qui envoie vers une fonction qui apparemment teste la nature numérique de la valeur entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	function check_numeric($var) {
    		if(isset($var)) {
    			if ($var == "") {
    				$var = 0;
    			} else if(strval(0+$var) !== "{$var}")  {
    				handle_security_attack();
    			}
    		}
    	}
    Citation Envoyé par Séb. Voir le message
    En tout cas je suis étonné de l'usage fait de ta table $t_ads, es-tu sûr que tu pourras y stocker plusieurs villes pour une même annonce ?
    Je crois que tu as raison. En fait je devrais plutôt stocker une annonce pour chaque ville.

    J'y suis parvenu en faisant plusieurs insert (en rensignant manuellement les ID des villes, de la manière -basique- suivante:

    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
    	$sql = "INSERT INTO $t_ads 
    				SET adtitle = '$data[adtitle]',
    					addesc = '$data[addesc]',
    					cityid = 1,
    					createdon = NOW(),
    					timestamp = NOW(),";
    	}
     
    	mysql_query($sql) or die($sql.mysql_error());
     
            $sql2 = "INSERT INTO $t_ads 
    				SET adtitle = '$data[adtitle]',
    					addesc = '$data[addesc]',
    					cityid = 2,
    					createdon = NOW(),
    					timestamp = NOW(),";
    	}
     
    	mysql_query($sql2) or die($sql2.mysql_error());

    Mais comment le faire à partir de checkboxes ?

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Starmagh Voir le message
    Lorsque je coche les checkbox, en cliquant sur submit j'ai l'erreur suivante:
    Fatal error: Unsupported operand types
    Extrait du script en cause ?

    qui envoie vers une fonction qui apparemment teste la nature numérique de la valeur entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	function check_numeric($var) {
    		if(isset($var)) {
    			if ($var == "") {
    				$var = 0;
    			} else if(strval(0+$var) !== "{$var}")  {
    				handle_security_attack();
    			}
    		}
    	}
    Me semble louche cette fonction


    Je crois que tu as raison. En fait je devrais plutôt stocker une annonce pour chaque ville.
    Il faut créer un table supplémentaire pour ta relation :

    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
    annonces
    ---------------
    annonce_id
    annonce_texte
    etc.
     
    villes
    ---------------
    ville_id
    ville_nom
    etc.
     
    villes_annonces
    ---------------
    ville_annonce_annonce
    ville_annonce_ville
    Ainsi une annonce pourra avoir de 0 à X villes rattachées.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Il faut créer un table supplémentaire pour ta relation :

    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
    annonces
    ---------------
    annonce_id
    annonce_texte
    etc.
     
    villes
    ---------------
    ville_id
    ville_nom
    etc.
     
    villes_annonces
    ---------------
    ville_annonce_annonce
    ville_annonce_ville
    Ainsi une annonce pourra avoir de 0 à X villes rattachées.
    Merci pour ton aide. Si j'ai bien compris, je crée donc une table similaire à t_ads. La syntaxe m'échappe quelque peu.

    Pour créer t_ads, j'ai:

    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
    $sqls[$t_ads] = "CREATE TABLE `$t_ads` (
      `adid` int unsigned NOT NULL auto_increment,
      `adtitle` varchar(100) NOT NULL default '',
      `addesc` longtext NOT NULL,
      `area` varchar(50) NOT NULL default '',
      `email` varchar(50) NOT NULL default '',
      `showemail` enum('0','1','2') NOT NULL default '0',
      `password` varchar(50) NOT NULL default '',
      `code` varchar(35) NOT NULL default '',
      `cityid` smallint unsigned NOT NULL default '0',
      `subcatid` smallint unsigned NOT NULL default '0',
      `price` DECIMAL( 10, 2 ) NOT NULL default '0',
      `othercontactok` enum('0','1') NOT NULL default '0',
      `hits` int unsigned NOT NULL default '0',
      `ip` varchar(15) NOT NULL default '',
      `verified` enum('0','1') NOT NULL default '0',
      `abused` int unsigned NOT NULL default '0',
      `enabled` enum('0','1') NOT NULL default '0',
      `createdon` datetime NOT NULL default '0000-00-00 00:00:00',
      `expireson` datetime NOT NULL default '0000-00-00 00:00:00',
      `timestamp` timestamp(14) NOT NULL,
      PRIMARY KEY  (`adid`),
      KEY `subcatid` (`subcatid`),
      KEY `cityid` (`cityid`),
      KEY `verified` (`verified`),
      KEY `enabled` (`enabled`)
    ) TYPE=MyISAM;";
    Ceci est le contenu complet de la table, je l'ai tronquée toute à l'heure dans l'INSERT pour faire court.
    Malheureusement, je ne saisis pas bien comment la table que je créerais, pourrait contenir plusieurs villes pour une même annonce.
    Pardonne mon ignorance

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Que vaut la variable $t_ads ?


    Malheureusement, je ne saisis pas bien comment la table que je créerais, pourrait contenir plusieurs villes pour une même annonce.
    Exemple :

    villes (id, nom) :
    1, Paris
    2, Lyon

    annonces (id, texte) :
    1, Loue appart sur Paris
    2, Achète maison sur régions parisienne ou lyonnaise

    annonces_villes (annonce, ville) :
    1, 1
    2, 1
    2, 2

    La table annonces_villes contient 3 enregistrements :
    Le 1er fait le lien entre l'annonce de location et Paris
    Le 2e fait le lien entre l'annonce d'achat et Paris
    Le 3e fait le lien entre l'annonce d'achat et Lyon
    La 1re annonce est liée à 1 ville, la 2e annonce à 2 villes

Discussions similaires

  1. [MySQL] affichage d'une page après l'insertion dans la base PHP/MySQL
    Par autre dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 22/09/2011, 11h24
  2. insertion des valeurs checkbox dans une colonne
    Par ronze dans le forum Langage
    Réponses: 0
    Dernier message: 23/06/2011, 16h33
  3. [MySQL] Regrouper plusieurs cellules de même valeur ? [tableau php/mysql]
    Par bond70 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2010, 15h44
  4. [MySQL] Insertion d'une valeur nulle, PHP->MySQL
    Par mattyeux dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/04/2010, 14h43
  5. Inserer valeur checkbox dans MySQL
    Par Kornikopic dans le forum IHM
    Réponses: 3
    Dernier message: 19/06/2007, 13h22

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