recuperer données d'une table et les enregistrer dans une autre (entre autre)

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 : recuperer données d'une table et les enregistrer dans une autre (entre autre)

par ranlaris » 11 mars 2008, 12:37

Bon, nouvelle question ^^ toujours sur le même fichier.
je récupère donc mes différents profils et leur sleep associé mais pour qu'ils s'integre correctement à la table, je dois faire en sorte qu'ils soient séparés mais dans une même cellule (....mon dieu, je ne me comprend même pas)
ma table est ainsi faite.

id position des profils récuperés sleep

avec pour les profils et les sleep, qu'ils soient tous dans une seule case
heu... enfin...
comment expliquer >_<

id pos sleep
1 2:3:5:4 30s:15s:10s:45s

voila, là ca devrait être plus comprehensible
je pense que je dois utiliser la commande "implode"
mais je n'arrive pas a la l'utiliser correctement ni au bon endroit.

merci !!!

par Ryle » 11 mars 2008, 12:29

Modération :
ranlaris, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par ranlaris » 11 mars 2008, 10:57

oui, en fait je suis une cruche, en relisant lentement, j'ai trouvé ^^

merci de votre aide en tout cas !!!!

par sadeq » 11 mars 2008, 10:54

Oui. C'est ici qu'il faut englober la liste "temps de pause" dans la boucle de positions
  //Afficher plusieurs fois la liste des profils   
     for ( $pos=1 ; $pos <= $NB_MAX_POSITION ; $pos++ )
        {
        
            echo "<p><b>POS $pos</b> --> Profil : 
                          <select name=\"profil_${pos}\">" . $profils_options . "</select>";
  
        //} <-- Supprime cette fermeture de boucle

                //selection du sleep

                   echo"<label for=\"\">\"temps de pause\"</label><br />";
                      echo"<select name=\"pause\" id=\"sleep\">";
                echo"<option value=\"temps de pause\">--temps de pause--</option>";
                     echo"<option value=\"10\">10</option>";
                      echo"<option value=\"15\">15</option>";
                      echo"<option value=\"30\">30</option>";
                       echo"<option value=\"45\">45</option>";
                       echo"<option value=\"60\">60</option>";
                       
        
            echo "</select></p>\n" ;
        } 

par ranlaris » 11 mars 2008, 10:50

bonjour,

merci pour votre aide
ca a l'air de mieux marcher mais.... (quitte aêtre pénible hein...) avec ton code, j'ai un "temps de pause" global pour tout les profils. hors, il me faut un temps de pause par ligne.
j'ai essayé de changer tout ca, mais je n'y arrive pas T_T je ne vois pas où est le soucis.

par sadeq » 11 mars 2008, 10:49

Corrige ça aussi au niveau de la page add_line.php:
<?php
     //Cette page est appelée par un formulaire qui envoi un POST

    $connexion = mysql_connect("$sql_host","$sql_user","$sql__pass");
    $db = mysql_select_db("$sql__db", $connexion);
    
    $name=$_POST["name"];

    $pos=$_POST["pos"];

    $sleep=$_POST["sleep"];        

    mysql_query("insert into table_B values ('','$name','$pos','$sleep')");

    header("Location: page.php");    
?> 
L'erreur est que cette page est appelée automatiquement par le formulaire, mais elle ne contenait qu'une fonction qui n'est jamais appelée. Pour corriger il faut tout simplement enlever la fonction et écrire le code directement dans la page.

Mais en fait je m'aperçoit que ton problème était de comment appeler cette fonction insert_sleeps(). Le problème est résolue maintenant : concidère que cette fonction n'existe plus. et donc il faut enlever le code suivant (qui n'est pas correct d'ailleurs) de ton programme principal (formulaire) :
    if (isset($_POST["ok"])){

    insertsleep();

    header("Location: page.php"); 

    break;  

    } 

par sadeq » 11 mars 2008, 10:20

J'ai repéré une autre erreur:
//selection du sleep
                echo"<form method=\"post\" action=\"add_line.php\"><p>"; 
Tu ouvre ton formulaire HTML deux fois : supprime cette ligne.

Sinon, je propose aussi une optimisation en évitant les sous boucles inutiles :

