par
aerosky2 » 14 mai 2013, 09:20
Bonjour à tous et merci par avance.
Je suis entrain d'adapter les script php d'une appli que je réalise avec dreamweaver.
Mon app dispose d'une base de données de 4 tables, celles ci contiennent des clefs étrangères pour les rendre relationnelles mais je fais les jointures à la main, je ne les ai pas déclarées. Donc quand j'ai besoin j'utilise WHERE et AND pour connecter les tables ensembles. (concecernant les suppressions je fais en deux étapes si je supprime un élève, j'ai un second comportement qui supprime les évaluations liées à cet élève).
J'aimerais compléter un comportement php de dreamweaver qui me permet d'insérer un éléve dans une de mes tables en créant dans la foulée les 120 techniques que cet élève devra maîtriser. C'est ma table évaluation (elevesID; techniquesID; eval; date; auteur) qui doit être additionnée à chaque fois d'une nouvelle technique (je considère que chaque technique n'a qu'une seule évaluation possible elle est ensuite mise à jour) un item de cette table est donc identifié par la double clef étrangère elevesID et techniquesID.
J'ai donc commencé par récupérer le comportement d'ajout d'un élève, je tente ensuite de récupérer l'id via mysql_insert_id()// ne fonctionne pas
puis je lance une requête sur la table technique pour récupérer l'id de la technique en cours. Au sein de cette boucle je tente ensuite d'insérer à chaque tour l'évaluation identifiée par elevesID et techniquesID afin de créer les 120 techniques (les autres champs de cette table sont laissés à leurs valeurs par défaut et notamment l'éval à 7 qui correspond à non évaluée).
Je rencontre deux problèmes: Le premier c'est que je n'arrive pas à récupérer l'id de l'élève fraîchement créé, le second lorsque je mets un id fictif pour celui-ci sql me retourne une duplicate entry à chaque boucle du tableau considérant que elevesID (que j'utilise donc à chaque tour ) est le seul identifiant ce cette table évaluation alors que l'identifiant de cette table est composé des deux champs élèvesID et techniquesID.
Ouf j'ai cru que je ne parviendrais pas à vous expliquer tout cela. Je suis sauvé ou presque...
Il est à noter que lorsque j'insère directement depuis phpmyadmin des champs dans ma base évaluation en donnant des elevesID et techniquesID comme je le souhaite je n'ai pas d'erreurs.
<?php require_once('../Connections/mysqlConnection.php'); ?>
<?php
if (!isset($_SESSION)) {
session_start();
}
$MM_authorizedUsers = "super";
$MM_donotCheckaccess = "false";
// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {
// For security, start by assuming the visitor is NOT authorized.
$isValid = False;
// When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
// Therefore, we know that a user is NOT logged in if that Session variable is blank.
if (!empty($UserName)) {
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login.
// Parse the strings into arrays.
$arrUsers = Explode(",", $strUsers);
$arrGroups = Explode(",", $strGroups);
if (in_array($UserName, $arrUsers)) {
$isValid = true;
}
// Or, you may restrict access to only certain users based on their username.
if (in_array($UserGroup, $arrGroups)) {
$isValid = true;
}
if (($strUsers == "") && false) {
$isValid = true;
}
}
return $isValid;
}
$MM_restrictGoTo = "index.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {
$MM_qsChar = "?";
$MM_referrer = $_SERVER['PHP_SELF'];
if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0)
$MM_referrer .= "?" . $_SERVER['QUERY_STRING'];
$MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
header("Location: ". $MM_restrictGoTo);
exit;
}
?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
//début de mon code adapté
//etape1 création de l'étudiant depuis le forumulaire
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO eleves (nom, prenom, classe, tel, mail) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['nom'], "text"),
GetSQLValueString($_POST['prenom'], "text"),
GetSQLValueString($_POST['classe'], "text"),
GetSQLValueString($_POST['tel'], "text"),
GetSQLValueString($_POST['mail'], "text"));
mysql_select_db($database_mysqlConnection, $mysqlConnection);
$Result1 = mysql_query($insertSQL, $mysqlConnection) or die(mysql_error());
//récupération de l'ID de l'étudiant ajouté
$eleveID = mysql_insert_id();
echo $eleveID;
}
//Etape2 lancement de la requete pour trouver les 121 techniques enregistrées dans la database
mysql_select_db($database_mysqlConnection, $mysqlConnection);
$query_Recordset1 = "SELECT ID
FROM techniques" ;
$Recordset1 = mysql_query($query_Recordset1, $mysqlConnection) or die(mysql_error());
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$eleveID= 555;
while( $row_Recordset1 = mysql_fetch_assoc($Recordset1)){
$techniqueID = $row_Recordset1['ID'];
echo "ddddd ".$eleveID." ".$techniqueID;
//Etape3: insertion du code pour créer les 120 techniques
$insertSQL2 = sprintf("INSERT INTO evaluations (elevesID, techniquesID, date) VALUES (%s, %s, %s)",
GetSQLValueString($eleveID, "int"), //je récupère l'id de l' étudiant depuis la fonction mysql_insert_id()
GetSQLValueString($techniqueID, "smallint"), //de m^me à partir du tabelau mysql_fetch
'NOW()'
);
}
//création effective des techniques
mysql_select_db($database_mysqlConnection, $mysqlConnection);
$Result2 = mysql_query($insertSQL2, $mysqlConnection) or die(mysql_error());
//redirection
$insertGoTo = "gestionEtudiant.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
//autre////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
mysql_select_db($database_mysqlConnection, $mysqlConnection);
$query_rsMenuClasses = "SELECT DISTINCT classe FROM eleves ORDER BY classe ASC";
$rsMenuClasses = mysql_query($query_rsMenuClasses, $mysqlConnection) or die(mysql_error());
$row_rsMenuClasses = mysql_fetch_assoc($rsMenuClasses);
$totalRows_rsMenuClasses = mysql_num_rows($rsMenuClasses);
?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajouter un étudiant</title>
<link href="styleAdmin.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="styleMenuHorizontal_6.css" />
<link href="style1.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
<div id="conteneur">
<div id="entete"><img src="../images/ban2.jpg" alt="logo Guitares Electriques" width="750" height="150" /></div>
<div id="navbar">
<div id="menu">
<ul>
<li><a href="gestionEtudiant.php">Gestion des étudiants</a></li>
<li><a id="ok" href="#">Gestion des évals</a></li>
<ul id="sousmenu">
<li><a href="evalGestionEtudiant.php">Par étudiant</a></li>
<li><a href="evalGestionAtelier.php">Par étudiant et atelier</a></li>
<li><a href="evalGestionDate.php">Par étudiant et date</a></li>
<li><a href="evalGestionTechnique.php">Par étudiant et tech</a></li>
<li><a href="evalLast.php">Les 3 dernières</a></li>
</ul>
<li><a href="../index.php">Voir le site</a></li>
<li><a href="#">Déconnexion</a></li>
</ul>
</div><!--fin menu-->
</div><!--fin navbar-->
<div id="contenu">
<h1>Ajouter un étudiant</h1>
<p>Modifier la classe celle affichée est une valeur par défaut.</p>
<p><a href="gestionEtudiant.php">Retour</a></p>
<form action="<?php echo $editFormAction; ?>" name="form1" id="form1" method="POST">
<table width="268" border="0">
<tr>
<th width="98" class="marronTableau" scope="row">Nom</th>
<td width="154" class="jauneTableau"><input type="text" name="nom" id="nom" /></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Prénom</th>
<td class="jauneTableau"><input type="text" name="prenom" id="prenom" /></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Classe</th>
<td class="jauneTableau"><select name="classe" id="classe">
<?php
do {
?>
<option value="<?php echo $row_rsMenuClasses['classe']?>"><?php echo $row_rsMenuClasses['classe']?></option>
<?php
} while ($row_rsMenuClasses = mysql_fetch_assoc($rsMenuClasses));
$rows = mysql_num_rows($rsMenuClasses);
if($rows > 0) {
mysql_data_seek($rsMenuClasses, 0);
$row_rsMenuClasses = mysql_fetch_assoc($rsMenuClasses);
}
?>
</select></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Téléphone</th>
<td class="jauneTableau"><input type="text" name="tel" id="tel" /></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Mail</th>
<td class="jauneTableau"><input type="text" name="mail" id="mail" /></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Fichier photo</th>
<td class="jauneTableau"> </td>
</tr>
<tr>
<th scope="row"> </th>
<td><input type="submit" name="button" id="button" value="Valider " />
<input type="reset" name="Reset" id="Reset" value="Effacer" /></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1" />
</form>
<p> </p>
<p> </p>
</div>
<div id="pied"></div>
</div>
<!--insert de ma bibliothèque jquery-->
<script src="jquery-1.9.1.js"></script>
<!--code js jquery -->
<script>
$(document).ready(function(){
$("#ok").click(function(){
$("#sousmenu").toggle();
});
});
</script>
</body>
</html>
<?php
mysql_free_result($rsMenuClasses);
?>
Le message d'erreur ici

Bonjour à tous et merci par avance.
Je suis entrain d'adapter les script php d'une appli que je réalise avec dreamweaver.
Mon app dispose d'une base de données de 4 tables, celles ci contiennent des clefs étrangères pour les rendre relationnelles mais je fais les jointures à la main, je ne les ai pas déclarées. Donc quand j'ai besoin j'utilise WHERE et AND pour connecter les tables ensembles. (concecernant les suppressions je fais en deux étapes si je supprime un élève, j'ai un second comportement qui supprime les évaluations liées à cet élève).
J'aimerais compléter un comportement php de dreamweaver qui me permet d'insérer un éléve dans une de mes tables en créant dans la foulée les 120 techniques que cet élève devra maîtriser. C'est ma table évaluation (elevesID; techniquesID; eval; date; auteur) qui doit être additionnée à chaque fois d'une nouvelle technique (je considère que chaque technique n'a qu'une seule évaluation possible elle est ensuite mise à jour) un item de cette table est donc identifié par la double clef étrangère elevesID et techniquesID.
J'ai donc commencé par récupérer le comportement d'ajout d'un élève, je tente ensuite de récupérer l'id via mysql_insert_id()// ne fonctionne pas
puis je lance une requête sur la table technique pour récupérer l'id de la technique en cours. Au sein de cette boucle je tente ensuite d'insérer à chaque tour l'évaluation identifiée par elevesID et techniquesID afin de créer les 120 techniques (les autres champs de cette table sont laissés à leurs valeurs par défaut et notamment l'éval à 7 qui correspond à non évaluée).
Je rencontre deux problèmes: Le premier c'est que je n'arrive pas à récupérer l'id de l'élève fraîchement créé, le second lorsque je mets un id fictif pour celui-ci sql me retourne une duplicate entry à chaque boucle du tableau considérant que elevesID (que j'utilise donc à chaque tour ) est le seul identifiant ce cette table évaluation alors que l'identifiant de cette table est composé des deux champs élèvesID et techniquesID.
Ouf j'ai cru que je ne parviendrais pas à vous expliquer tout cela. Je suis sauvé ou presque...
Il est à noter que lorsque j'insère directement depuis phpmyadmin des champs dans ma base évaluation en donnant des elevesID et techniquesID comme je le souhaite je n'ai pas d'erreurs.
[php]<?php require_once('../Connections/mysqlConnection.php'); ?>
<?php
if (!isset($_SESSION)) {
session_start();
}
$MM_authorizedUsers = "super";
$MM_donotCheckaccess = "false";
// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {
// For security, start by assuming the visitor is NOT authorized.
$isValid = False;
// When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
// Therefore, we know that a user is NOT logged in if that Session variable is blank.
if (!empty($UserName)) {
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login.
// Parse the strings into arrays.
$arrUsers = Explode(",", $strUsers);
$arrGroups = Explode(",", $strGroups);
if (in_array($UserName, $arrUsers)) {
$isValid = true;
}
// Or, you may restrict access to only certain users based on their username.
if (in_array($UserGroup, $arrGroups)) {
$isValid = true;
}
if (($strUsers == "") && false) {
$isValid = true;
}
}
return $isValid;
}
$MM_restrictGoTo = "index.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {
$MM_qsChar = "?";
$MM_referrer = $_SERVER['PHP_SELF'];
if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0)
$MM_referrer .= "?" . $_SERVER['QUERY_STRING'];
$MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
header("Location: ". $MM_restrictGoTo);
exit;
}
?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
//début de mon code adapté
//etape1 création de l'étudiant depuis le forumulaire
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO eleves (nom, prenom, classe, tel, mail) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['nom'], "text"),
GetSQLValueString($_POST['prenom'], "text"),
GetSQLValueString($_POST['classe'], "text"),
GetSQLValueString($_POST['tel'], "text"),
GetSQLValueString($_POST['mail'], "text"));
mysql_select_db($database_mysqlConnection, $mysqlConnection);
$Result1 = mysql_query($insertSQL, $mysqlConnection) or die(mysql_error());
//récupération de l'ID de l'étudiant ajouté
$eleveID = mysql_insert_id();
echo $eleveID;
}
//Etape2 lancement de la requete pour trouver les 121 techniques enregistrées dans la database
mysql_select_db($database_mysqlConnection, $mysqlConnection);
$query_Recordset1 = "SELECT ID
FROM techniques" ;
$Recordset1 = mysql_query($query_Recordset1, $mysqlConnection) or die(mysql_error());
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$eleveID= 555;
while( $row_Recordset1 = mysql_fetch_assoc($Recordset1)){
$techniqueID = $row_Recordset1['ID'];
echo "ddddd ".$eleveID." ".$techniqueID;
//Etape3: insertion du code pour créer les 120 techniques
$insertSQL2 = sprintf("INSERT INTO evaluations (elevesID, techniquesID, date) VALUES (%s, %s, %s)",
GetSQLValueString($eleveID, "int"), //je récupère l'id de l' étudiant depuis la fonction mysql_insert_id()
GetSQLValueString($techniqueID, "smallint"), //de m^me à partir du tabelau mysql_fetch
'NOW()'
);
}
//création effective des techniques
mysql_select_db($database_mysqlConnection, $mysqlConnection);
$Result2 = mysql_query($insertSQL2, $mysqlConnection) or die(mysql_error());
//redirection
$insertGoTo = "gestionEtudiant.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
//autre////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
mysql_select_db($database_mysqlConnection, $mysqlConnection);
$query_rsMenuClasses = "SELECT DISTINCT classe FROM eleves ORDER BY classe ASC";
$rsMenuClasses = mysql_query($query_rsMenuClasses, $mysqlConnection) or die(mysql_error());
$row_rsMenuClasses = mysql_fetch_assoc($rsMenuClasses);
$totalRows_rsMenuClasses = mysql_num_rows($rsMenuClasses);
?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajouter un étudiant</title>
<link href="styleAdmin.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="styleMenuHorizontal_6.css" />
<link href="style1.css" rel="stylesheet" type="text/css" media="all" />
</head>
<body>
<div id="conteneur">
<div id="entete"><img src="../images/ban2.jpg" alt="logo Guitares Electriques" width="750" height="150" /></div>
<div id="navbar">
<div id="menu">
<ul>
<li><a href="gestionEtudiant.php">Gestion des étudiants</a></li>
<li><a id="ok" href="#">Gestion des évals</a></li>
<ul id="sousmenu">
<li><a href="evalGestionEtudiant.php">Par étudiant</a></li>
<li><a href="evalGestionAtelier.php">Par étudiant et atelier</a></li>
<li><a href="evalGestionDate.php">Par étudiant et date</a></li>
<li><a href="evalGestionTechnique.php">Par étudiant et tech</a></li>
<li><a href="evalLast.php">Les 3 dernières</a></li>
</ul>
<li><a href="../index.php">Voir le site</a></li>
<li><a href="#">Déconnexion</a></li>
</ul>
</div><!--fin menu-->
</div><!--fin navbar-->
<div id="contenu">
<h1>Ajouter un étudiant</h1>
<p>Modifier la classe celle affichée est une valeur par défaut.</p>
<p><a href="gestionEtudiant.php">Retour</a></p>
<form action="<?php echo $editFormAction; ?>" name="form1" id="form1" method="POST">
<table width="268" border="0">
<tr>
<th width="98" class="marronTableau" scope="row">Nom</th>
<td width="154" class="jauneTableau"><input type="text" name="nom" id="nom" /></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Prénom</th>
<td class="jauneTableau"><input type="text" name="prenom" id="prenom" /></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Classe</th>
<td class="jauneTableau"><select name="classe" id="classe">
<?php
do {
?>
<option value="<?php echo $row_rsMenuClasses['classe']?>"><?php echo $row_rsMenuClasses['classe']?></option>
<?php
} while ($row_rsMenuClasses = mysql_fetch_assoc($rsMenuClasses));
$rows = mysql_num_rows($rsMenuClasses);
if($rows > 0) {
mysql_data_seek($rsMenuClasses, 0);
$row_rsMenuClasses = mysql_fetch_assoc($rsMenuClasses);
}
?>
</select></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Téléphone</th>
<td class="jauneTableau"><input type="text" name="tel" id="tel" /></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Mail</th>
<td class="jauneTableau"><input type="text" name="mail" id="mail" /></td>
</tr>
<tr>
<th class="marronTableau" scope="row">Fichier photo</th>
<td class="jauneTableau"> </td>
</tr>
<tr>
<th scope="row"> </th>
<td><input type="submit" name="button" id="button" value="Valider " />
<input type="reset" name="Reset" id="Reset" value="Effacer" /></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1" />
</form>
<p> </p>
<p> </p>
</div>
<div id="pied"></div>
</div>
<!--insert de ma bibliothèque jquery-->
<script src="jquery-1.9.1.js"></script>
<!--code js jquery -->
<script>
$(document).ready(function(){
$("#ok").click(function(){
$("#sousmenu").toggle();
});
});
</script>
</body>
</html>
<?php
mysql_free_result($rsMenuClasses);
?>
[/php]
Le message d'erreur ici
[img]http://mediafood.org/ajout.PNG[/img]