JeuWeb - Crée ton jeu par navigateur
un showmessage() avec PHP ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : un showmessage() avec PHP ? (/showthread.php?tid=2801)

Pages : 1 2 3 4 5 6


RE: un showmessage() avec PHP ? - niahoo - 13-09-2010

essaie mon dernier code avec le "window.onload".

ça peut venir de là. maintenant ça ne règlera pas le fait que tu te trompes dans ta compréhension du fonctionnement :

que sur un fichier .php tu aies du code php et du javascript présents tous les deux n'implique en rien que l'un puisse communiquer avec l'autre.

Php sert ici uniquement à générer du texte qui sera envoyé au navigateur. que ce texte contienne du javascript, du HTML, ou un exemple de code php, php s'en fiche royalement, pour lui ce ne sont que des chaines de caractères qu'il va écrire sur la sortie standard de l'ordinateur, qui sera ensuite récupérée par apache pour être envoyé au navigateur.

si tu veux que du javascript aille chercher des infos depuis une autre page php sans rechargement de page, il faudra bien charger la page en question. javascript peut le faire en arrière plan, ce procédé est communémment appelé AJAX.


RE: un showmessage() avec PHP ? - gameprog2 - 13-09-2010

Dans une page HTML, j'ai un formulaire, avec un pseudo à saisir, en faisant submit() (j'ai appris que c'était comme ça qu'il fallait faire pour passer les données à php), la page php reçoit la variable pseudo, elle fait des tests dessus, puis je voudrais qu'un message utilisateur soit affiché tout en gardant la page html visible aux yeux du joueur.
Oui c'est le "load function" de ton code, que j'ai testé Niahoo Wink


RE: un showmessage() avec PHP ? - NicoMSEvent - 13-09-2010

héhé, je crois (ce n'est qu'une impression) que tu mélanges tout, et je trouve que les membres ici présents qui essaye de t'expliquer, commencent a être à bout de leur patience... ne leur en veux pas, je vais essayer d'expliquer a ma manière, ça ira p-e mieux... :p