En effet, un premier bloc te permet de trouver les profils que tu stocke dans le tableau $profils_tab
et un second bloc affiche ce tableau par une boucle for sous forme d'options de la liste déroulante. Opération que tu répète 16 fois par une boucle de position.

Alors ma proposition d'optimisation est laisser tomber le tableau $profils_tab pour éliminer la boucle d'affichage des options car on peut déterminer ces dernières à la place de créer le tableau. Voici comment :
  /* RECUPERATION DES PROFILS EXISTANTS */
    $query = "SELECT * FROM `vis_profil` ORDER BY `id_profil` ASC ";

    if ( ! ($profils_sql = mysql_query($query,$connexion)) )
    {
        echo "<p>ERREUR DE REQUETE</p>\n";
        mysql_close($connexion) ;
        exit() ;
    }
   
  //Utiliser cette boucle pour remplir les options de la liste des profils
  $profils_options = "<option value=\"\">-- sélectionnez --</option>";
  for ( $i=0 ; $i<mysql_num_rows($profils_sql) ; $i++ )
    {
        $id_profil_temp = mysql_result($profils_sql,$i,"id_profil") ;
        $name_temp = mysql_result($profils_sql,$i,"name") ;
        $profils_options .= "<option value=\"$id_profil_temp\">$name_temp</option>" ;
    }
    
    mysql_free_result($profils_sql) ;
    /* FIN */

    
    /* AFFICHAGE DU FORMULAIRE SI PROFILS */
    
    if ( $profils_options == "<option value=\"\">-- sélectionnez --</option>" )
    {
        echo "<p>Desole, aucun profil !</p>\n" ;
    }
    else
    {
    
        echo "<form action=\"add_line.php\" method=\"post\">\n" ;
    
        echo "<p><b>Name : </b> <input type=\"text\" name=\"name\" size=\"16\" value=\"$NAME_UPDATE\" /></p>\n" ;
        
     //Afficher plusieurs fois la liste des profils   
     for ( $pos=1 ; $pos <= $NB_MAX_POSITION ; $pos++ )
        {
        
            echo "<p><b>POS $pos</b> --> Profil : 
                          <select name=\"profil_${pos}\">" . $profils_options . "</select>";
  
        }

                //selection du sleep

                   echo"<label for=\"\">\"temps de pause\"</label><br />";
                      echo"<select name=\"pause\" id=\"sleep\">";
                echo"<option value=\"temps de pause\">--temps de pause--</option>";
                     echo"<option value=\"10\">10</option>";
                      echo"<option value=\"15\">15</option>";
                      echo"<option value=\"30\">30</option>";
                       echo"<option value=\"45\">45</option>";
                       echo"<option value=\"60\">60</option>";
                       
        
            echo "</select></p>\n" ;
        }
      

par ranlaris » 11 mars 2008, 10:02

merci.

sinon, a part ca, mon bidule est cohérent ou je court a la catastrophe ?

par sadeq » 11 mars 2008, 10:00

Tu as une erreur dans le SQL de l'insertion:

Code : Tout sélectionner

insert into table_B('','$name','$pos','$sleep')
Tu as oublié la clause "VALUES"

Correction :

Code : Tout sélectionner

insert into table_B values ('','$name','$pos','$sleep')
:wink:

recuperer données d'une table et les enregistrer dans une au

par ranlaris » 10 mars 2008, 15:13

Bonjour,

j'ai un petit soucis que je n'arrive pas a résoudre.

j'explique.

Je dois creer un formulaire pour remplir une table.
Dans ce formulaire je dois avoir un nom de ronde renseigné par l'utilisateur
puis, une liste avec pour chaque ligne, les différents profils issus d'une table A sous forme de menu déroulant ainsi qu'une une durée a choisir dans un autre menu déroulant appliquée a chaque profil choisit mais les durées elles, ne sont pas issus d'une table.
Cette liste de profil/durée permet de renseigner une table B

