PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 10-09-2009 12:28:05

allhambra
Membre
Lieu : Pau (64)
Inscription : 10-09-2009
Messages : 75
Site Web

recuperation sql d'un select multiple

Bonjour à tous,

Je cherche à récupérer les données d'un select multiple dans le champ "services" de ma base de données.

ma champ service est en varchar(255)      latin1_swedish_ci       not null

Dans ma page html :

<?php
// Traitement après post et affichage des valeurs du champ select
if ($HTTP_POST_VARS["services"] != "")
{
    $services_Array = $HTTP_POST_VARS["services"];
    for ($num = 0; $num < count($services_Array); $num++)
    {
    echo $services_Array[$num]."<br>";
    }
}
?>

<script>
function PostSelect(liste)
{
    // On compte le nombre d'item de la liste select
    Nbservices = document.forms[liste].elements.services.length;
   
    // On lance une boucle pour selectionner tous les items
    for (a = 0; a < Nbservices; a++)
    {
    document.forms[liste].elements.services.options[a].selected = true;
    }
   
    // On modifie l'ID  du champ select pour que PHP traite cette
    // dernière comme un array
    document.forms[liste].elements.services.name = "services[]";

    // On soumet le formulaire
    document.forms[liste].submit();
}
</script>

dans mon body, j'ai un form dans un form :

<form method="POST" action="ajout_location.php">
mes autres champs
<form name="services" method="post" action="capture_select.php">
    <select name="services" size="4" multiple style="width: 150px">
     <option value="Piscine">Piscine</option>
                      <option value="Jardin">Jardin</option>
                      <option value="Terrasse">Terrasse</option>
                      <option value="Parking">Parking</option>
    </select><br><br>
    <input name="Envoyer" type="button" value="Envoyer" onClick="javascript:PostSelect('services')">
</form></form>

le tout traité par ajout location.php

<?php

include ("conec.php");
// cookie d'indentification
include ("cookie.php");
$type =  mysql_real_escape_string($_POST['type']);
$pays =  mysql_real_escape_string($_POST['pays']);
$departement =  mysql_real_escape_string($_POST['departement']);
$ville =  mysql_real_escape_string($_POST['ville']);
$nom_location = mysql_real_escape_string($_POST['nom_location']);
$description = mysql_real_escape_string($_POST['description']);
$pieces =  mysql_real_escape_string($_POST['pieces']);
$surface =  mysql_real_escape_string($_POST['surface']);
$services = mysql_escape_string($_POST['services']);
//$services = (";" $_POST['services']);

// requète d'insertion dans la table

mysql_query("INSERT INTO locations VALUES ('', '$type', '$pays', '$departement', '$ville','$nom_location', '$description', '$pieces', '$surface', '$services')")or die ("erreur requète");

// on ferme la connexion
mysql_close();
echo "<div class = \"ptitre\"> </b><br><br><br><br><b>La location à été ajoutée</b><br><br><br><br> Vous allez être redirigé vers la page de configuration</div>";

?><head>
<meta http-equiv="refresh" content="2;url=config_reserv.php">
<title>Ajout d'une location</title></head>
<link REL="StyleSheet" TYPE="text/css" HREF="style.css">
<p> </p>
<p> </p>
<table width="50%" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td class="texte">
      <div align="center">Si rien ne se passe cliquez ici : <a href="config_reserv.php">Configuration</a></div>
    </td>
  </tr>
</table>

tous les champs sont bien importés dans la BDD, mais dans le champ services, il ne m'affiche que la dernière des valeurs selectionnée.

Par exemple, si je coche Jardin et terrasse, il ne m'enregistre que terrasse.

j'ai du rater une étape, et toute aide est bienvenue smile

Dernière modification par allhambra (10-09-2009 12:47:17)

Hors ligne

#2 10-09-2009 13:59:57

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : recuperation sql d'un select multiple

Saluton,
Deux choses :
1.- Aucune donnée tabulaire dans les colonnes des tables des bases de données. Ce n'est pas en formes normales. En formes normales toute valeur d'une colonne doit être strictement scalaire.
2.-Comme un select multiple n'est pas un scalaire mais une liste de scalaires, dans le script de traitement, il faut en tenir compte. $_POST['services'] est un array().


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 10-09-2009 14:59:23

allhambra
Membre
Lieu : Pau (64)
Inscription : 10-09-2009
Messages : 75
Site Web

Re : recuperation sql d'un select multiple

coucou et merci pour ta réponse smile

si je te suis bien il me faudrait quelque chose du genre :

<?php
public function dbInsert($table, $values)
{
$this->conn();

$fieldnames = array_keys($values[0]);

$size = sizeof($fieldnames);
$i = 1;
$sql = "INSERT INTO$table";

$fields = '( ' . implode(' ,', $fieldnames) . ' )';

$bound = '(:' . implode(', :', $fieldnames) . ' )';

$sql .= $fields.' VALUES '.$bound;


$stmt = $this->db->prepare($sql);
foreach($values as $vals)
{
$stmt->execute($vals);
}
}
?>

où dans mon cas, $fieldnames= $services ???

Hors ligne

Pied de page des forums