Page 1 sur 1

rediriger un visiteur en fonction de son code posta

Posté : 01 nov. 2006, 14:58
par putu
Salut, je souhaite rediriger le visiteur en fonction de son code postal: soit son code postal figure bien dans la bdd et il sera redirigé vers pageY, soit il n'y figure pas et il sera redirigé vers la pageZ. QQ'un peut-il m'éclaircir sur mon code qui redirige à chaque fois vers pageY ? Merci d'avance

Voici mon code:

<?php
require("conf/connex.php");
$cp=$HTTP_POST_VARS['cp'];

$requete="SELECT cp FROM matable WHERE cp = '$cp'";

$link = mysql_connect($hostname, $username, $password);
$result = mysql_db_query($database, $requete);
mysql_close($link);


if ($result <> 0){
header("Location:pageY.html");
}
else {
header("Location:pageZ.html");

}
?>

Posté : 01 nov. 2006, 15:34
par albat
Tout d'abord, il y a pas mal d'éléments obsolètes dans ton code.

Je te suggère de le corriger en remplaçant :
- HTTP_POST_VARS par $_POST
- mysql_db_query() par mysql_query()

Ensuite, il y a quelques retouches à apporter...
require("conf/connex.php");
$cp = $_POST['cp'];

$link    = mysql_connect($hostname, $username, $password);
$requete = "SELECT count(*) FROM matable WHERE cp = '".$cp."'";
$result  = mysql_query($requete);
$nb      = mysql_result($result, 0);
mysql_close($link);

header("Location:page".($nb>0 ? "Y" : "Z").".html");

Posté : 01 nov. 2006, 15:47
par putu
Albat, je viens de tester ton code, mais le serveur me renvoi 2 warning:

le 1er sur cette ligne: $nb = mysql_result($result, 0);
mysql_result(): supplied argument is not a valid MySQL result resource

le 2ème sur cette ligne: header("Location:page".($nb>0 ? "Y" : "Z").".html");
Cannot add header information - headers already sent by

Merci de ton aide.

Posté : 01 nov. 2006, 16:06
par albat
  1. Curieux... :shock:
    À tout hasard, remplace :
    $result  = mysql_query($requete); 
    par :
    $result  = mysql_query($requete) or die("C'est ici que ça gauffre !"); 
    pour chercher d'où ça peut venir.
  2. Qu'y a-t-il dans ta page avant ce script ?
    Le fichier connex.php à inclure contient-il des echo, des print, des lignes blanches ?

Posté : 01 nov. 2006, 16:09
par LEON
Hello!

Pour le première, regarde que tes noms de table etc soient corrects. c'est peut-être ça.

Pour la seconde, voici un topic qui pourra t'intéresser: http://www.phpfrance.com/forums/viewtop ... ready+sent

Posté : 01 nov. 2006, 16:13
par Ajoloca
Bonjour,

Je crois qu'il manque un espace apr les 2 points
 header("Location: page".($nb>0 ? "Y" : "Z").".html"); 

Posté : 01 nov. 2006, 16:20
par albat
:arrow: Ajoloca
Bien vu, mais l'espace après le Location: semble finalement facultatif.
Je viens de tester cet exemple qui fonctionne parfaitement.
$a=1;
header("location:".($a>0 ? "http://www.phpfrance.com" : "http://www.google.fr"));

Posté : 01 nov. 2006, 16:21
par LEON
Possible, mais pour compléter le topic que j'ai mis dans le lien, il faut même que la balise <?php soit à la PREMIERE ligne de la page PHP.

Peut-être que c'est seulement ça.

A plus

Posté : 01 nov. 2006, 16:37
par Ajoloca
Re,
@albat
J'ai deux serveurs, un sous Linux (FC5), l'autre sous Win-XP. Sur Linux ça marche, sur XP non. BIZzzz.......

Posté : 01 nov. 2006, 16:46
par albat
:shock:
Je suis sous XP et ça ne bugue pourtant pas. :-k

Va falloir songer à un exorcisme en profondeur... :langue:

Posté : 01 nov. 2006, 16:50
par putu
Merci, le problème est résolu!
Il m'a suffit de remplacer la ligne de code :
$result = mysql_query($requete);
par celle-ci:
$result = mysql_db_query($database, $requete);

pour que cela fonctionne bien.

Merci pour ton code Albat. :wink:

Posté : 01 nov. 2006, 16:53
par albat
Les anciennes fonctions sont acceptées et pas les nouvelles ???

Quelles versions de PHP et de MySQL utilises-tu ? :-k

Posté : 01 nov. 2006, 17:30
par albat
Aaaaah, je crois avoir compris !

Ta façon de faire :
$link    = mysql_connect($hostname, $username, $password);
$requete = "SELECT count(*) FROM matable WHERE cp = '".$cp."'";
$result  = mysql_db_query($db, $requete); 
$nb      = mysql_result($result, 0);
Ma façon de faire :
$serveur = mysql_connect($host, $user, $pass) or die("Connexion au serveur impossible");
$base    = mysql_select_db($db, $serveur) or die("Connexion à la base de données impossible");
$requete = "SELECT count(*) FROM matable WHERE cp = '".$cp."'";
$result  = mysql_query($requete);
$nb      = mysql_result($result, 0);
Je précise la base, une fois pour toutes, dès le début.
Je n'ai donc pas besoin de le faire à chaque exécution d'une requête.