Mettre les valeurs d'un tableau dans une base de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mettre les valeurs d'un tableau dans une base de données

par oscar » 20 oct. 2007, 13:47

Je crois qu'il fallait relancer seulement EasyPhp
Merci infiniment

par oscar » 20 oct. 2007, 13:44

J'ai le resultat dans la table publier mais j'ai aussi ce message d'erreur Duplicata du champ '1-987' pour la clef 1 SVP

par Tracker » 20 oct. 2007, 13:32

Salut,

D'accord avec truc, ou exécute ton ordre dans la boucle:
  $requete1 = true;
  foreach($Col1_Array as $selectValue)
  {
  	$sql1 = "INSERT INTO publier (idAut1, isbn2)
                  VALUES ('$selectValue', '$isbn')";
  	$requete1 &= mysql_query($sql1, $cnx) or die( mysql_error() ) ;
  }
Ensuite, si ton second select n'est pas en mode multiple, et les éléments sélectionnés lors du post, tu ne recevras jamais plusieurs auteurs.

En html:

Code : Tout sélectionner

<SELECT align=top name="liste2" multiple="multiple" size=6 style="width:120px"> </SELECT>
Pour ce qui est de la selection de tous les éléments de la liste2, exécute du code avant de soumettre le formulaire.


Tracker.

[edit] le second select ne sert absolument à rien, si le premier est en mode multiple, alors pourquoi te compliquer la vie ?

par oscar » 20 oct. 2007, 13:29

Merci de me faire par du réglement dont je vais devoir les respects à compter d'aujourd'hui, et j'en suis désolé car je n'avais nullement envie que vous le preniez de cette façon.
Oscar

par Truc » 20 oct. 2007, 13:19

Pour la simple raison que tu n'exécute qu'une seule requete d'insertion.
foreach($Col1_Array as $selectValue)
{
    $sql1 = "INSERT INTO publier (idAut1, isbn2) VALUES ('$Col1_Array', '$isbn')";
} 
$requete1 = mysql_query($sql1, $cnx) or die( mysql_error() ) ;
Construit une requête multiple :
$values = array();
foreach($Col1_Array as $selectValue)
{
    $values[] = "('".$selectValue."', '".$isbn."')"; // avec la bonne valeur pour l'id de l'auteur je pense "$selectValue"
} 
if(!empty($values))
    $sql1 = "INSERT INTO publier (idAut1, isbn2) VALUES ".implode(",",$values);

// test d'affichage
print_r($sql1);

par Truc » 20 oct. 2007, 13:11

Modération :
oscar, les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Merci de prendre le temps de lire les règlements.

par oscar » 20 oct. 2007, 12:53

SVP quelqu'un pourrais m'aider :oops:
Merci

Mettre les valeurs d'un tableau dans une base de données

par oscar » 20 oct. 2007, 12:03

