Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs scripts PHP, la FAQ scripts PHP, toutes les FAQ PHP
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 12/10/2005, 14h53   #1
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Par défaut Effet de bord...

30 éléves presque simultanément valident chacun un formulaire

Code :
1
2
Form method="Post" action='traitement.php"
input $note;
Sur le serveur, on recupère $_POST[note] et on loge dans une base de données la note propre à l'éléve $_SESSION[nom_eleve]

Tout cela fonctionne bien, mais certains dans certains cas auraient rencontré une note affectée à un autre élève.

Question de débutant :
La simultanéité peut-elle créer des effets de bord (je ne sais pas si vraiment c'est le terme) c'est à dire une mauvaise association entre la note et nom de l'élève ?
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 14h56   #2
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Si tu gère bien ton truc non.

Il faudrait voir un peu plus de ton code pour te dire...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 16h01   #3
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Essayons d'imaginer... le formulaire est envoyé.
Sur le serveur est exécuté traitement.php
$note = 20
Je fais la connexion à la base de donnée pour enregistrement...
Ah !!! le serveur est encombré - connexion difficile -
Entre temps le serveur recoit un autre formulaire $note = 15
Ca y est la conexion est ouverte... $note est enregistré dans la bas MySql... 15 ou 20 ?
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 16h03   #4
Invité de passage
 
Inscription : janvier 2004
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 9
Points : 4
Points : 4
fais nous voir un pe de code qui correspond a ton problème
titigrou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 16h04   #5
Membre habitué
 
Inscription : février 2004
Messages : 347
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 347
Points : 109
Points : 109
logiquement le SGBD gère les problèmes de simultanéité, sinon quel serait l'interêt des SGBD
bakonu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 16h23   #6
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
faudrait peut-être voir si ta version de sgbd supporte les transactions...
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 16h30   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Les insert ou update sont théoriquement atomiques.

Il nous faut absolument ton code pour savoir si il y a un risque ou pas.
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 17h13   #8
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Un script de formulaire ...extrait
On expedie la variable Score sur le serveur et on attaque traitement.php

Code :
1
2
3
4
var ResultForm = '<html><body><form name="Results" action="../../traitement.php" method="post" enctype="x-www-form-encoded">';
ResultForm += '<input type="hidden" name="Exercise" value="TEST NAVIGATEUR"></input>';
value="order:realname,Exercise,Score"></input>';
ResultForm += '</form></body></html>';

Traitement.php maintenant
Connexion et recup varible session

Code :
1
2
3
4
5
6
7
8
9
10
<?php session_start();
require_once('../Connections/conn_intranet.php');
$colname_rsActivite = "1";
if (isset($_SESSION['Sess_ID_eleve'])) {
  $colname_rsActivite = (get_magic_quotes_gpc()) ? $_SESSION['Sess_ID_eleve'] : addslashes($_SESSION['Sess_ID_eleve']);
}
$colname2_rsActivite = "1";
if (isset($_SESSION['Sess_ID_quiz'])) {
  $colname2_rsActivite = (get_magic_quotes_gpc()) ? $_SESSION['Sess_ID_quiz'] : addslashes($_SESSION['Sess_ID_quiz']);
}
Recup de la variabe score, mise sur 20 et affectation à la variable note


Code :
1
2
3
4
5
if ($_POST["Score"] == "") $score = "inconnu";
	else { 
	     $score = $_POST["Score"];
		 $note = $score/5;
		 }
recherche d'une note deja present pour ce quiz ds la base et remplacement eventuel
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
 
if ($_SESSION['Sess_nom']<>'VISITEUR') {
 
$quiz_ID=$_SESSION['Sess_ID_quiz'];	
$eleve_ID=$_SESSION['Sess_ID_eleve'];
$nom_classe=$_SESSION['Sess_classe'];
$fait='O';
 
mysql_select_db($database_conn_intranet, $conn_intranet);
$query_rsActivite = sprintf("SELECT * FROM stock_activite WHERE eleve_ID = %s AND quiz_ID=%s", $colname_rsActivite,$colname2_rsActivite);
$rsActivite = mysql_query($query_rsActivite, $conn_intranet) or die(mysql_error());
$row_rsActivite = mysql_fetch_assoc($rsActivite);
$totalRows_rsActivite = mysql_num_rows($rsActivite);
 
if ($totalRows_rsActivite<>'0') 
{
$sql_delete = sprintf("DELETE FROM stock_activite WHERE eleve_ID = %s AND quiz_ID=%s", $colname_rsActivite,$colname2_rsActivite);
mysql_query($sql_delete) or die('Erreur SQL !'.$sql_delete.mysql_error()); 
 
}
 
$sql = "INSERT INTO stock_activite VALUES('$ID_activite','$eleve_ID','$nom_classe','$quiz_ID','$note','$debut','$fin','$fait')"; 
 
mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error()); 
mysql_close();  
}
?>
et affichage note dans une popup ...
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
<HTML>
<link href="../style_jaune.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}
//-->
</script>
<title>Enregistrement des notes</title><BODY >
<p><img src="../patate.jpg" width="324" height="39" align="top"> </p>
<p>
<script type="text/javascript" language="javascript">
<!-- Debut
function lien(url) {
  var maitre; 
  if (opener.closed) {
    // si la fenêtre principale est fermée
    maitre=window.open("","nomprincipal","height=200,witdth=150,left=120,top=150","toolbar=no, location=yes,status=yes,menubar=no, scrollbars=no,resizable=yes,copyhistory=no");
    maitre.location.href = url;
  } else {
    // Si la fenêtre principale est ouverte
    opener.location.href = url;
 
  }
  // Ferme le pop-up automatiquement
  NewName=window.close();
}
// Fin -->
</script>
  <?