voici ou j'en suis pour l'instant pour ma page du formulaire :
<?
	if ($PHPSESSID && is_file("/tmp/sess_".$PHPSESSID) )
		session_start($PHPSESSID);
	else
	{
		echo "<script language='JavaScript'>\n document.location.replace('index.php'); </script>\n";
        	exit();
    	}

	include ("../../form.php") ;
	include(load_lang($user_lang)) ;

	if (isset($_POST["ok"])){

	insertsleep();

	header("Location: page.php"); 

	break;  

	}


	if ( $admin == 0 ) exit ;
	
	$pause_values_tab = array("10","15","30","45","60") ;
	$profils_tab = array() ;
	
	$NB_MAX_POSITION = 16 ;
	
	echo "<h1>Creation d'un cycle </h1>\n" ;

	if ( $ok == 1 ) { print "<p>OK !</p>\n" ; }
	if ( $err == 1 ) { print "<p>Erreur !</p>\n" ; }
	
	$connexion = mysql_connect("$sql_host","$sql_user","$sql_pass");
	$db = mysql_select_db("$sql_db", $connexion);
		
	if ( ! $connexion || ! $db)
	{
		echo "<p>ERREUR DE CONNEXION</p>\n";
		exit ; 
	}
	
	/* RECUPERATION DES PROFILS EXISTANTS */
	$query = "SELECT * FROM `vis_profil` ORDER BY `id_profil` ASC ";

	if ( ! ($profils_sql = mysql_query($query,$connexion)) )
	{
		echo "<p>ERREUR DE REQUETE</p>\n";
		mysql_close($connexion) ;
		exit() ;
	}
	
	for ( $i=0 ; $i<mysql_num_rows($profils_sql) ; $i++ )
	{
		$idprofil_temp = mysql_result($profils_sql,$i,"id_profil") ;
		$name_temp = mysql_result($profils_sql,$i,"name") ;
		array_push($profils_tab,"${idprofil_temp}:${name_temp}") ;
	}
	
	mysql_free_result($profils_sql) ;
	/* FIN */

	
	/* AFFICHAGE DU FORMULAIRE SI PROFILS */
	
	if ( sizeof($profils_tab) == 0 )
	{
		echo "<p>Desole, aucun profil !</p>\n" ;
	}
	else
	{
	
		echo "<form action=\"add_line.php\" method=\"post\">\n" ;
	
		echo "<p><b>Name : </b> <input type=\"text\" name=\"name\" size=\"16\" value=\"$NAME_UPDATE\" /></p>\n" ;
		
		for ( $j=0 ; $j<$NB_MAX_POSITION ; $j++ )
		{
			$pos = $j+1 ;
		
			echo "<p><b>POS $pos</b> --> Profil : <select name=\"profil_${pos}\"><option value=\"\">-- selectionnez --</option> <br />" ;
		
			for ( $k=0 ; $k<sizeof($profils_tab) ; $k++ )
			{
				list($id_profil_temp,$name_profil_temp) = explode(":",$profils_tab[$k],2) ;
			
				echo "<option value=\"$id_profil_temp\">$name_profil_temp</option><br />" ;
			
	
		}

				//selection du sleep
				echo"<form method=\"post\" action=\"add_line.php\"><p>";
   				echo"<label for=\"\">\"temps de pause\"</label><br />";
      				echo"<select name=\"pause\" id=\"sleep\">";
				echo"<option value=\"temps de pause\">--temps de pause--</option>";
         			echo"<option value=\"10\">10</option>";
          			echo"<option value=\"15\">15</option>";
          			echo"<option value=\"30\">30</option>";
           			echo"<option value=\"45\">45</option>";
           			echo"<option value=\"60\">60</option>";
       				
		
			echo "</select></p>\n" ;
		}
		

		echo "<p><input type=\"submit\" value=\"ajouter\" /></p>\n" ;
		echo "</form>\n" ;
	}

	
	echo "<p><a href=\"configure_cycle.php\">[Annuler]</a></p>\n" ;
	


	?>
et pour ma fonction add_line sensée me permettre de récuperer tout ca dans la table B
<?
	require('../../form.php') ;

	$connexion = mysql_connect("$sql_host","$sql_user","$sql__pass");
	$db = mysql_select_db("$sql__db", $connexion);
	
function insertsleep() { 

	$name=$_POST["name"];

	$pos=$_POST["POS"];

	$sleep=$_POST["sleep"];		

	mysql_query("insert into table_B('','$name','$pos','$sleep')");

	}	

	
	
?>
mon truc est sans doute blindé a mort d'erreurs que je n'arrive pas a trouver ni a faire fonctionner... T_T
donc heu.... au secours ??[/code]