Plusieurs choix pour mon formulaire

Fermé
Marc - Modifié par jordane45 le 8/06/2016 à 11:46
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 8 juin 2016 à 11:46
Bonjour,
Je souhaite dans mon formulaire que lorsqu'une personne se connecte "login/mdp", ça recherche son type de contrat dans la base de donnée sql et ainsi affiche seulement la page nécessaire.
Par exemple si Mr Tec se connecte ça ira directement sur la page techniciens.

Mais ça n'a pas l'air de marcher:
<?php
require("conf.php");

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select password from users where login='".$login."'";
  $con = "select contrat from users where login='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['password'] != $password) {
        echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="connect.php" </SCRIPT>';
    exit;
  }
  else if ($con == tec) {
    session_start();
    $_SESSION['login'] = $login;
    
    echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="tec_s3a/login_tec.php" </SCRIPT>'; 
  }    
  else if ($con == ce) {
    session_start();
    $_SESSION['login'] = $login;
    
    echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="CE/login_ce.php" </SCRIPT>'; 
}
else if ($con == ca) {
    session_start();
    $_SESSION['login'] = $login;
    
    echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="ca/login_ca.php" </SCRIPT>'; 
}

else if ($con == admin) {
    session_start();
    $_SESSION['login'] = $login;
    
    echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="admin/login_admin.php" </SCRIPT>'; 
}
else if ($con == administration) {
    session_start();
    $_SESSION['login'] = $login;
    
    echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="administation/login_administration.php" </SCRIPT>'; 
}
else if ($con == inter) {
    session_start();
    $_SESSION['login'] = $login;
    
    echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="inter/inter.php" </SCRIPT>'; 
}
else {
   echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="connect1.php" </SCRIPT>';
   exit;
}
}

?>




EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.

2 réponses

diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
7 juin 2016 à 15:19
Bonjour,

Faire une requête pour allez cherche le mot de passe et le vérifier, c'est un bon début pour la connexion, mais vous ne cherché aucune autre info concernant le login. Il faudrait que vous alliez cherché le type de contrat dans la base de donnée une fois que la personne s'est connecté .
En gros :
Vérifier le mot de passe => Si réussi :
-chercher le type de contrat (Requête SQL )
-Faire votre If /else if ( Un switch case serait préférable à mon avis)
0
Oui mais le type de contrat, je l'ai chercher et stocker dans ma variable $con ?
Désolé de vous déranger.
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
7 juin 2016 à 15:59
Oui mais la requête n'est jamais exécuté, a aucun moment vous faite un mysql_query avec en requête $con
Regardais bien vous stocké la requete SQL dans $con, et non le retour d'un fetch assoc par exemple.

PS: Faite attention , mysql est déprécié, Il serait sans doute plus facile d'utilisé PDO ou Mysqli
0
stephan69007 Messages postés 18 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 8 juin 2016 2
8 juin 2016 à 10:43
Quand tu dis déprécié, ca marche toujours pourtant
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
8 juin 2016 à 10:49
Déprécié ne veut pas dire non fonctionnel.

Déprécié signifie juste que du jour au lendemain ça peut ne pas marché , et ce n'est pas ce qui est le plus optimisé en terme de rapidité d’exécution, et c'est surtout pas apprécié en règle générale.

Et PDO et mysqli(ce dernier est une version plus évolué à mysql) ont plus de fonctionnalité qui peuvent être utile comme la possibilité de préparer ses requête avant de les exécuter avec des variable que tu utilise dans ton code ( et écris de manière plus propre) .
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié par jordane45 le 8/06/2016 à 11:46
Bonjour,

voici ton code remis en forme et corrigé
<?php
//Affichage des erreurs PHP
error_reporting(E_ALL);

//démarrage des sessions (on le fait UNE FOIS au début de la page.. pas ailleurs !!! )
session_start();

//Fichier de config/connexion à la bdd
require_once "conf.php";

//récupération "propre" des variables AVANT de les utiliser !
$login =  !empty($_POST['login']) ? $_POST['login'] : NULL;
$password =  isset($_POST['password']) ? $_POST['password'] : NULL;


//Traitement du formulaire :
if($login && $password) {

  $sql = "select password,contrat from users where login='".$login."'";
  $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  $nbResult = $num_rows = mysql_num_rows($result);
  $data = mysql_fetch_assoc($result);

 if($data['password'] != $password || $nbResult==0) {
   $url = 'connect.php';
   echo '<script type="text/javascript">document.location.href="'.$url.'" </script>';
   exit();
 }else{
  
   $con = $data['contrat'];
   $_SESSION['login'] = $login;
   switch($con){
    case "tec":
      $url = "tec_s3a/login_tec.php";
      break;
    case "ce":
      $url = "CE/login_ce.php";
      break;
 case "ca":
      $url = "ca/login_ca.php";
      break;
 case "admin":
      $url = "admin/login_admin.php";
      break;
 case "administration":
      $url = "administation/login_administration.php";
      break;
 case "inter":
      $url = "inter/inter.php";
      break;
 default:
          unset($_SESSION['login']);
   $url = "connect1.php";
   break;
   }
    echo '<script type="text/javascript">document.location.href="'.$url.'" </script>';
    exit();
 }
 
} 
?>



NB: Mais il serait bien de le passer à PDO ou mysqli comme indiqué dans les messages précédents.

NB² : Parmis les modifications apportées à ton code.. tu verras :
- 1 Seule requête et non deux
- L'utilisation d'un SWITCH au lieu de if/elseif..; à répétition
- La simplification du code en évitant d'utiliser 20 fois les mêmes instructions partout dans ton code... en utilisant à la place une variable et en appellant la fonction qu'une fois ( pour la redirection par exemple ou l'initialisation de la variable de session.... )

Voila pour l'essentiel.... je te laisse poursuivre.

Cordialement, 
Jordane                                                                 
0