Je considère que toutes les pages, dynamiques ou pas, consultée par ton client, est du HTML pur(+ éventuellement du javascript -> le PHP n'est vu que du coté serveur).
Donc, ton navigateur ne va que interpréter du HTML (+ javascript).

Le but est d'afficher une information sur la page.
Je considère que les différence entre un DIV et un "alert" javascript sont minimes.

<script>alert('Test');</script>
<div>Test</div> (note a Sephi : les balises div ne sont pas affichées si je ne met pas que c'est du code dans le BBCode)
Si tu arrives a afficher le div, tu arriveras aussi a afficher l'alert javascript.

Lorsque tu clique sur un lien, tu voudrais qu'une alerte s'affiche avec un message (généré en php?)

Donc, lorsque sur ta page tu va cliquer sur le bouton , ta page sera rechargée avec le message de ton choix...

un exemple? (note : le HTML est statique, et ton alerte sera dynamique -> tu va générer du javascript à l'aide du php.. trop la classe non? ^^)


<form method="post" action="?">
<input name="alerte" value="Une belle alerte" />
<input type="submit" />
</form>
<?php
if(isset($_POST['alerte'])echo "<script>alert('{$_POST['alerte']}');</script>";
?>

Esit : légère correction du cote html


RE: un showmessage() avec PHP ? - niahoo - 13-09-2010

aaaaaaaaaaah ayé j'ai pigé.

as tu remarqué que quand tu envoyais le formulaire, le navigateur appelait la page php qui le traite ?
Les données ne sont pas créées sur le serveur. ton navigateur regarde l'attribut "action" de ta balise <form action="qdq">, et appelle cette page comme n'importe quelle autre page. si la méthode d'envoi est POST, alors les données du formulaires sont envoyées par le navigateur lors de l'appel de la page, de la mème manière que sont envoyées les cookies. si la méthode est GET alors les donnée sont passées dans l'url.

Tu quittes donc ta page pour aller vers celle qui traite le formulaire. cette page doit donc ensuite renvoyer sur la page précédente avec header('location: page-precedente.html');.

Ou bien, tu places le code de traitement du formulaire sur la même page, au dessus du HTML de façon à ce que si tu détectes un formulaire envoyé, tu le traites, et qu'ensuite, formulaire ou pas, tu affiches ta page.


RE: un showmessage() avec PHP ? - Ter Rowan - 13-09-2010

(13-09-2010, 01:23 PM)gameprog2 a écrit : Dans une page HTML, j'ai un formulaire, avec un pseudo à saisir, en faisant submit() (j'ai appris que c'était comme ça qu'il fallait faire pour passer les données à php), la page php reçoit la variable pseudo, elle fait des tests dessus, puis je voudrais qu'un message utilisateur soit affiché tout en gardant la page html visible aux yeux du joueur.

je pense que la difficulté de compréhension communication vient de là, alors je m'essaie à une explication ^^

pour faire ce que tu dis il y a deux solutions que je pense simple à mettre en place

1) sans ajax :
ta page / formulaire HTML est générée par un script php
lorsque l'utilisateur "submit()" il rappelle le même script php.


dans ce script, avant de construire le formulaire tu testes les variables postées pour savoir si on a répondu ou non au formulaire

si on n'a pas répondu au formulaire, tu l'affiches vierge
si on a répondu au formulaire, tu réalises tes tests sur la variables pseudo,
si il y a un problème, tu affiches le formulaire avec les valeurs déjà postées (histoire de pas tout se retaper pour l'utilisateur) et tu rajoutes en plus un div avec ton message d'erreur
si il n'y a pas de problème, tu n'affiches pas le formulaire mais tu passes à la suite

=> à noter, c'est là où on aura intérêt à découper le script php en plusieurs morceaux, le script php appelé qui teste et inclue tel ou tel composant (exemple formulaire)

2) avec ajax
ta page / formulaire HTML possède du javascript. Ton bouton submit n'appelle pas une page php mais une fonction javascript
cette fonction javascript va lancer un appel en ajax à un script php qui testera la valeur de ton pseudo et renverra au javascript un retour ok / pas ok. Le retour (xml ou json ou texte, fonction de ce qui te semble le plus simple à manier) est alors traité par le javascript :
si le retour est ok, tu lances la page suivante (normalement un script php qui génère une page html après avoir sauvegardé les informations du formulaire)
si le retour est ko, tu crées (ou affiche si tu l'avais prévu avant mais caché) un div avec le message d'erreur

perso, je te conseille dans un premier temps de le faire sans ajax, déjà pour ressentir le mécanisme entre page web et script php et aussi découpage du code php (mon "a noter")


RE: un showmessage() avec PHP ? - NicoMSEvent - 13-09-2010

@niahoo : heu... mwais... tu n'as pas encore tout compris, mais ça approche Wink
je reste sur la même page grace à : action=?
ce qui signifie que j'appelle la même page.
Le code après sert à voir si j'ai utilisé mon formulaire (si la variable "alerte" existe)


@Ter Rowan : je trouve que tu pousse un peu là en parlant d'ajax, faut d'abord maitriser les bases avant de faire de la haute voltige ^^


RE: un showmessage() avec PHP ? - Ter Rowan - 13-09-2010

(13-09-2010, 01:38 PM)NicoMSEvent a écrit : @Ter Rowan : je trouve que tu pousse un peu là en parlant d'ajax, faut d'abord maitriser les bases avant de faire de la haute voltige ^^
de l'escalade, de l'escalade ^^ la haute voltige je sais pas encore faire et j'ai peur du vide alors


mais on s'est croisé tous les trois là


RE: un showmessage() avec PHP ? - gameprog2 - 13-09-2010

Ah je crois que vous vous approchez là Wink Niahoo et Addict, merci, je vais voir ça Wink

Citation :Tu quittes donc ta page pour aller vers celle qui traite le formulaire. cette page doit donc ensuite renvoyer sur la page précédente avec header('location: page-precedente.html');.
Mais comment la page appelante (la html) va-t'elle connaitre la variable à afficher dans le message qu'elle va afficher ?

Citation :Ou bien, tu places le code de traitement du formulaire sur la même page, au dessus du HTML de façon à ce que si tu détectes un formulaire envoyé, tu le traites, et qu'ensuite, formulaire ou pas, tu affiches ta page.
Cette solution me plairaît !
je vais voir comment la tester.

Addict :
Citation :je reste sur la même page grace à : action=?
ce qui signifie que j'appelle la même page.
je connaissais pas ça, merci Wink


Ah Rowan :
ça me plairait de tester ça !!!
Citation :1) sans ajax :
ta page / formulaire HTML est générée par un script php
lorsque l'utilisateur "submit()" il rappelle le même script php.

Je vous tiens au courant de mes tests Wink


RE: un showmessage() avec PHP ? - niahoo - 13-09-2010

Citation :Mais comment la page appelante (la html) va-t'elle connaitre la variable à afficher dans le message qu'elle va afficher ?

en utilisant la session par exemple. Tu stockes ton message d'erreur en session, et tu le récupères sur l'autre page.
Bon, moi je suis pas fan ... Le fait d'avoir sur le même appel le traitement du formulaire et l'affichage du résultat simplifie ça.
Mais ne surcharge pas trop tes scripts, utilises la structure 'include' (avec parcimonie) à bon escient.


RE: un showmessage() avec PHP ? - gameprog2 - 13-09-2010

Ok, je suis en train de tester l'appel et le traitement sur la meme page PHP

La page PHP utilise echo pour afficher la page html du formulaire.
Je rappelle que ce désign est là pour test seulement Wink

Mais pour traiter les donnees du formulaire, je fais comment ?
je laisse un submit en mettant dans "action" le nom de la meme page certainement, mais c'est le mot "self..." qui est utilisé en général non ?
Addict a dit que c'est "?" dans action, je vais le tester.
Bon je vais afficher le code complet, je voulais pas le faire car il est long Wink

Excusez-moi, le forum empeche d'afficher le code html qui se trouve entre les guillemets dans l'instruction php echo(). c'est pour ça qu'il y a plein de guillemets vides ici Wink



<?php

/* --------------------- Liste des fonctions ------------------ */

// Renvoie TRUE si le mot est vulgaire sinon FALSE

function vulgaire($mot) {
//$tab=file("salmots",FILE_IGNORE_NEW_LINES); /* le fichier texte salmots contient une liste de mots vulgaires.*/
$tab=array("pute","con");
if(in_array($mot,$tab)) /* Teste si le mot existe dans les mots vulgaires.*/
{/* le mot fait partie des mots vulgaires.*/
return true;
}else
{/* le mot est absent des mots vulgaires.*/
return false;
}
}

// Teste si la longueur d'un mot est inférieure à $nbr, true dans ce cas sinon false;
// Sert aussi à tester si un champ est vide et demander qu'il soit saisi.
/* $letype est soit "pseudo", soit "mot de passe" soit "email". */

function testtaille($mot,$nbr,$letype)
{
/* Supprime les espaces avant et dans le mot.*/
$result=str_replace(" ","",$mot);

/* Met dans $long le nombre de caractères de $result.*/
$long=strlen($result);

/* Teste si $long est inférieur à $nbr, true dans cas sinon false.*/
if($long<$nbr){return true;}else{return false;}

}

function validmail($email) {
/* Renvoie TRUE si L'email est valide
sinon renvoie FALSE */
}







/* --------------------- Début du traitement ------------------ */

$pseudo = $_POST['pseudo'];
$pass= $_POST['pass'];
$errorMsg = array();
$pseudoOk = true;

if( vulgaire($pseudo) ) {
$error = 'Votre pseudo est un mot interdit';
$pseudoOk = false;
}

if( vulgaire($pass) ) {
$error = 'Votre mot de passe est un mot interdit';
$pseudoOk = false;
}

/* if( validmail($email) ) {
$error = 'Merci d\'utiliser un email valide.';
$pseudoOk = false;
}
*/

if( testtaille($pseudo,3,"pseudo") ) {
$error = 'Votre pseudo doit avoir plus de 3 lettres';
$pseudoOk = false;
}

if ( testtaille($pass,3,"mot de passe") ) {
$error = 'Votre mot de passe doit avoir plus de 3 lettres';
$pseudoOk = false;
}
/* ----- ici le pseudo est ok, on se connecte pour tester son existence ------------- */

if($pseudoOk) {

//CONNECTION AU SERVEUR INTERNE DE LA BASE.
$dbhost="localhost";
$dblogin="root";
$dbpassword="";
$dbname="kham";//le nom de ma base de données.
$table="joueurs";

$connecter=mysql_connect($dbhost,$dblogin,$dbpassword);
if (!$connecter){
echo "Probleme de connection au serveur. L'admin va vérifier ça :/ ";
}else
{
//............... Connection à la base de données ................
$okbase=mysql_selectdb($dbname);
//............ Si la base de donnée a un probleme on le dit............
if (!$okbase){
echo "Problème de connection à la base de données.";
}else
{
/* Teste si le pseudo existe dans la DB */
$result = mysql_query("SELECT pseudo FROM joueurs WHERE pseudo = $pseudo");
if(!$result){
// ici fait apparaitre le message utilisateur.

}else
{
mysql_close();
header("location:jouer.html");
}
}
}
}else
{
/* Ici tu réaffiches le formulaire d'enregistrement
* En indiquant les messages d'erreurs que tu as enregistrés
*/

}


echo ("<!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>".
" <title>KHAM</title>".
" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />".
"<link rel=\"stylesheet\" media=\"screen\" type=\"text/css\" title=\"Design\" href=\"kham.css\" />".
"<script src=\"kham.js\"></script> ".
"<script src=\"vulgaire.js\"></script> ".
"<script src=\"cookies.js\"></script> ".
" </head>".
" <body> ".
"<div class=\"contener\">".

"<img id=\"fond\" src=\"planetes1.jpg\" alt=\"Arriere-plan\" width=\"100%\" height:\"100%\" /> ".

"<div id=\"nomjeu\"><img src=\"kham.png\" alt=\"Nom du jeu\" width=\"400px\" height:\"105px\" /></div> ".

"<div class=\"ecran\">".
"<div class=\"menu\">".
"<div class=\"icones\">".
"<span id=\"titre1\"><a href=\"#\" onclick=\"#\">Histoire</a></span>".
"<span id=\"titre2\"><a href=\"#\" onclick=\"#\">Comment jouer</a></span>".
"<span id=\"titre3\"><a href=\"#\" onclick=\"#\">Joueurs connectés</a></span>".
"<span id=\"titre4\"><a href=\"#\" onclick=\"#\">Les champions</a></span>".
"<span id=\"titre5\"><a href=\"#\" onclick=\"#\">Profil</a></span>".
"</div>".
"</div>".
"<img src=\"tv.png\" alt=\"ecran\" width=\"100%\" height=\"100%\" />".
"<div class=\"bouton1\" id=\"lienlogin\" onclick=\"panloguer();\">Jouer</div>".
"</div>".

"<div id=\"texte\">".
"Kham est un jeu PHP 100% gratuit de science-fiction, sans téléchargement et sans flash.<br/>".
"<br/>".
"Vous pouvez vous lancer dans une carrière de marchand, de militaire, de chef de village, de dirigeant de planètes, ou simplement en aventurier vivre au jour le jour.<br/>".
"<br/>".
"Deux factions se disputent le pouvoir et le contrôle de cet univers (voir Histoire)<br/>".
"<br/>".
"<span class=\"motgras\">- Le camp de l'union</span> (bleu) : Représenté par les états-unis<br/>".
"<span class=\"motgras\">- Le camp chinois</span> (rouge) : Représenté par la chine.<br/>".
"Divers pays tant occidentaux qu'orientaux ont ralliés ces deux camps.<br/>".
"<br/>".
"Parmi les aventuriers (dont vous faites partie au début), certains n'hésitent pas à créer leur propre camp, soit par appât du gain soit par résistance ou encore mûs par un désir de pouvoir.".

"</div>".

"<div id=\"panlogin\">".
" <img id=\"img_monform\" src=\"guerrier.png\" alt=\"portrait d'un guerrier\" width=\"100%\" height=\"100%\" />".
" <div id=\"monform\">".
" <form method=\"post\" name=\"formulaire\" action=\"?\">".
" <div class=\"champ\">Votre pseudo :<input name=\"pseudo\" type=\"text\" size=\"20\"></div>".
" <div class=\"champ\">Mot de passe :<input name=\"pass\" type=\"text\" size=\"20\"></div>".
" <div class=\"bouton2\" onclick=\"tests();\">".
" <img src=\"bouton.png\" alt=\"bouton\" width=\"100%\" height=\"100%\" />".
" </div>".
" </div>".
" <img id=\"img_monform\" src=\"guerriere.png\" alt=\"portrait d'une guerriere\" width=\"150px\" height=\"150px\" />".
"</div>".


"</div>".


" </body>".
"</html>" );
?>

A quel endroit de la balise [code=php] met-on l'anti-slash ?
Car le lien permettant d'afficher du code php me met chaque fois une balise code ouvrante, je vais la fermer manuellement donc.
Vala j'ai corrigé mon code et il s'affiche bien en html sur le navigateur, maintenant il faut que je vois pourquoi il ne prend pas en compte le traitement des champs^^
J'avance, j'avance... Wink grace à vous Wink