Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1391 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Une boîte noire (php, hasard,... Ajax ?)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Une boîte noire (php, hasard,... Ajax ?)

n°1726617
dorearendi​l
Posté le 30-04-2008 à 00:20:30  profilanswer
 

Salut à tous !
Avant tout, sachez l'espoir immense que je place en ce message : il faut absolument que je parvienne à boucler ce que j'essaye de faire le plus vite possible (voir ci-dessous)...  
 
Voici l'affaire : je suis en train de monter un site qui ressemble, en gros, à ce qu'on peut trouver à cette adresse : www.caerbannog.fr/chaoscartes.php
Comme vous pouvez le voir, cette page a pour but de faire défiler au hasard des "cartes de visite" comprenant diverses informations : dans cet exemple, nom, prénom, date de naissance (une nouvelle carte surgit lorsqu'on rafraîchit la page). Vous remarquerez aussi qu'en cliquant sur chaque question (écrite en blanc), on est mené vers une nouvelle page, dédiée spécifiquement à faire défiler au hasard soit le nom, soit le prénom, soit la date de naissance.
 
Bon. Depuis longtemps, trop longtemps maintenant, je perds mon temps à essayer de résoudre le cahier des charges suivant :
 
1. Que dans la page chaosprenom.php, par exemple, lorsqu'on clique sur le prénom qui s'affiche, on soit transporté vers la "carte de visite" complète correspondant à ce prénom (idem pour le nom, etc) ;
 
2. Que dans la page principale, ici chaoscartes.php, je puisse créer des "passerelles" entre les cartes elles-mêmes : par exemple, en cliquant sur le prénom "Maurice", je sois mené vers une autre carte où le prénom serait "Maurice".
 
3. Et que tout ça soit possible SANS QUE L'URL EN SOIT MODIFIÉE : en effet, le concept repose sur l'idée d'une "boîte noire", à l'intérieur de laquelle on naviguerait sans points de repère ; je ne veux donc pas de solution qui me mette un point d'interrogation après le .php et tout le reste.
 
 
CODE UTILISÉ POUR GÉNÉRER LE HASARD :

Code :
  1. $connection = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Unable to connect to MySQL server." . mysql_error());
  2. $db = mysql_select_db($dbname, $connection) or die ("Unable to select database: " . mysql_error());
  3. $randtable = "test";
  4. $xvals = "off";
  5. $xarr = array("1", "2", "3" );
  6. $idvar = "id";
  7. $randsql_result = mysql_query("SELECT * FROM $randtable",$connection) or die ('Database Query Failed.');
  8.   if(mysql_num_rows($randsql_result) == 0) {
  9.   print "There are no entries in the database!"; exit; }
  10.   $i = 0;
  11.   while($row = mysql_fetch_row($randsql_result)) {
  12.   if($xvals == "on" ) {
  13.   if(!in_array("$row[0]", $xarr) && $row[0] != "" ) {
  14.   $rand[$i] = $row[0];
  15.   $i++;
  16.   }
  17.   } elseif($row[0] != "" ) {
  18.   $rand[$i] = $row[0];
  19.   $i++;
  20.   }
  21.   }
  22.   mysql_free_result($randsql_result);
  23.   if(count($rand) == "0" ) { print "There are no entries in the array!"; exit; }
  24.   $randnum = array_rand($rand);
  25.   $rst = mysql_query("SELECT * FROM $randtable WHERE $idvar = '$rand[$randnum]' LIMIT 1", $connection) or die('Could not retrieve random entry from databse');
  26.   $q = mysql_fetch_array($rst);
  27. echo $q [..........]


 
 
SOLUTIONS QU'ON M'A PROPOSÉES :
- quelqu'un m'a suggéré de passer par des sessions, qui me permettraient de stocker des ID, et tout ce genre de choses. Je n'ai jamais utilisé ça, donc je ne comprends pas bien si ce serait approprié, et si c'est le cas, comment le mettre en place.
- sinon, on a aussi fait allusion à l'utilisation de code Ajax, mais idem, je ne m'y connais pas, et malgré tous les tutoriaux que j'ai parcourus en ligne je ne me sens pas beaucoup plus éclairé...
 
 
Bref : À L'AIDE ! :D  
 
Merci d'avance.

mood
Publicité
Posté le 30-04-2008 à 00:20:30  profilanswer
 

n°1726638
art_dupond
je suis neuneu... oui oui !!
Posté le 30-04-2008 à 00:45:04  profilanswer
 

avec les sessions, l'idée serait par exemple d'avoir  
 
dans chaosprenom : $_SESSION['page'] = 'prenom'
dans chaoscarte : $_SESSION['page'] = 'carte'
 
les liens de chaque page pointent vers la même page où tu traites suivant la valeur de $_SESSION['page'] (qui est conservée de page en page pourvu qu'il y ait un session_start) :
 

Code :
  1. if($_SESSION['page'] == 'prenom')
  2. {
  3.    afficher_carte_de_visite();
  4. }
  5. else
  6. {
  7.    afficher_meme_prenom();
  8. }


 


---------------
oui oui
n°1726858
dorearendi​l
Posté le 30-04-2008 à 13:30:44  profilanswer
 

Merci pour ta réponse.
 
... J'essaye de piger, mais j'ai encore du mal. Tu connaîtrais pas un tutoriel quelque part qui puisse m'éclaircir un peu les idées sur les sessions dans ce genre de cas ?

n°1726905
art_dupond
je suis neuneu... oui oui !!
Posté le 30-04-2008 à 14:48:07  profilanswer
 

tu mets

Code :
  1. <?php session_start();

au début de tes pages (avant tout autre chose - il ne faut pas même un espace avant ton <?php)

 

Ensuite chaque fois que tu écris une variable comme $_SESSION['nom_de_la_variable'], tu pourras la retrouver sur une autre page commençant elle aussi par session_start();

 

Donc dans tes pages "chaos", tu déclares une variable de session avec un certain nom et une certaine valeur (dans mon exemple : $_SESSION['page'] = quelque chose).

 

Et dans la page "boite noire", tu peux récupérer ces variables (en mettant session_start() au début).
En fonction de la valeur de cette variable, tu sauras dans quel type de page chaos elle a été déclarée et tu pourras agir en fonction (voir le if/else de mon post)


Message édité par art_dupond le 30-04-2008 à 14:48:26

---------------
oui oui
n°1727542
tostiere
Posté le 02-05-2008 à 11:01:36  profilanswer
 

Sinon en transmettant les variables avec $_POST plutôt que des $_GET, le problème des url est également reglé.

n°1730523
dorearendi​l
Posté le 10-05-2008 à 18:26:09  profilanswer
 

Merci pour votre aide, j'espère que vous êtes toujours là ! Je m'arrache les cheveux avec ce truc.
Je crois que je commence à comprendre le fonctionnement des sessions, mais ma totale inaptitude en matière de coding me demande des efforts qui mobilisent beaucoup de temps cérébral, les processeurs sont sur le point de fondre.
Mais je tiens le coup :sweat:  
 
Donc pour cette histoire de sessions, quelqu'un d'autre m'a conseillé la méthode ci-dessous :
 

Citation :

Alors .. tu pourrais utiliser les sessions. Dès qu'un visiteur vient sur ta page tu en crées une.
Tu génères tes cartes au hasard et tu stockes l'ID de la dernière carte que tu as affiché (valeur de $rand[$randnum]) dans la session.
Dans tes URLs, au lieu de mettre les ID (et donc garder une trace des cartes), tu ajoutes un lien pour la consultation d'une carte. Ce lien
est le même que celui qui récupère une carte au hasard avec une variable supplémentaire "o" qui vaut "1".
Exemple : <a href="...../browse.php">carte suivante</a> et <a href="...../browse.php?o=1">consulter cette carte</a>
 
Puis de modifier ton code (cf. code en rouge).
 
 
 
$connection = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Unable to connect to MySQL server." . mysql_error());  
$db = mysql_select_db($dbname, $connection) or die ("Unable to select database: " . mysql_error());  
$randtable = "test";
$xvals = "off";
$xarr = array("1", "2", "3" );
$idvar = "id";
 
$idVal = "";  
$openCard = isset($_GET["o"]) && $_GET["o"] == "1";  
 if ($openCard) {
    if (isset(_$SESSION['lastCardID']) {
       $idVal = $_SESSION['lastCardID'];
    }
  }
 
if ($idVal != "" ) {

 
$randsql_result = mysql_query("SELECT * FROM $randtable",$connection) or die ('Database Query Failed.');
   if(mysql_num_rows($randsql_result) == 0) {
   print "There are no entries in the database!"; exit; }
 
   $i = 0;
   while($row = mysql_fetch_row($randsql_result)) {  
   if($xvals == "on" ) {
   if(!in_array("$row[0]", $xarr) && $row[0] != "" ) {
   $rand[$i] = $row[0];
   $i++;
   }
   } elseif($row[0] != "" ) {
   $rand[$i] = $row[0];
   $i++;
   }
   }
   mysql_free_result($randsql_result);
   
   if(count($rand) == "0" ) { print "There are no entries in the array!"; exit; }
   $randnum = array_rand($rand);
} else {
   $idVal = $rand[$randnum];
   $_SESSION['lastCardID'] = $idVal; // ici on garde la trace de la dernière carte mais dans la session ...
}

 
   
   $rst = mysql_query("SELECT * FROM $randtable WHERE $idvar = '$idVal' LIMIT 1", $connection) or die('Could not retrieve random entry from databse');
   $q = mysql_fetch_array($rst);
 
echo $q [..........]


 
Seulement quand je fais ces modifs (sachant que j'ai bien mis un session_start au début), j'obtiens... ça ! Pourtant ça n'a pas l'air d'être un problème d'accolade, quelqu'un comprend quelque chose ?
 
Merci d'avance -
Dorian

n°1730530
art_dupond
je suis neuneu... oui oui !!
Posté le 10-05-2008 à 19:20:31  profilanswer
 

Pour sélectionner une entrée au hasard dans ta table, tu peux plus simplement faire  
 

Code :
  1. SELECT * FROM $randtable ORDER BY RAND() LIMIT 1;


 
 
sinon faudrait que tu postes ton code pour l'erreur ;)
 
 
ps: si tu n'utilises pas les sessions, ça ne sert à rien de mettre session_start(). Et du coup, il y a un paramètre dans ton url, ce que tu ne voulais pas à la base


---------------
oui oui
n°1730531
dorearendi​l
Posté le 10-05-2008 à 19:29:58  profilanswer
 

Je crois que je vais continuer d'essayer avec les sessions, en fait :)
ça a l'air d'être la solution la plus simple - en tous cas pour l'objectif n°1 ; je vois pas encore comment je peux les utiliser pour le n°2...
 
Voici le code en déshabillé intégral (ou presque) :
 

Code :
  1. <?php
  2. session_start();
  3. ?>
  4. <html>
  5. <head>
  6. <title>Chaos</title>
  7. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  8. </head>
  9. <style type="text/css">
  10. body { font-family: "Courier New", Courier, mono; width:900px; height:540px; }
  11. .questions { background-color:black; color:white; text-align:left; font-size:12px; line-height: 1; }
  12. .nimportequoi { background-color:black; color:#ffff98; text-align:left; font-size:12px; line-height: 1; }
  13. </style>
  14. <body bgcolor="#000000" link="black" vlink="black" alink="black">
  15.  <a title="?!" href="javascript:history.go(0)" target="_top"><img src="Caerbannog/images/you.gif" alt="" height="75" border="0"></a>
  16.  <?php
  17.  $dbhost = "********";
  18.  $dbname = "********";
  19.  $dbuser = "*********";
  20.  $dbpass = "*********";
  21.  $connection = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Unable to connect to MySQL server." . mysql_error());
  22.  $db = mysql_select_db($dbname, $connection) or die ("Unable to select database: " . mysql_error());
  23.  $randtable = "test";
  24.  $xvals = "off";
  25.  $xarr = array("1", "2", "3", "4", "5", "6", "7", "38" );
  26.  $idvar = "id";
  27.  $idVal = "";
  28.  $openCard = isset($_GET["o"]) && $_GET["o"] == "1";
  29.  if ($openCard) {
  30.   if (isset($_SESSION['lastCardID']) {
  31.    $idVal = $_SESSION['lastCardID'];
  32.   }
  33.  if ($idVal != "" ) {
  34.    $randsql_result = mysql_query("SELECT * FROM $randtable",$connection) or die ('Database Query Failed.  Please check the $randtable variable under Further MySQL Info, and make sure you have the correct table name.');
  35.   if(mysql_num_rows($randsql_result) == 0) {
  36.   print "There are no entries in the database!<br>Please insert entries so a random one can be picked!"; exit; }
  37.   $i = 0;
  38.   while($row = mysql_fetch_row($randsql_result)) {
  39.   if($xvals == "on" ) {
  40.   if(!in_array("$row[0]", $xarr) && $row[0] != "" ) {
  41.   $rand[$i] = $row[0];
  42.   $i++;
  43.   }
  44.   } elseif($row[0] != "" ) {
  45.   $rand[$i] = $row[0];
  46.   $i++;
  47.   }
  48.   }
  49.   mysql_free_result($randsql_result);
  50.   if(count($rand) == "0" ) { print "There are no entries in the array!"; exit; }
  51.   $randnum = array_rand($rand);
  52. } else {
  53.  $idVal = $rand[$randnum];
  54.  $_SESSION['lastCardID'] = $idVal;
  55. }
  56.   $rst = mysql_query("SELECT * FROM $randtable WHERE $idvar = '$idVal' LIMIT 1", $connection) or die('Could not retrieve random entry from databse.  Please check the $idvar variable under IMPORTANT TABLE INFO to make sure the id field is correct');
  57.   $q = mysql_fetch_array($rst);
  58. ?>
  59.  
  60.  <div id="Layer1" style=' color: black; font-size: 12px; font-family: "Courier New", Courier, mono; visibility: visible; display: block; position: absolute; z-index: 1; top: 95px; left: 505px; width: 457px; height: 416px;'>
  61.  <?php
  62.   if (($q[id] == "1" ) || ($q[id] == "2" ) || ($q[id] == "3" ) || ($q[id] == "4" ) || ($q[id] == "5" ) || ($q[id] == "6" ) || ($q[id] == "7" ) || ($q[id] == "38" )  || ($q[id] == "41" ) || ($q[id] == "42" )) {
  63.  print "<a href=\"chaosnom.php\"><p class=\"questions\">- Nom ?<p></a><p class=\"nimportequoi\">- $q[nom]<br><br><p>";
  64.  print "<a href=\"chaosprenom.php\"><p class=\"questions\">- Prénom ?<p></a><p class=\"nimportequoi\">- $q[prenom]<br><br><p>";
  65.  print "<a href=\"chaosnaiss.php\"><p class=\"questions\">- Date de naissance ?<p></a><p class=\"nimportequoi\">- $q[naissance]<br><br><p>";
  66.  }
  67. ?>
  68. <p>  </div>
  69. <p>
  70. <p>
  71. </body>
  72. </html>

n°1730542
art_dupond
je suis neuneu... oui oui !!
Posté le 10-05-2008 à 20:12:48  profilanswer
 

je crois qu'il manque une } à la ligne 49


---------------
oui oui
n°1730545
dorearendi​l
Posté le 10-05-2008 à 20:19:37  profilanswer
 

Nope, ça ne doit pas être ça : modifié, aucun changement.
Détail révélateur (?) : mon logiciel de coding bipe quand j'insère cette accolade, justement...
 
Ne serait-ce pas plutôt une autre erreur ailleurs, qui se transfère sur l'accolade ?

mood
Publicité
Posté le 10-05-2008 à 20:19:37  profilanswer
 

n°1730549
art_dupond
je suis neuneu... oui oui !!
Posté le 10-05-2008 à 20:55:48  profilanswer
 

en tout cas pas le même nombre de { (14) que de } (13)


Message édité par art_dupond le 10-05-2008 à 20:56:02

---------------
oui oui

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Une boîte noire (php, hasard,... Ajax ?)

 

Sujets relatifs
Outils debuggage Ajax pour IE6lier des boite de dialogue entre eux
[Ajax] Script bloqué sous IE avec balise XML videMenu flash avec AJAX, comment faire le lien?
[php + Ajax] include "dynamique?" [résolu][PHP + JS + AJAX] Formulaire avec vérification instantanée
[Resolu] Boite de Saisi avec juste OKAjax adapter la lightbox à une page web?
[AJAX] utilisation de listbox généréesAjax Ok sous IE, mais rien ne se passe sous FF :(
Plus de sujets relatifs à : Une boîte noire (php, hasard,... Ajax ?)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR