Ajout de ligne a partir d'un formulaire

ViPHP
ViPHP | 649 Messages

23 déc. 2005, 23:17

Bonne question... non, sincèrement, j'ai pas fait exprès, j'ai du faire un f5 mal placé...
Image

Eléphanteau du PHP | 36 Messages

24 déc. 2005, 13:36

as tu la solution a mon probleme

ViPHP
ViPHP | 649 Messages

24 déc. 2005, 16:40

Si ce que je t'ai dit plus haut ne fonctionne pas, non. Tu as essayé ce que je t'ai dit?
Image

Eléphanteau du PHP | 36 Messages

27 déc. 2005, 22:55

Bon si je recapitule j'en suis la :
<?php require_once('../Connections/phpconnexion.php'); ?><?php

if(!isset($_POST['ajcours'])) $ajcours=""; else $ajcours=$_POST['ajcours'];
if(!isset($_POST['nom_prof'])) $nom_prof=""; else $nom_prof=$_POST['nom_prof'];
if(!isset($_POST['nationnalite_prof'])) $nationnalite_prof=""; else $nationnalite_prof=$_POST['nationnalite_prof'];
if(!isset($_POST['commentaire_prof'])) $commentaire_prof=""; else $commentaire_prof=$_POST['commentaire_prof'];
if(!isset($_POST['jour'])) $jour=""; else $jour=$_POST['jour'];

$tableauprof=array();

if (empty($tableauprof))
{
$tableauprof[0]=$nom_prof;
$tableauprof[1]=$commentaire_prof;
$tableauprof[2]=$nationnalite_prof;
}
else
{
$tableauprof=null;
}
?>
<?php 
if ($ajcours=="ok")
{
			// Insertion dans la base de donner desc
			mysql_select_db($database_phpconnexion, $phpconnexion);
			$insertcomp = "INSERT INTO chds_cours_desc 
			(nom_prof, nationnalite_prof, commentaire_prof, DateFR) 
	VALUES  ('$tableauprof[0]', '$tableauprof[2]', '$tableauprof[1]', NOW())";
			mysql_query($insertcomp, $phpconnexion) or die(mysql_error());
			
		
		exit;
}
?>
<form name="form1" method="post" action="ajcoursv1_0.php">
  <table width="534" border="1" align="center">
    <tr>
      <td width="154">Nom du prof : </td>
      <td width="364"><input name="nom_prof" type="text" id="nom_prof" value="<? echo $tableauprof[0]; ?>">      </td>
    </tr>
    <tr>
      <td>Nationalit&eacute; : </td>
      <td><select name="nationnalite_prof" id="comp">
                  <option value="Francaise" id="comp">Francaise</option>
                  <option value="Anglaise" id="comp">Anglaise</option>
                  <option value="Su&eacute;doise">Su&eacute;doise</option>
                  <option id="comp" value="Belge">Belge</option>
                  <option id="comp" value="Italienne">Italienne</option>
                  <option id="comp" value="Espagnole">Espagnole</option>
                  <option id="comp" value="Allemande">Allemande</option>
                  <option value="Autre">Autres (&aacute; d&eacute;finir en commentaire)</option>
                    <option value="<?php echo $tableauprof[2]; ?> " selected><?php echo $tableauprof[2]; ?></option>
                </select></td>
    </tr>
    <tr>
      <td>Commentaires : </td>
      <td><textarea name="commentaire_prof" id="commentaire_prof"><? echo $tableauprof[1]; ?>
</textarea></td>
    </tr>
<tr><td colspan="2" align="center">
<?
if(!isset($_POST['nbform'])) $nbform=""; else $nbform=$_POST['nbform'];
if($nbform)
{
    echo"<form action=\"ajcoursv1_0.php\" method=\"post\">";
    $i = 0;
    while($i != $nbform)
    {
        echo"<input type=\"text\" name=\"champ$i\"> <b>Date $i </b><BR>";
        $i++;
    }
}
else
{
    echo"<form action=\"$PHP_SELF\" method=\"post\">
    <input type=\"text\" name=\"nbform\" size=\"2\">
    <input type=\"submit\" value=\"Générer\">
    </form>";
}
?> 	
</td></tr>	
    <tr>
      <td colspan="2"><div align="center">
        <input name="ajout_prof" type="submit" id="ajout_prof" value="Ajouter">
        <input name="ajcours" type="hidden" id="ajcours" value="ok" />
		</div>
      </td>
    </tr>
  </table>
</table>
</form>
ca repond a mes attentes mais je n'arrive pas a renseigner ma table qui correspond a mes champs date quelqu'un sais comment on fait .... ???

la structure de ma table est : dont l'ID est la meme que l'ID autoincrementer de la table chds_cours_desc

Code : Tout sélectionner