echo '<strong>'.$_SESSION['Sess_nom']." ".$_SESSION['Sess_prenom']." ".$_SESSION['Sess_classe'].'</strong><BR><BR> ';
echo "Note : ".$note." /20  ";
 
if ($_SESSION['Sess_nom']<>'VISITEUR')
{ echo "<BR>Note enregistrée."; 
} ?> </body>
</html>
<?php
if ($_SESSION['Sess_nom']<>'VISITEUR') {
mysql_free_result($rsActivite);
}
?>
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 17h22   #9
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
En depouillant mon code pour le présenter, j'ai remarqué au debut de mon traitement php cette redondance

Code :
1
2
3
4
5
6
<?php
require_once('../Connections/conn_intranet.php');
session(start)
require_once('../Connections/conn_intranet.php');
 
...
Quel peut etre l'impact de ce type d'erreur ?
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 17h24   #10
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
hmm a priori pas grand chose puisque tu utilises require_once mais bon moi je m'inquiéterais plutot du session_start entre les deux...
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 17h27   #11
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
A priori aucun puisque ce sont des require_once
Quand au session_start, cf la doc :
Citation:
Depuis PHP 4.3.3, l'appel à session_start alors que la session a déjà débuté, retournera une erreur de niveau E_NOTICE . Le second appel à la fonction sera tout simplement ignoré
donc aucun impact
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 17h32   #12
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
recherche d'une note deja present pour ce quiz ds la base et remplacement eventuel
Qu'est ce que ca veut dire ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 17h37   #13
Rédacteur
 
Homme
Geek entrepreneur
Inscription : novembre 2004
Messages : 1 035
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Geek entrepreneur

Informations forums :
Inscription : novembre 2004
Messages : 1 035
Points : 1 813
Points : 1 813
SELECT * FROM stock_activite WHERE eleve_ID = %s AND quiz_ID=%s
Ne faudrait-il pas écrire :
SELECT * FROM stock_activite WHERE eleve_ID = '%s' AND quiz_ID='%s'
?
hugo123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 17h57   #14
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Si un enregistrement existe pour cet eleve et ce quiz, je modifie sa note sinon je crée un nouvel enregistrement

Pouvez vous m'en dire plus sur cette erreur de quote...

Cela pourrait-il avoir une incidence sur le choix d'un élève qui ne serait pas le bon et affectation de la note à ce dernier... ?
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 18h03   #15
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Il faut en effet te tourner vers les transactions.

Mise à part ça, il y a l'instruction UPDATE pour pouvoir modifier une donnée dans ta table. Ce n'est pas la peine de supprimer puis de réinsérer pour faire une modification...
EDIT : laisse tomber ce commentaire
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2005, 18h11   #16
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Tiens ca pourra t'aider !
http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1
Mr N. 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 21h15.


 
 
 
 
Partenaires

Hébergement Web