Dans un formulaire, j'ai une liste déroulante qui m'affiche des données d'une table de ma base postgres puis un champs texte pour ajouter un libellé dans cette même table.
Voici donc le code correspond:
Formulaire:
Quel(s) référentiel(s) spatial(aux) est/sont utilisé(s)? :
Autre:
<input id="Ref_spa_autre" name="Ref_spa_autre" size="40" type="text"><BR>
<select id="Ref_spa" name="Ref_spa[]" size="5" multiple="multiple"><option value="">-- Saisissez un/des référentiel(s) spatial(aux) --</option>
<!--Intégration des référentiels spatiaux de la base de données dans la liste déroulante --->
<?php
// requête sql
$sql = "SELECT DISTINCT ref_spa_nom, ref_spa_id FROM referentiel_spatial ORDER BY ref_spa_nom asc";
// on sélectionne toutes les entrées libellés des référentiels spatiaux de la table ref_spa
$req=pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_resul_error());
//On affiche ces entrées dans la liste déroulante
while ($line=pg_fetch_array($req))
{
echo "<option name='Ref_spa' value=\"".$line['ref_spa_id']."\">".$line['ref_spa_nom']."</option>";
}
?>
</select>
Traitement:
// On prépare la requête pour insérer les identifiants dans la table str_ref_spa et on exécute cette requête
for ($i=0; isset($_POST['Ref_spa'][$i]); $i++) {
$sql = "INSERT INTO str_ref_spa(ref_spa_id, str_id) VALUES (".$_POST['Ref_spa'][$i].",".$str_id.")";
$req = pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_result_error());
}
// On teste si un libellé est saisi et on compte le nombre d'entrées dans la table ref_spa qui contient $Ref_spa_autre comme valeur
if ($Ref_spa_autre!= "" or $Ref_spa_autre!=null){
$sql = "SELECT count(*) AS nb FROM referentiel_spatial WHERE ref_spa_nom='".$Ref_spa_autre."'";
$req = pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_result_error());
$resul=pg_fetch_assoc($req);
// On vérifie si le libellé du référentiel spatail existe déjà dans la base de données
if ($resul['nb']==0){
// On prépare la requête pour insérer le libellé du reseau_sig de type autre saisi dans la textarea et on exécute cette requête
[size=150]$sql = "INSERT INTO referentiel_spatial(ref_spa_nom) VALUES ('".$Ref_spa_autre."')";
$req = pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_result_error());[/size]
}
// On prépare la requête pour récupérer l'identifiant de ce nouveau référentiel spatial et on exécute cette requête
$sql = "SELECT ref_spa_id FROM referentiel_spatial WHERE ref_spa_nom='".$Ref_spa_autre."'";
$req = pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_result_error());
$resul_ref_spa_id = pg_fetch_assoc($req);
// On prépare la requête pour insérer l'identifiant dans la table str_ref_spa et on exécute cette requête
$sql = "INSERT INTO str_ref_spa(ref_spa_id, str_id) VALUES (".$resul_ref_spa_id['ref_spa_id'].",".$str_id.")";
$req = pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_result_error());
}
J'ai déjà eu ce genre de démarche et je n'avais pas eu de pbs dans mon souvenir mais là, j'ai un pb au niveau de l'insertion du nouveau libellé dans ma table qui contient déjà des enregistrements. J'espère avoir été claire et que quelqu'un peut m'aider.Merci.