Bonjour
je travaille sur une application de gestion de bibliothèque, SVP, je voudrais mettre les valeurs d'un tableau dans une table, le probleme est que l'insertion ne prend que la derniere du tableau. Mon code est le suivant:
saisi.php
<html>
<title>Nouveau document</title>
<script language="javascript">
function PostSelect(liste){
  // On compte le nombre d'item de la liste select
  NbCol1 = document.forms[liste].elements.liste2.length;
  
  // On lance une boucle pour selectionner tous les items
  for(a=0; a<NbCol1; a++){
    document.forms[liste].elements.liste2.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.liste2.name = "liste2[]";
  // On soumet le formulaire
  document.forms[liste].submit();
}
  function Deplacer(l1,l2) {
		if (l1.options.selectedIndex>=0) {
			o=new Option(l1.options[l1.options.selectedIndex].text,l1.options[l1.options.selectedIndex].value);
			l2.options[l2.options.length]=o;
			l1.options[l1.options.selectedIndex]=null;
		}else{
			alert("Aucune activité sélectionnée");
		}
	}
</script>
<?php
require("../conf.php");

// CONNEXION A LA BASE DE DONNEE
$cnx = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
$db= mysql_select_db( $sql_bdd );
$sql = "Select * From auteur ";
  
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;

?>
<body bgcolor="#666666">
<form name="document"action="inserer.php" method="post" onSubmit="PostSelect(this.name)">
<table border="0" align="center" cellspacing="2" cellpadding="2">
	<tr align="center">
<td>Code ISBN : </td><td><input type="text" name="isbn" size="40" maxlength="40"></td></tr>
    <tr align="center">
<td>Type de document : </td><td><select name="type_doc">
<option value="général"> s&eacute;lectionnez un type</option>
<option value="livre"> livre</option>
<option value="revue"> revue</option>
<option value="thèse"> th&egrave;se</option>
<option value="rapport"> rapport</option>
</select></td></tr>
	<tr align="center">
<td>Titre : </td><td><input type="text" name="titre" size="40" maxlength="40"></td></tr>
	<tr align="center">
<td>Th&egrave;me : </td><td><input type="text" name="theme" size="40" maxlength="40"></td></tr>
	<tr align="center">
<td>Année de parution : </td><td><input type="text" name="annee_p" size="4" maxlength="4"></td></tr>
	<tr align="center">
<td>Mots clés : </td><td><input type="text" name="motscles" size="40" maxlength="40"></td></tr>
	<tr align="center">
<td>Langue :</td><td><input name="lang"  size="40" maxlength="40"></td></tr>
	<tr align="center">
<td>&Eacute;tat du document</td><td><input name="etat"  size="40" maxlength="40"></td></tr>
<TR>
	<TD align="center"><B><FONT size="2">Auteurs existants</FONT></B><BR>
	<?php 
  $ld = "<select name=\"liste1\" size=8 style=\"width:120px\">";
  // On boucle sur la table
while ( $result = mysql_fetch_array( $requete)) {
 // $row est un tableau associatif
    // les éléments sont «indicés» par les noms
    // des colonnes. Je préfère cette technique à celle
    // des indices numériques..on ajoute une colonne..
    $numAut = $result["idAut"];
    $nomAut = $result["nomAut"];
	$prenomAut = $result["prenomAut"];

    $ld .= "<option value='$numAut'>$numAut $nomAut $prenomAut</option>";
}
$ld .= "</SELECT>";
?>
<?php
print $ld;
?>
	</TD>
	<TD align="center">
	<INPUT type="button" value="Ajouter >>>" onClick="Deplacer(this.form.liste1,this.form.liste2)">
	<BR><BR>
	<INPUT type="button" value="<<< Enlever" onClick="Deplacer(this.form.liste2,this.form.liste1)">
	</TD>
	<TD align="center"><FONT size="2"><B>Auteur(s) du document </B></FONT><BR>
	<SELECT align=top name="liste2" size=6 style="width:120px">
		
	</SELECT>
	</TD>
	</TR>
	<tr align="center">
<td>Résumé :</td><td><textarea name="resume" cols="'30" rows="5"></textarea></td></tr>
	<tr align="center">
<td colspan="2"><input type="submit" value="Suivant"> <input type="reset" value="rétablir"></td></tr></table>
</form>
</body>
</html>
inserer.php
<html><head>
<title>Insertion des documents</title>
<?php
require("../conf.php");

// CONNEXION A LA BASE DE DONNEE
$cnx = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
$db= mysql_select_db( $sql_bdd );


  //récupération des valeurs des champs:
  //Code livre:
  $isbn = $_POST["isbn"] ;
  //titre du document:
  $titre     = $_POST["titre"] ;
  //théme du document:
  $theme = $_POST["theme"] ;
  //année de parution du document:
  $anneep = $_POST["annee_p"] ;
  //mots clés:
  $mots        = $_POST["motscles"] ;
  //type du document:
  $typedoc       = $_POST["type_doc"] ;
  //langue
  $langue = $_POST["lang"];
  //état du document
  $etatdoc = $_POST["etat"];
  //resume du document:
  $resume       = $_POST["resume"] ;
  //Auteur du livre:
  $Col1_Array = $_POST['liste2'];
  
  
  //création de la requête SQL:
  $sql = "INSERT  INTO documents (isbn, titre, date_parution, motscles, typeDoc, etatDoc, langue, theme, resume)
	            VALUES ( '$isbn', '$titre', '$anneep', '$mots', '$typedoc', '$etatdoc', '$langue', '$theme', '$resume') " ;


  foreach($Col1_Array as $selectValue){

  $sql1 = "INSERT INTO publier (idAut1, isbn2)
  				VALUES ('$Col1_Array', '$isbn')";
     }
 
 
 $requete1 = mysql_query($sql1, $cnx) or die( mysql_error() ) ;
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
  				
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete && $requete1)
  {
 echo("inserer");
 
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>
voici la BD

Code : Tout sélectionner

-- Structure de la table `auteur` -- CREATE TABLE `auteur` ( `idAut` int(11) NOT NULL auto_increment, `nomAut` varchar(20) NOT NULL default '', `prenomAut` varchar(10) NOT NULL default '', `biographieAut` text NOT NULL, PRIMARY KEY (`idAut`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; -- -- Contenu de la table `auteur` -- INSERT INTO `auteur` VALUES (1, 'yassin', 'omar', ''); INSERT INTO `auteur` VALUES (2, 'omar', 'sharif', ''); INSERT INTO `auteur` VALUES (3, 'haroun', 'tazief', ''); -- -------------------------------------------------------- -- -- Structure de la table `documents` -- CREATE TABLE `documents` ( `isbn` int(11) NOT NULL default '0', `titre` varchar(20) NOT NULL default '', `date_parution` year(4) NOT NULL default '0000', `motscles` varchar(50) NOT NULL default '', `typeDoc` varchar(15) NOT NULL default '', `etatDoc` varchar(10) NOT NULL default '', `langue` varchar(20) NOT NULL default '', `theme` varchar(15) NOT NULL default '', `resume` longtext NOT NULL, PRIMARY KEY (`isbn`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Structure de la table `publier` -- CREATE TABLE `publier` ( `idAut1` int(11) NOT NULL default '0', `isbn2` int(11) NOT NULL default '0', PRIMARY KEY (`idAut1`,`isbn2`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Merci