IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

additionner des donnes dans un formulaire


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut additionner des donnes dans un formulaire
    Bonjour à tous,

    Je dispose d'une BDD avec 6 champs:
    t_vol; cycles1; cycles2; tempstotal; totalcycles1; totalcycles2.

    J'ai fait un formulaire afin d'inserer t_vol;cycles1; cycles2.
    je voudrais en fait récupérer les derniers champs de: tempstotal; totalcycles1; totalcycles2) et les additionner au données entrées du formulaire.
    soit prendre:
    t_vol + dernier id de temps total
    cycles1+ dernier id de totalcycles1
    cycles2+ dernier id de totalcycles2

    les bases je connais, calculer 2 variables, c'est ok, mais c'est récupérer la dernier ID de chaque champs.
    comment dois-je m'y prendre, quelle est la marche à suivre:

    dans mon brouillon j'en suis là:

    1-récupérer les données du formulaire
    2- les insérer dans la BDD
    3- récupérer les derniers enregistrements (tempstotal.etc...)
    4- additionner
    5- les insérer dans la BDD

    Dois-je faire ça dans l'ordre ou je peux tout compiler dans une seule et même requête SQL?
    C'est un point que j'ai du mal à comprendre...
    Ensuite dans PHP admin, peut-on rentrer une requête permettant de le faire?

    Un peu brouillon je sais mais suis pas bien lâcher PHP.

    Merci de votre écoute

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Je dispose d'une BDD avec 6 champs:
    Tu veux dire plutôt : 1 Bdd avec 1 table comportant ces 6 champs, non ?
    Un peu confus, car même "t_vol" comme nom de champ c'est assez moyen on va dire.
    Par convention on nommerait plutôt cette table "t_vol", et comme champ, "vol_id" si c'est la clé primaire par exemple (voir plus simplement "id").


    On ne sait pas de quoi il s'agit, donc sous réserve, mais le fait qu'il y ait cycles1, cycles2, totalcycles1, totalcycles2, on remarque un phénomène de répétition.

    A moins que cela se justifie vraiment, théoriquement il ne faudrait pas faire ainsi, toujours théoriquement, il faudrait au moins 2 tables, dont 1 pour les différents cycles.

    De même que pour les temps/calculs, théoriquement ce n'est pas recommander d'enregistrer ces valeurs qui sont totalement dépendantes les unes des autres.
    Toujours théoriquement, il est recommander de les calculer dans les requêtes.
    Si pour X raison une des valeurs est modifiée et qu'il y a un oubli de réactualiser le ou les calculs enregistrés, tout le coté applicatif sera faussé (ça peu aller jusqu'au bug selon ce qui est fait avec ces valeurs calculées).

    M'enfin, tout ça reste purement théorique, on est d'accord


    je voudrais en fait récupérer les derniers champs de: tempstotal; totalcycles1; totalcycles2)
    En faisant comme ceci par exemple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT tempstotal, totalcycles1, totalcycles2
    FROM nom_de_cette_table
    ORDER BY t_vol DESC
    LIMIT 1
    Le tri décroissant rajouter à ça qu'on souhaite qu'1 seule ligne devrait retourner les valeurs dernièrement enregistrées.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Bon j'ai essayé quelques choses mais rien ne fonctionne, je ne demande pas un code mais seulement une piste sur ou j'ai pu me tromper, j'ai bien fait des recherches sur les messages d'erreurs mais je ne trouve pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    // on verifie les données
    	if(isset($_POST['ladate'],$_POST['t_vol'],$_POST['c_gtr'],$_POST['c_apu']))
    {
    	// envoyer les resultats d'un formulaire dans la base de données
    	// Connexion à la base de données
     
    	mysql_connect("localhost","root","");
        mysql_select_db("fida_bis");
     
        // Insertion des donnees
        $req="INSERT INTO t48 (ladate,t_vol, c_gtr, c_apu) VALUES ('".$_POST['ladate']."','". $_POST['t_vol']."','".$_POST['c_gtr']."','".$_POST['c_apu']."')";
     
        mysql_query ($req);	
     
    	//récupération des derniers données enregistrées soit tt_vol, tc_gtr, tc_apu
    	$req2="SELECT tt_vol, tc_gtr, tc_apu FROM t48 ORDER BY id DESC LIMIT 1";// revoir la requête 
     
    	mysql_query($req2);
    	//on prépare les données et on les remplaces par des variables
    	WHILE ($donnees = mysql_fetch_array($req2))
            { 
    	$tt_vol=$donnees['tt_vol'];
    	$tc_gtr=$donnees['tc_gtr'];
    	$tc_apu=$donnees['tc_apu'];
     
    	$t_vol=$donnees['t_vol'];
    	$c_gtr=$donnees['c_gtr'];
    	$c_apu=$donnees['c_apu'];
    	}
    	// on additionne les donnees
     
    	$tt_vol + $t_vol = $a;
    	$tc_gtr + $c_gtr = $b;
    	$tc_apu + $c_apu = $c;
     
    	// on affiche dans une autre page
     
     
        echo $a;
    	echo $b;
    	echo $c;
    	}
     ?>

    mes messages d'erreur:
    Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in C:\wamp\www\calcul\traitement_fida.php on line 31

    Notice: Undefined variable: a in C:\wamp\www\calcul\traitement_fida.php on line 43

    Notice: Undefined variable: tt_vol in C:\wamp\www\calcul\traitement_fida.php on line 43

    Notice: Undefined variable: b in C:\wamp\www\calcul\traitement_fida.php on line 44

    Notice: Undefined variable: tc_gtr in C:\wamp\www\calcul\traitement_fida.php on line 44

    Notice: Undefined variable: c in C:\wamp\www\calcul\traitement_fida.php on line 45

    Notice: Undefined variable: tc_apu in C:\wamp\www\calcul\traitement_fida.php on line 45

    Notice: Undefined variable: a in C:\wamp\www\calcul\traitement_fida.php on line 50

    Notice: Undefined variable: b in C:\wamp\www\calcul\traitement_fida.php on line 51

    Notice: Undefined variable: c in C:\wamp\www\calcul\traitement_fida.php on line 52
    alors le coup des undifined variable je pense savoir d'ou est-ce que ça vient, quoi-que!!!!!!! mais je n'arrive pas a resoudre la 1e.

    Merci de votre aide.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    1 il faut proteger tes valeurs dans l'insert
    2 il faut utiliser mysql_insert_id()
    3 le nom de tes champs est différent dans la requete SELECT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     $req="INSERT INTO t48 (ladate,t_vol, c_gtr, c_apu) VALUES ('".mysql_real_escape_string($_POST['ladate'])."','". mysql_real_escape_string($_POST['t_vol'])."','".mysql_real_escape_string($_POST['c_gtr'])."','".mysql_real_escape_string($_POST['c_apu'])."')";
    mysql_query ($req);
     
    //récupération des derniers données enregistrées soit tt_vol, tc_gtr, tc_apu
    $req2="SELECT t_vol, c_gtr, c_apu FROM t48 WHERE id ="  . mysql_insert_id();
    mysql_query($req2);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Désolé de te décevoir, maéis j'ai essayer ton code mais ça ne fonctionne pas, j'ai toujours l'erreur de la ressource, je ne comprends pas d'ailleurs!!!
    il me dit que c'est une erreur de chaine de caratèrer hors je ne lui rentre que des chiffres, cela viendrait-il d'autres choses?

    Je comprends vite mais faut m'expliquer longtemps...

    Merci

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Les problème de ressources sont liés à des erreurs (erreurs de nom, casse non respectées, non réservés, valeur non conforment,etc, etc ...).

    Mais pour trouver ce genre d'erreur il te faut faire un minimum de débuggage, sinon il est clair qu'on reste un peu "planter" là ne sachant pas quoi faire ...

    Exemple basique de débug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $req = "INSERT INTO t48 (ladate,t_vol, c_gtr, c_apu) VALUES (... etc ...)";
     
    echo $req.'<br />';
     
    mysql_query ($req);
     
    //récupération des derniers données enregistrées soit tt_vol, tc_gtr, tc_apu
    $req2 = "SELECT t_vol, c_gtr, c_apu FROM t48 WHERE id ="  . mysql_insert_id();
     
    echo $req.'<br />';
     
    mysql_query($req2);
    Le simple fait d'afficher les chaines de requêtes générées te permettra de voir ce quelles contiennent, de connaitre la finalité.
    Par conséquent, si erreur il y a on devrait le constater.
    Si ça ne saute pas aux yeux on fait un copier/coller dans le forum.

    Il y a donc 3 fonctions à connaitre et à utiliser (sans modération) en cas de débug : echo, var_dump(), print_r().

    Mettre un point d'arrêt dans le code (un exit()) peut dans certain cas être fort utile.
    Par exemple, en mettre un juste avant une insertion dans la Bdd pour éviter de polluer sa Bdd quand fait pleins d'essais comme ça en cherchant une erreur.


    En résumer, voilà des moyens simples et basiques pour te permettre de trouver toi même les erreurs, ou alors de recueillir des informations bien plus utiles à mettre sur un forum.
    Mais dire que "ça ne fonctionne pas", on est pas plus avancés, on est pas devins, vois tu.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    bonjour à tous,

    j'ai donc tout repris depuis le début:
    mon but: créer une sorte de site afin que des gens ne connaissant rien au travail (et pour se faciliter la vie) puisse rentrer des données de vol d'avions! et moi à mon tour les exploiter et connaitre où l'avions en est: (et je n'ai trouver que ça parce que les gens sont plus à l'aise avec le net que access ou excel.... enfin bref)

    j'ai donc créer une base de données: fidas_bis
    une table: "t48"
    - id
    - ladate (date)
    - t_vol (temps de vol effectué)
    - c_gtr (cycles gtr)
    - c_apu (cycles apu)
    - ttvol (temps de vol total)
    - tc_gtr (cycles totals gtr)
    - tc_apu (cycles totals apu)

    donc mon but étant de rentrer juste le t_vol, le c_gtr et le c_apu dans un formulaire et d'avoir le total de toutes ses données afin de les exploiter à mon niveau.

    mon formulaire comporte:
    - un input type TEXT :"ladate"
    - un input type TEXT :"t_vol"
    - un input type TEXT :"c_gtr"
    - un input type TEXT :"c_apu"

    je peux donc consulter le vol a la date dite (ça je sais faire!!!!) mais aussi continuer à rentrer les données des vols suivant et suivant etc etc.....

    J'ai repris les cours et essayer de m'adapter à php et PDO.
    j'en suis là.
    J'ai retaper un peu le code et pour lever quelques ambiguités, j'ai décidé d'afficher d'abord les résultats avant, afin de voir si cela fonctionnait.

    Malheureusement je me retrouve avec un parse error à la ligne WHILE, j'ai fait des recherches mais je ne vois pas la solutions, pourriez vous m'indiquez ce que j'aurais pu oublier?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> 
    <head>
    <meta http-equiv="content-type"
    content="text/html; charset=utf-8" /> 
    <link rel="stylesheet" type="text/css" href="25f.css" />
    </head>
    <title>gemin8</title>
    	<body>
    	<?php
    		// on verifie les données
    	IF(isset($_POST['ladate']) AND isset($_POST['t_vol']) AND isset($_POST['c_gtr']) AND isset($_POST['c_apu']));
     
    		// je créer de nouvelles variables
    	{
    	$tvol=$_POST['t_vol'];
    	$cgtr=$_POST['c_gtr'];
    	$capu=$_POST['c_apu'];
    	}
     
    		// Connexion à la base de données
     
    		try
    	{
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$bdd=newPDO('mysql:host=localhost;dbname=fida_bis','root','');
    	}
    		catch(exception $e)
    	{
         die('Erreur : ' . $e->getMessage());
    	}
    		//on récupère les dernieres données
     
    	$reponse=$bdd->query('SELECT ttvol,tc_gtr,tc_apu FROM t48 ORDER BY id DESC LIMIT 1')
     
    		while ($donnees = $reponse->fetch())
    	{
    		// j'affiche les résultats de mes additions
    	?>
    	heure de vol total: <?php echo $donnees['ttvol'] + $tvol; ?> point <br/>
    	cycles gtr: <?php echo $donnees['tc_gtr'] + $cgtr ; ?> cycles <br/>
    	cycles apu: <?php echo $donnees['tc_apu'] + $capu ; ?> cycles <br/>
    	<?php
    	}
     
    	$reponse->closeCursor();
    	?>
    	<a href="page_principal.php">retour</a>
    </body>
    </html>
    merci de votre aide

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse=$bdd->query('SELECT ttvol,tc_gtr,tc_apu FROM t48 ORDER BY id DESC LIMIT 1');
    A mon sens il manque le point virgule ; à la fin de cette ligne, le ; de fin d'instruction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd=newPDO('mysql:host=localhost;dbname=fida_bis','root','');
    Il y a une erreur aussi dans ce code ci-dessus.

    Corrige plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $bdd = new PDO('mysql:host=localhost;dbname=fida_bis','root', '');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    En fait, tu initialise un tableau $pdo_options, mais il n'est pas du tout exploité dans l'instanciation de PDO.
    Du coup, s'il y a erreur coté PDO, tu seras jamais au courant de l'erreur.

    D'ailleurs, il y a 2 façons d'obtenir les éventuels erreurs :
    Soit sous forme d'Exception, alors PDO::ERRMODE_EXCEPTION
    Soit sous forme d'erreur, alors PDO::ERRMODE_WARNING
    (mais par défaut c'est PDO::ERRMODE_SILENT, aucune erreur de renvoyée).

    La gestion des exception demande une certaine pratique, et en général de la POO.
    Si tu ne sais pas trop, préfère les obtenir sous forme d'erreurs.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour RunCodePHP,

    Trés trés bien ta réponse, cela venait bien de ça. Je te remercie, il est vrai que pour la connection a la BDD, je ne faisait que du copier coller, car tous les sites avec des exemples montres quasi le même code.

    J'ai donc changer 2 ou 3 petites choses et cela est concluant, il m'affiche bien tous mes résultats comme je le veux, ne manque plus donc que d'insérer le tout à la suite de la BDD.

    Merci encore à tous!!!

    Voici mon code: je sais qu'on peut faire plus simple, mais en ce qui me concerne pour le moment 'tant que ça fonctionne!!!!!!lol'
    (quand je serais plus doué, je le reprendrais!!!!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> 
    <head>
    <meta http-equiv="content-type"
    content="text/html; charset=utf-8" /> 
    <link rel="stylesheet" type="text/css" href="25f.css" />
    </head>
    <title>gemin8</title>
    	<body>
    	<?php
    		// on verifie les données
    	IF(isset($_POST['ladate']) AND isset($_POST['t_vol']) AND isset($_POST['c_gtr']) AND isset($_POST['c_apu']));
     
    		// je créer de nouvelles variables
    	{
    	$tvol=$_POST['t_vol'];
    	$cgtr=$_POST['c_gtr'];
    	$capu=$_POST['c_apu'];
    	}
     
    		// Connexion à la base de données
     
    		try
    	{
    	$bdd = new PDO('mysql:host=localhost;dbname=fida_bis','root', '');
    	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    	}
    		catch(exception $e)
    	{
         die('Erreur : ' . $e->getMessage());
    	}
    		//on récupère les dernieres données
     
    	$reponse=$bdd->query('SELECT ttvol,tc_gtr,tc_apu FROM t48 ORDER BY id DESC LIMIT 1');
     
    		while ($donnees = $reponse->fetch())
    	{
    		// j'affiche les résultats de mes additions
    	$nombre1= $donnees['ttvol'] + $tvol; 
    	echo 'heure de vol total: '. $nombre1. ' points';?><br/>	
    	<?php $nombre2= $donnees['tc_gtr'] + $cgtr;
    	echo 'cycles gtr: '. $nombre2 . ' cycles';?><br/>
    	<?php $nombre3= $donnees['tc_apu'] + $capu;
    	echo 'cycles apu: '. $nombre3 . ' cycles'; ?><br/>
    	<?php
    	}
    	// on ferme la bdd
    	$reponse->closeCursor();
     
    	//on insert les nouvelles donnees
     
    	?>
    	<a href="page_principal.php">retour</a>
    </body>
    </html>

Discussions similaires

  1. Envoyer des données dans un formulaire en PHP
    Par alexkickstand dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2007, 17h17
  2. Réponses: 1
    Dernier message: 15/12/2006, 14h04
  3. C# - Affichage des données dans un formulaire
    Par paradeofphp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 25/07/2006, 19h23
  4. Réponses: 3
    Dernier message: 07/07/2006, 16h06
  5. Réponses: 6
    Dernier message: 15/02/2006, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo