Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/01/2011, 02h53   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
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
kylimath0907 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 09h00   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Salut

Citation:
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


Citation:
je voudrais en fait récupérer les derniers champs de: tempstotal; totalcycles1; totalcycles2)
En faisant comme ceci par exemple :
Code sql :
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]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 05h50   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
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 :
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:
Citation:
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.
kylimath0907 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 07h40   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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 :
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);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 05h51   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
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
kylimath0907 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 08h51   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
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 :
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]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 01h26   #7
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
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 :
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
kylimath0907 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 08h40   #8
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Code :
$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 :
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 :
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]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 05h02   #9
Invité de passage
 
Inscription : janvier 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 5
Points : 0
Points : 0
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 :
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>
kylimath0907 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h40.


 
 
 
 
Partenaires

Hébergement Web