CREATE TABLE `chds_cours_horraire` ( `ID` tinyint(11) NOT NULL default '0', `ID_date` tinyint(11) NOT NULL auto_increment, `cours_date` varchar(44) NOT NULL default '0000-00-00', PRIMARY KEY (`ID_date`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
et (cette table contient les premier champ c'est a dire :le champ nom, nationnalité...)

Code : Tout sélectionner

CREATE TABLE `chds_cours_desc` ( `ID` tinyint(11) NOT NULL auto_increment, `nom_prof` varchar(50) NOT NULL default '', `nationnalite_prof` varchar(50) NOT NULL default '', `commentaire_prof` text NOT NULL, `DateFR` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=82 ;
quelqu'un pour moi ????
Modifié en dernier par dam-s le 27 déc. 2005, 23:15, modifié 1 fois.

ViPHP
ViPHP | 649 Messages

27 déc. 2005, 23:00

ca repond a mes attentes mais je n'arrive pas a renseigner ma table qui correspond a mes champs date quelqu'un sais comment on fait .... ???
Tu parles de la date actuelle? => la fonction time() te retourne le timestamp

Et te gêne pas pour utiliser le bouton
Image

Eléphanteau du PHP | 36 Messages

27 déc. 2005, 23:14

non pas la fonction date c'est moi qui rentre les date a la main dans les champs date

ViPHP
ViPHP | 649 Messages

27 déc. 2005, 23:18

Bon alors là, faut que je comprenne: tu veux extraire une durée ou la date?
Image

Eléphanteau du PHP | 36 Messages

27 déc. 2005, 23:25

nom entre une date (ou plusieur) :
1er champ date: 15 janvier 2006
2e champ date : 24 janvier 2006
3e champ date : 26 janvier 2006
4e champ date ...

et le nombr ede champs est fixer par le nombre que lon rentre ici
<?
if(!isset($_POST['nbform'])) $nbform=""; else $nbform=$_POST['nbform'];
if($nbform)
{
    echo"<form action=\"ajcoursv1_0.php\" method=\"post\">";
    $i = 0;
    while($i != $nbform)
    {
        echo"<input type=\"text\" name=\"champ$i\"> <b>Date $i </b><BR>";
        $i++;
    }
}
else
{
    echo"<form action=\"$PHP_SELF\" method=\"post\">
    <input type=\"text\" name=\"nbform\" size=\"2\">
    <input type=\"submit\" value=\"Générer\">
    </form>";
}
?> 	

et qui genere les champs...

je veux ensuite une fois tout les champs renseigner metre a jours ma base SQL

Tu vois ????

ViPHP
ViPHP | 649 Messages

27 déc. 2005, 23:46

Bon, j'imagine que tu enregistres le tout en secondes dans ta table.

Tu te fais un formulaire à deux champs:

Code : Tout sélectionner

<form action="page.php" method="post"> <input type="text" name="heure" /> <input type="text" name="minute" /> <input type="submit" value="Valider" /> </form>
Et puis dans page.php, tu peux récupérer le nombre de secondes à partir de ces infos:

<?
$professeur = "qqn";
$temps = ($_POST['heure'] * 3600) + ($_POST['minute'] * 60);

//Et on fait un UPDATE
mysql_query("UPDATE table SET temps=temps+$temps WHERE professeur='$professeur'");
?>
Ça tient si tu enregistres le temps en secondes dans ta table. Note bien que même si le temps est en seconde, on peut récupérer le nombre d'heure et de minute avec la fonction date();
Image

Eléphanteau du PHP | 36 Messages

28 déc. 2005, 00:27

hum tu na pas compris les champs je l'aie aies ils sont generer par mon code mais c'est pour cela que je n'arrive pas a les renseigner dans ma table...

essaie le code pour voir a quoi cela ressemble...

tu vois ou pas ???

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 déc. 2005, 01:27

Il y a plusieurs choses qui ne vont pas:

1.le formulaire qui est sensé recevoir le nombre de champs variant pour les dates n'est pas fermé. donc problemes pour la validation.

2. ce test if($nbform) va toujours retourner vrai car la variable est initialisée juste avant. regarde ici pour plus d'explication.

3. Ce test if (empty($tableauprof)) est inutile pour la meme raison

4. éviter les exit(); dans un code !

Maintenant venons aux explication:

Par ce formulaire tu insert un nouveau prof dans la table "chds_cours_desc" et les différentes dates auxquelles il interviendra dans la table "chds_cours_horraire".

Et donc l'id générée dans la 1ère table "ID" doit servir pour les dates dans l'autre table à la place de "ID" (de la table "chds_cours_horraire" ) ?

Proposition de code:
<?php require_once('../Connections/phpconnexion.php'); ?><?php

$nb               = (!isset($_POST['nb']))                ? null : $_POST['nb'];
$nom_prof         = (!isset($_POST['nom_prof']))          ? "" : $_POST['nom_prof'];
$nationnalite_prof= (!isset($_POST['nationnalite_prof'])) ? "" : $_POST['nationnalite_prof'];
$commentaire_prof = (!isset($_POST['commentaire_prof']))  ? "" : $_POST['commentaire_prof'];
$jour             = (!isset($_POST['jour']))              ? "" : $_POST['jour'];

$tableauprof=array();
$tableauprof[0]=$nom_prof;
$tableauprof[1]=$commentaire_prof;
$tableauprof[2]=$nationnalite_prof;


if ($nb)
{
            // Insertion dans la base de donner desc
            mysql_select_db($database_phpconnexion, $phpconnexion);
            $insertcomp = "INSERT INTO chds_cours_desc (nom_prof, nationnalite_prof, commentaire_prof, DateFR)
						   VALUES  ('$tableauprof[0]', '$tableauprof[2]', '$tableauprof[1]', NOW())";
						   
            mysql_query($insertcomp, $phpconnexion) or die(mysql_error());
			
			$id=mysql_insert_id(); //dernier id autoincrément génréré par la dernière requete exécutée
			
			
			$nb=$_POST['nb']; // nombre de champs
			
			$values="";			

                        //construction dynamique de la requete
			for($i=1;$i<=$nb;$i++)
			{
			   $values .=",'".$_POST['champ'.$i]".'";
			}			
			
			$sql="INSERT INTO chds_cours_horraire VALUES (".$id.",''".$values.")";
			
			echo $sql; // test pour verifier la requete générée.
            
			mysql_query($sql, $phpconnexion) or die(mysql_error());
			
			mysql_close();
        
			echo 'Enregistrement OK';
}
else
{
?>
	<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
	  <table width="534" border="1" align="center">
		<tr>
		  <td width="154">Nom du prof : </td>
		  <td width="364"><input name="nom_prof" type="text" id="nom_prof" value="<? echo $tableauprof[0]; ?>">      </td>
		</tr>
		<tr>
		  <td>Nationalit&eacute; : </td>
		  <td><select name="nationnalite_prof" id="comp">
					  <option value="Francaise" id="comp">Francaise</option>
					  <option value="Anglaise" id="comp">Anglaise</option>
					  <option value="Su&eacute;doise">Su&eacute;doise</option>
					  <option id="comp" value="Belge">Belge</option>
					  <option id="comp" value="Italienne">Italienne</option>
					  <option id="comp" value="Espagnole">Espagnole</option>
					  <option id="comp" value="Allemande">Allemande</option>
					  <option value="Autre">Autres (&aacute; d&eacute;finir en commentaire)</option>
						<option value="<?php echo $tableauprof[2]; ?> " selected><?php echo $tableauprof[2]; ?></option>
					</select></td>
		</tr>
		<tr>
		  <td>Commentaires : </td>
		  <td><textarea name="commentaire_prof" id="commentaire_prof"><? echo $tableauprof[1]; ?>
	</textarea></td>
		</tr>
	<tr><td colspan="2" align="center">
	<?
	$nbform=(!isset($_POST['nbform'])) ? null : $_POST['nbform'];
	if($nbform)
	{		
		$i = 1;
		echo "<input type=\"hidden\" name=\"nb\" value=".$nbform.">";
		
		while($i <= $nbform)
		{
			echo"<input type=\"text\" name=\"champ$i\"> <b>Date $i </b><BR>";
			$i++;
		}
	}
	else
	{
		echo"<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
		<input type=\"text\" name=\"nbform\" size=\"2\">
		<input type=\"submit\" value=\"Générer\">
		</form>";
	}
	?>     
	</td></tr>    
		<tr>
		  <td colspan="2"><div align="center">			
			<input name="ajcours" type="hidden" id="ajcours" value="ok" />
			<input name="ajout_prof" type="submit" id="ajout_prof" value="Ajouter">
			</div>
		  </td>
		</tr>
	  </table>
	</table>
	</form>
<?
}
?>
Ceci est un test effectué grâce a l'opérateur ternaire:
$ajcours = (!isset($_POST['ajcours'])) ? "" : $_POST['ajcours'];
voila j'espère ne pas être à coté de la plaque :lol:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 36 Messages

28 déc. 2005, 11:51

ok cool
mais j'aie une erreur ligne 34

Parse error: parse error in ...\www\76chds\escpaceprive\ajcoursv1_0.php on line 34

mais je la trouve pas dsl

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 déc. 2005, 12:48

inversion de point et guillemet:
$values .=",'".$_POST['champ'.$i]."'";

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 36 Messages

28 déc. 2005, 13:39

une autre erreur:

Code : Tout sélectionner

INSERT INTO chds_cours_horraire VALUES (82,'','ghggh','ghghghg','hghghgh')Column count doesn't match value count at row 1
dsl je suis chiant lol

Mammouth du PHP | 19672 Messages

28 déc. 2005, 14:21

Comme dans ta requête d'insertion tu ne précises pas les champs dans lesquels doivent être insérées les données, toutes les colonnes seront utilisées par défaut. Le message indique qu'il n'y a pas le nombre de données correspondant au nombre de colonnes de la table.

Donc tu peux résoudre ce problème en précisant les champs à remplir :

Code : Tout sélectionner

INSERT INTO `table`(`champ_1`, `champ_2`, `champ_3`) VALUES('valeur_1', 'valeur_2', 'valeur_3');
Là, même si ta table a 25 colonnes, il n'y aura que ces trois valeurs d'insérées dans les champs indiqués;

Soit en ajustant le nombre de données au nombre de colonnes existantes.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: