8797 sujets

Développement web côté serveur, CMS

Il fonctionnait il y a encore une semaine pourtant Smiley eek
C'est donc toujours la page "defaut.php" qui s'affiche...........


<?php
  session_start();
$id = $_SESSION['id'];
include ("connexion.php");
$requete = mysql_query("SELECT posx, posy FROM membres WHERE id = {$id} ");
$rsa= mysql_fetch_assoc ($requete);
$posx = $rsa['posx'];
$posy = $rsa['posy'];
//Là, on va chercher la case de la map qui correspond au X/Y de ton perso
$rsb = "SELECT image FROM map WHERE posx = {$rsa['posx']} AND posy= {$rsa['posy']} ";
$res=mysql_query($rsb) or die('Erreur SQL '.$rsb.'<br>'.mysql_error());
($data = mysql_result($res,0,'image'));

$img= $data['image'];
switch ($img){

  case "./relief/prairie.gif":
$sql = "UPDATE membres SET localisation= 'prairie' WHERE id = {$id} ";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' prairie';
include 'quel_prairie.php';
break;
etc etc etc etc etc etc etc
}
include ("defaut.php");
mysql_close();
?>
Cela me semblait évidement aussi, c'est pour ça que je n'avais pas répondu...

Mais en fait, je pense comprendre d'où vient ton incompréhension Rouge:

L'instruction "break;" ne se comporte pas comme la commande "return".

break, ne sert à dire à Php de ne pas aller plus loin dans le bloc courrant (ici, le switch).

Pour ce que tu veux, tu devrais faire ceci:

switch ($foo) {
    case 'bar':
        //... some code here where $foo = bar
        break;

    case 'foobar':
        // ... some code here where $foo = foobar
        break;

    case 'a':
        // ... some code here when $foo = a

    case 'b':
        // ... some code here when $foo = a or b

    case 'c':
       // ... some code here when $foo = a or b or c
       
       break;

    default:
       // ... some code here when $foo is not catched upper
}


(je sais que ça ne correspond pas exactement à ce que tu veux, mais au moins, avec ça tu devrais comprendre le comportement d'un switch et de ses break Smiley cligne
Modifié par Calak (09 Nov 2008 - 14:28)

<?php
  session_start();
$id = $_SESSION['id'];
include 'connexion.php';

$res = "SELECT posx, posy FROM membres WHERE id= {$id}";
$result = mysql_query($res) or die(mysql_error()); 
$rsa = mysql_fetch_assoc($result);
$posx = $rsa['posx'];
$posy = $rsa['posy'];

//Là, on va chercher la case de la map qui correspond au X/Y de ton perso
$req = "SELECT image FROM map WHERE posx = {$rsa['posx']} AND posy= {$rsa['posy']}";
$data = mysql_query($req) or die(mysql_error()); 
$img= $data['image'];

switch ($img){

  case "./relief/prairie.gif":
$sql = "UPDATE membres SET localisation= 'prairie' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' prairie';
include 'quel_prairie.php';
exit;
break;
  case "./relief/montagne.gif":
$sql = "UPDATE membres SET localisation= 'montagne' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
          $_SESSION['localisation']=' montagne';
include 'quel_montagne.php';
exit;
break;
  case "./relief/foret.gif":
$sql = "UPDATE membres SET localisation= 'foret' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' foret';
include 'quel_foret.php';
exit;
break;
  case "./relief/lac.gif":
$sql = "UPDATE membres SET localisation= 'lac' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' lac';
include 'quel_lac.php';
exit;
break;
  case "./relief/piste.gif":
$sql = "UPDATE membres SET localisation= 'piste' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' piste';
include 'quel_piste.php';
exit;
break;
  case "./relief/riviere.gif":
$sql = "UPDATE membres SET localisation= 'riviere' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' riviere';
include 'quel_riviere.php' ;
exit;
break;
  case "./relief/champ.gif":
$sql = "UPDATE membres SET localisation= 'champ' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' champ';
include 'quel_champ.php';
exit;
break;
  case "./relief/colline.gif":
$sql = "UPDATE membres SET localisation= 'colline' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' colline';
include 'quel_colline.php' ;
exit;
break;
  case "./relief/desert.gif":
$sql = "UPDATE membres SET localisation= 'desert' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']=' desert';
include 'quel_desert.php' ;
exit;
break;
case "./relief/ville.gif":
$sql = "UPDATE membres SET localisation= 'aux portes de la ville' WHERE id = ". $id.";";  
               mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
           $_SESSION['localisation']= 'aux portes de la ville';
include 'quel_ville.php';
exit;
break;

include 'create_relief.php';
}

mysql_close();
?>
1// Pourquoi des exit ??
2// Pour gérer un cas par défaut, utilise "default:"

et tu pourais simplifier tout ton code en faisant quelque chose de ce style:

<?php
  session_start();
  $id = $_SESSION['id'];
  require_once 'connexion.php';

  $res = "SELECT posx, posy FROM membres WHERE id = '$id'";
  $result = mysql_query($res) or die(mysql_error()); 
  $rsa = mysql_fetch_assoc($result);

  $posx = $rsa['posx'];
  $posy = $rsa['posy'];

  $req = "SELECT image FROM map WHERE posx = '$posx' AND posy = '$posy'";
  $data = mysql_query($req) or die(mysql_error()); 

  $localisation = basename($data['image'], '.gif');

  if ( in_array($localisation, array('prairie', 'relief', 'foret', 'lac', 'piste', 'riviere', 'champ', 'colline', 'desert', 'ville')) {
      if ( $localisation == 'ville' ) {
          $sql = "UPDATE membres SET localisation= 'aux portes de la ville' WHERE id = '$id'";  
          $_SESSION['localisation']= 'aux portes de la ville';
      }
      else {
          $sql = "UPDATE membres SET localisation= '$localisation' WHERE id = '$id'";  
          $_SESSION['localisation'] = $localisation;
      }
      mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
      include 'quel_'.$localisation.'.php' ;
  }
  else {
    // Erreur, localisation inconnue
  }

  include 'create_relief.php';
  mysql_close();
?>


Tu semble ne pas trop avoir compris la façon d'utiliser un switch, mais bon... De toutes façons, ici, ce n'était pas le meilleur choix.
Modifié par Calak (10 Nov 2008 - 13:56)
Salut,

juste en passant il faut remplacer 'foret.gif', 'lac.gif' par 'foret', 'lac' dans la ligne contenant in_array. Smiley cligne
oops, oui ^^;

c'est ça de faire plusieurs choses en même temps, et de pas tester son code Smiley langue
Je suis désolé mais c'est toujours pareil, le script renvoie automatiquement et toujours sur la page "create_relief.php" Smiley ohwell
J'ai peur de ne pas te comprendre...

A quel moment voudrais tu que le include('create_relief'); soit appelé ?
Modérateur
Salut tout le monde,

Là en lisant le script de Rouge, je ne vois pas de default et je pense que s'il n'y a pas de localisation c'est un create relief. Donc, si je ne dis pas de bêtise (sssssss...) cela devrait être ceci :

En reprenant le code de Calak :


//...

if ( in_array($localisation, array('prairie', 'relief', 'foret'', 'lac', 'piste', 'riviere', 'champ', 'colline', 'desert', 'ville')) {

      if ( $localisation == 'ville' ) {

          $sql = "UPDATE membres SET localisation= 'aux portes de la ville' WHERE id = '$id'";  

          $_SESSION['localisation']= 'aux portes de la ville';

      }else {

          $sql = "UPDATE membres SET localisation= '$localisation' WHERE id = '$id'";  

          $_SESSION['localisation'] = $localisation;

      }

      mysql_query($sql) or die('Erreur SQL '.$sql.'<br />'.mysql_error());

      include 'quel_'.$localisation.'.php' ;

  }else {
    // Erreur, localisation inconnue
    include 'create_relief.php';
  }
  mysql_close();

?>


Modifié par Nolem (10 Nov 2008 - 21:43)
Je pense, après relecture, que tu dois avoir raison...
Il faut dire que son code n'est pas forcément clair, c'est pour ça que dans mon dernier message j'ai demandé quelques précisions...
Merci, Nolem, c'est exactement cela au départ: si le relief n'est pas prairie, foret, piste, etc..
ca doit rediriger sur "create_relief.php" Smiley langue

Donc, j'ai recodé en virant vraiment le superficiel

<?php

  session_start();

  $id = $_SESSION['id'];

  require_once 'connexion.php';





  $res = "SELECT posx, posy FROM membres WHERE id = '$id'";

  $result = mysql_query($res) or die(mysql_error()); 

  $rsa = mysql_fetch_assoc($result);



  $posx = $rsa['posx'];

  $posy = $rsa['posy'];



  $req = "SELECT image FROM map WHERE posx = '$posx' AND posy = '$posy'";

  $data = mysql_query($req) or die(mysql_error()); 



  $localisation = basename($data['image'], '.gif');



  if ( in_array($localisation, array('prairie', 'foret', 'lac', 'piste', 'riviere', 'champ', 'colline', 'desert', 'ville')))
  {


      include 'quel_'.$localisation.'.php' ;

  }

  else {

    // Erreur, localisation inconnue

	include 'create_relief.php';


  }


  mysql_close();



?>





et cela m'affiche toujours le create_relief.php Smiley ohwell ..............

Paqr contre, et cela peut aider Smiley rolleyes , comme le script passe par un "quel_relief.php" , j'ai testé en direct dans mon navigateur ces pages
(quel_piste.php, quel_foret.php, etc) et j'ai a chaque fois une erreur sql.....
Modérateur
Salut Rouge,

Est ce que quel_'.$localisation.'.php comportent des sql ? Je pense que c'est le cas et peut être sans trop m'avancer, Apache et/ou Mysql cafouille(nt) avec une mauvaise requête.

As tu fait ces mêmes requêtes à l'aide de PHPMyadmin ou avec la console Mysql afin de déboguer au mieux ? Est ce que tu sors un résultat convaincant ?

(La question à 2.5 € qui tue) N'aurais tu pas un include en amont qui renvoi sur create_relief.php ?

Néanmoins, je viens de voir une faute sur le code de Calak et automatiquement elle génère une erreur sql (arf la petite pétouille inaperçue Smiley murf ) :


$req = "SELECT image FROM map WHERE posx = '$posx' AND posy = '$posy'";
$data = mysql_query($req) or die(mysql_error()); 
$localisation = basename($data['image'], '.gif'); //Que vaut $localisation ? [cligne]


à remplacer par si je ne m'abuse :

$req = "SELECT image FROM map WHERE posx = '$posx' AND posy = '$posy'";
$exec_req = mysql_query($req) or die(mysql_error());
$data=mysql_fetch_assoc($exec_req);
$localisation = basename($data['image'], '.gif');


++
Modifié par Nolem (14 Nov 2008 - 21:23)
C'est pas une petite erreur, c'est une aberration, un oubli qui relève de l'amateurisme...

Dorénavant, lorsque je proposerai du code, aux petites heures, je le testerai avant... Et dire que j'étais bon en php... Avant -_-"

Normalement maintenant, il ne devrait plus y avoir de problème...

Dans le cas contraire, commence par afficher le contenu de la var $localisation
Modérateur
Calak a écrit :
C'est pas une petite erreur, c'est une aberration, un oubli qui relève de l'amateurisme...


Ne t'inquiète pas cela m'arrive de faire ce genre de bêtises quand je ne teste pas le code avant. Smiley smile Pour une page en html et CSS, c'est nettement plus simple et pas extrêmement délicat à concevoir de tête. Le php, c'est un peu plus ardu et demande un peu plus de rigueur à mon avis.

++
Ca y ets ca fonctionne ainsi. Faut dire que le script "cible" avait aussi quelques erreurs.
merci à tous.

<?php

  session_start();

  $id = $_SESSION['id'];

  require_once 'connexion.php';

$res = "SELECT posx, posy FROM membres WHERE id = $id;";


  $result = mysql_query($res) or die(mysql_error()); 

  $rsa = mysql_fetch_assoc($result);



  $posx = $rsa['posx'];

  $posy = $rsa['posy'];

$req = "SELECT image FROM map WHERE posx = $posx AND posy = $posy;"; 



  $res = mysql_query($req) or die(mysql_error());

  $data =  mysql_fetch_assoc($res); 
//var_dump($data);

  $image = $data['image'];    
//var_dump($image);
  $localisation = basename($data['image'], '.gif');

//var_dump($localisation);
$inArray = in_array ($localisation, array('prairie', 'foret', 'lac', 'piste', 'riviere', 'champ', 'colline', 'desert', 'ville'));
//var_dump($inArray);
if($inArray === true){ 


          $sql = "UPDATE membres SET localisation= '$localisation' WHERE id = $id;";  

          $_SESSION['localisation'] = $localisation;


      mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());

      include 'quel_'.$localisation.'.php' ;

}

  else {


  include 'create_relief.php';
  }

  mysql_close();

?>

Modifié par Rouge (16 Nov 2008 - 21:38)