|
|
|
|
Bonjour,
je suis en stage actuellement, et je dois réaliser un formulaire en php (application Web).
Aillant pratiquement fini l'application, je me suis tourné vers la résolution des problèmes, mais je bloque sur 4 d'entre eux.
1- Dans un formulaire, j'utilise une liste remplis dynamiquement par ma DB, elle marche très bien, mais elle pose problème au niveau de l'affichage des accents, ceux-ci sont remplacé par un ? Ma DB et mes pages ont le même charset (UTF-8), mon navigateur est aussi en UTF-8. De plus, je ne rencontre ce problème que pour ma liste, sinon, les accents apparaissent normalement.
2- Je rencontre un autre problème avec cette liste. C'est en fait une liste liée en AJAX, la première liste est directement codé sur la page, quand à la deuxième c'est celle qui est remplis dynamiquement par ma DB. Jusque la, tout va bien. C'est après où ça merde. En effet, je peux faire un choix dans la première liste, et la deuxième affiche les choix disponible par rapport à la première. Mais si je change le choix de la première, la deuxième merde. Je me retrouve avec une liste ne proposant qu'une ligne blanche (un exemple pour vous éclairer => http://i55.servimg.com/u/f55/11/55/60/96/exempl10.jpg)
3- Dans une page où je fais un récapitulatif des données de la DB, je fais une alerte JavaScript qui récapitule tout ce que contient la ligne choisi. Mais cette alerte est complété avec le résultat d'une requète MySQL, cependant certains résultats contiennent des quotes, donc je cherche un moyen pour les echapper, car elles empèchent l'affichage de l'alerte. (Elle marche très bien dans les cas où il n'y a pas de quotes dans le résultat de la requète.
4- Le récapitulatif est présenté sous forme de tableau. Sur la page, j'ai un menu à gauche (celui-ci à la propriété position: fixed; en CSS) et le tableau à droite donc. Mais il dépasse de la page, donc pour voir les données en dehors de la page, il faut le faire défiler de droite à gauche. Cependant il passe au-dessus du menu. Je cherche donc un moyen pour qu'il sois délimité par le menu. (En gros, je souhaite que le bord gauche du tableau disparraise lorsqu'il dépasse une certaine zone) J'avais pensé aux frames HTML et aux pseudo-frames PHP, mais ça n'a pas marché (ou c'est moi qui suis pas doué)
Voila, en espérant avoir une solution ^^
Configuration: Windows XP Firefox 2.0.0.9
1- Essaie de mettre, au moment où tu remplis la liste, un utf8_encode() ou decode si cela ne marche pas
|
Alors le code de la page formulaire.php (je l'ai épuré de tout ce qui ne touchais pas au problème.)
<?
include 'connect.inc';
echo "<html>
<head>
<link rel=\"stylesheet\" media=\"screen\" type=\"text/css\" title=\"style\" href=\"style.css\" />
<script type='text/javascript'>
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}
else if(window.ActiveXObject){
try {
xhr = new ActiveXObject(\"Msxml2.XMLHTTP\");
} catch (e) {
xhr = new ActiveXObject(\"Microsoft.XMLHTTP\");
}
}
else {
alert(\"Navigateur inapte\");
xhr = false;
}
return xhr;
}
//Fonction du bouton
function change(){
var xhr = getXhr();
//Action défini par la réponse
xhr.onreadystatechange = function(){
//alert(xhr.readyState);
//Si tout OK
if(xhr.readyState == 4 && xhr.status == 200){
//alert(xhr.responseText);
di = xhr.responseText;
document.getElementById('diplome').innerHTML = di;
}
}
//Methode POST
xhr.open(\"POST\",\"diplomeselect.php\",true);
//à ne pas oublier
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
//ne pas oublier de poster les arguments (ici domaine/discipline/niveau (ddn))
code_ddn = document.getElementById('ddn').options[document.getElementById('ddn').selectedIndex].value;
xhr.send(\"code_Ddn=\"+code_ddn);
//alert(code_ddn);
}
</script>
</head>
<body>
<div id=\"formulaire\">
<fieldset class=\"form\">
<legend>Saisie des étudiants pour les salons</legend>
<form method=\"post\" action=\"#\" name=\"tata\" id=\"tata\">
<p><label for=\"souhait\">Choix des études suivis : (Domaine-Discipline-Niveau)</label><br>
<select name='ddn' id='ddn' onchange='change()'>
<optgroup label=\"Droit, Economie, Gestion\">
<optgroup label=\">Droit, Sciences Politiques\">
<option value=\"101L\">Licence</option>
<option value=\"101M\">Master</option>
<option value=\"101D\">Doctorat</option>
</optgroup>
<optgroup label=\">Sciences Economiques - Gestion (hors AES)\">
<option value=\"102L\">Licence</option>
<option value=\"102M\">Master</option>
<option value=\"102D\">Doctorat</option>
</optgroup>
<optgroup label=\">Administration Economique et Social (AES)\">
<option value=\"103L\">Licence</option>
<option value=\"103M\">Master</option>
<option value=\"103D\">Doctorat</option>
</optgroup>
</optgroup>
<optgroup label=\"Arts, Lettres, Langues\">
<optgroup label=\">Lettres - Sciences du langage - Arts\">
<option value=\"204L\">Licence</option>
<option value=\"204M\">Master</option>
<option value=\"204D\">Doctorat</option>
</optgroup>
<optgroup label=\">Langues\">
<option value=\"205L\">Licence</option>
<option value=\"205M\">Master</option>
<option value=\"205D\">Doctorat</option>
</optgroup>
</optgroup>
<optgroup label=\"Sciences, Technologie, Santé\">
<optgroup label=\">Sciences et Structures de la Matière (SSM)\">
<option value=\"307L\">Licence</option>
<option value=\"307M\">Master</option>
<option value=\"307D\">Doctorat</option>
</optgroup>
<optgroup label=\">Sciences et Technologie/ Sciences pour l'Ingénieur (SPI)\">
<option value=\"308L\">Licence</option>
<option value=\"308M\">Master</option>
<option value=\"308D\">Doctorat</option>
</optgroup>
<optgroup label=\">Sciences de la Nature et de la Vie (SNV)\">
<option value=\"309L\">Licence</option>
<option value=\"309M\">Master</option>
<option value=\"309D\">Doctorat</option>
</optgroup>
<optgroup label=\">Médecine\">
<option value=\"311L\">Licence</option>
<option value=\"311M\">Master</option>
<option value=\"311D\">Doctorat</option>
</optgroup>
<optgroup label=\">Odontologie\">
<option value=\"312L\">Licence</option>
<option value=\"312M\">Master</option>
<option value=\"312D\">Doctorat</option>
</optgroup>
<optgroup label=\">Pharmacie\">
<option value=\"313L\">Licence</option>
<option value=\"313M\">Master</option>
<option value=\"313D\">Doctorat</option>
</optgroup>
</optgroup>
<optgroup label=\"Sciences Humaines et Sociales\">
<optgroup label=\">Sciences Humaines et Sociales (SHS)\">
<option value=\"406L\">Licence</option>
<option value=\"406M\">Master</option>
<option value=\"406D\">Doctorat</option>
</optgroup>
<optgroup label=\">Sciences et Techniques des Activités Physiques et Sportives (STAPS)\">
<option value=\"410L\">Licence</option>
<option value=\"410M\">Master</option>
<option value=\"410D\">Doctorat</option>
</optgroup>
</optgroup>
</select>
<br />
<div id='diplome' style='display:inline'>
</div>
</p>
<input type=\"submit\" class=\"submit\" value=\"Envoyer\" />
</form>
</fieldset>
</div>
</body>
</html>";
?>
Et le code de la page diplomeselect.php:
<?php
echo "<select name='diplome' id='diplome'>";
if(isset($_REQUEST["code_Ddn"])){
mysql_connect("localhost","root","");
mysql_select_db("salon");
$res = mysql_query("SELECT code_diplome,libelle FROM diplome_info WHERE code_ddn='".$_REQUEST["code_Ddn"]."' ORDER BY code_ddn");
if (mysql_num_rows($res)>0)
{
echo "<option value='-1'>Choix du diplome</option>";
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["code_diplome"]."'>".$row["libelle"]."</option>";
}
}
else
{
echo "<option value='-1'>Faîtes un choix.</option>";
}
}
echo "</select>";
?>
Je te fais un deuxième post pour le 4, histoire que ce soit claire. Sinon, j'avais essayé encode, mais ça n'avais rien changé, je vais essayer decode pour voir. Et sinon, j'avais pas du tout pensé a addslashes() ^^" |
Voici la page du recapitulatif.
<?
include 'connect.inc';
$affichage = "SELECT id_eleve, nom, prenom, date_naissance, email, universite, libelle FROM eleve NATURAL JOIN diplome_info ORDER BY id_eleve DESC";
$result_table = mysql_query($affichage);
//echo $result_table;
$nlignes = mysql_num_rows($result_table);
//echo $nlignes;
echo "<html><head>
<link rel=\"stylesheet\" media=\"screen\" type=\"text/css\" title=\"style\" href=\"style.css\" />
</head><body>
<script language=\"javascript\">
code = prompt('Entrez le mot de passe. Vous avez 1 seul essais... Attention, respecter les majuscules et les minuscules','Entrer le mot de passe ici');
if (code != \"test\")//Mot de passe
{
location.href=\"formulaire.php\";//redirection en cas de mauvais mot de passe.
}
</script>
<div class=\"menu\">
<p id=\"mtitle\">Menu</p>
<p><a href=\"formulaire.php?id_eleve=0&modification=0\">Ajouter un nouvel inscrit</a><br><br>
<a href=\"export.php\">Exporter</a></p>
</div>
<br>
<div class=\"tableaureca\">
<fieldset id=\"recap\">
<legend>Tableau des inscrits aux salons</legend>
<table border=\"1\" id=\"table\">\n
<tr id=\"headt\">
<td>Nom</td>
<td>Prenom</td>
<td>Date de naissance</td>
<td>Email</td>
<td>Détail</td>
<td>Modifier</td>
<td>Supprimer</td>
</tr>";
for($i=0;$i<$nlignes;$i++)
{
echo "<tr>";
$ligne = mysql_fetch_row($result_table);
echo "<td>{$ligne[1]}</td>
<td>{$ligne[2]}</td>
<td>{$ligne[3]}</td>
<td>{$ligne[4]}</td>
<td><button type=\"button\" onclick=\"JavaScript: alert(";
echo "'Nom : ".$ligne[1]." \\nPrénom : ".$ligne[2]." \\nDate de naissance : ".$ligne[3]." \\nEmail : ".$ligne[4]." \\nUniversité actuelle : ".$ligne[5]." \\nDiplôme souhaité : ".$ligne[6]."'";
echo ")\"><img src=\"little-loupe.png\" alt=\"Détail\" border=\"0\"/></button></td>
<td><a href=\"formulaire.php?id_eleve=$ligne[0]&modification=1\" class=\"buttonform\"><img src=\"little-modifier.png\" alt=\"Modifier\" border=\"0\"/></a></td>
<td><a href=\"formulaire.php?id_eleve=$ligne[0]&modification=2\" class=\"buttonform\"><img src=\"little-supprimer.png\" alt=\"Supprimer\" border=\"0\"/></a></td>";
echo "</tr>\n";
}
echo "</table>
</fieldset>
</div>
</body>
</html>";
?>
et le css qui est lié au positionnement...: .menu
{
width: 180px;
position: fixed;
top: 54px;
left: 19px;
}
#mtitle
{
font-size: large;
text-decoration: underline;
font-weight: bolder;
}
.tableaureca
{
width: 600px;
position: absolute;
top: 30px;
left: 240px;
}
#recap
{
width: 590px;
}
#table
{
text-align: center;
margin: 10px;
font-weight: bold;
color: #AD592C;
font-size: 15px;
} |
Triple post tant qu'à faire...
|
Euuuh, y'aurais moyen de voir les pages en ligne (Pour le 4)? ^^''
|
Hum, le problème, c'est qu'elles sont pas en lignes. C'est une applacation PHP sur clé USB...
|
Ok merci, t'as cas me l'envoyer en PV
<?php [...] echo "<html><head> [...] [...] </html>"; ?> Tu te fais super chier comme sa, tu dois faire gaffe aux accents etc.. le mieu: <?php [...] ?> <html><head> [...] [...] </html> <?php [...] ?> Ensuite: if (code != \"test\")//Mot de passe N'importe qui (ou presque) peut casser cette vérification... c'est vraiment sécurité 0 On dit que les oiseaux sont libres dans le ciel, Mais la vraie liberté n'est pas celle d'avoir un endroit où se poser ? |
Pour le premier, je sais que c'est super chiant, mais j'avais commencé comme ça, car c'était une petite application à la base (environ 300 lignes de code) mais mon chef me donnait le travail par petit bout, et j'ai utilisé l'application comme base.
|
CSS Tu met:
.menu
{
width: 180px;
position: fixed;
top: 0px;
left: 0px;
height: 100%;
background-color: #FDEDC1;
z-index: 2;
}
.sMenu
{
margin-left: 19px;
margin-top: 54px;
}
HTML tu met: <div class="menu"> <div class="sMenu"> <p id="mtitle">Menu</p> <p><a href="formulaire.php?id_eleve=0&modification=0">Ajouter un nouvel inscrit</a><br><br> <a href="export.php">Exporter</a></p> </div> </div> Si j'ai bien compris le 2/ n'est pas réglé? On dit que les oiseaux sont libres dans le ciel, Mais la vraie liberté n'est pas celle d'avoir un endroit où se poser ? |
//alert(xhr.responseText); Décommente cette ligne Remplace ta page PHP par sa: <?php
foreach ($_POST as $k -> $v)
{
echo $k.' => '.$v."\r\n";
}
?>
Sa alert quoi sur la page? Tu la vois ta variable? On dit que les oiseaux sont libres dans le ciel, Mais la vraie liberté n'est pas celle d'avoir un endroit où se poser ? |
Pourtant, lorsque je fais un choix, une première fois, ma deuxième liste s'affiche correctement.
|
Huuum, c'est bizarre, chez moi le code marche bien...
|
Aaaaaaaahhhh mon dieu qu'on est con.
|
document.getElementById('diplome').innerHTML = di;
=>
document.getElementById('diplomeDiv').innerHTML = di;
Et
<div id='diplome' style='display:inline'>
=>
<div id='diplomeDiv' style='display:inline'>
Au premier essaie, il va ecrire le select, dans le "truc" qui porte l'id "diplome", donc pas de soucis, il met le select dans le div. Mais après, quand tu changes, il veut écrire le select dans le "truc" qui porte l'id "diplome" mais le problème c'est que le div a cette id, mais le select mis précédemment aussi, donc il ne sait pas le quel choisir! On dit que les oiseaux sont libres dans le ciel, Mais la vraie liberté n'est pas celle d'avoir un endroit où se poser ? |