Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête qui ne fonctionne plus avec php 5.6.30


Sujet :

Langage SQL

  1. #1
    Membre averti
    Requête qui ne fonctionne plus avec php 5.6.30
    bonjour,

    j'ai une requête qui fonctionnait mais j'ai téléchargé Easyphp Devserver 17 avec PHP 5.6.30 et ma requête ne fonctionne plus !!
    Il s'agit d'afficher des membres dans un tableau en sélectionnant un type d'affichage. Soit on affiche tous les membres quelque soit leur nationalité soit on affiche que les Français ou que les allemands.
    Si je clique sur tous les membres je n'ai pas de problème, le tableau s'affiche correctement mais si je choisis Français OU Allemands le tableau s'affiche mais j'ai un message d'erreur.
    Je ne comprends pas pourquoi ce message puisque l'affichage se fait.
    le message d'erreur :
    Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'Allemande'' at line 1
    la sélection pour l'affichage:
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    require_once "connect.php";
    $sessionChoix = !empty($_SESSION['choix']) ? $_SESSION['choix'] : NULL; //prendre la valeur de session si remplie
    $choix = !empty($_POST['choix']) ? $_POST['choix'] : $sessionChoix; // prendra la valeur de post si elle est remplie, sinon celle de session
    $_SESSION['choix'] = $choix;
     
    $lapage = !empty($_GET['lapage']) ? $_GET['lapage'] : 1; // prend la valeur de la page
    $_SESSION['lapage'] = $lapage;
     
    $TotalMembres = '';
    $membresParPage = 15;
    $pageActuelle = 1;
    $nombreDePages = '';
    $premiereEntree = 0;
    $message = '';
    $nationalite = '';
    $strWhere = '';
    // choix de l'affichage
    switch($choix){ //teste quel choix est sélectionné
      case "A":
       	$strWhere = "WHERE nationalite = 'Allemande'";
    	$nationalite = "'Allemande'";
      	break;
      case "F":
        	$strWhere = "WHERE nationalite = 'Française'";
    	$nationalite = "'Française'";
      	break;
      case "T":
    	$nationalite = "'Allemande' OR nationalite = 'Française'";
        	break;
    }
    //comptage des membres et des pages selon le choix effectué
    $sql = "SELECT COUNT(*) AS nb FROM membres" . $strWhere; //compte le nombre de personnes en fonction du choix effectué
    try {
        	$req = $cnx->query($sql);
        	$data = $req->fetch(); 
        	$TotalMembres = $data['nb']; // récupère le nombre d'enregistrements
    	$nombreDePages = ceil($TotalMembres/$membresParPage); // compte le nombre de pages
     }
    catch(Exception $e) {
       	echo "Mon Erreur : " . $e->getMessage();
     }
    //---------------------------
    //calcul du nombre de pages et définition de la page actuelle
    if (isset($_POST['envoyer']) && $choix){ //teste si le bouton envoyer et le choix de la nationalité sont cliqués
    	if (isset($_GET['lapage'])) { // teste si le numéro de la page est cliqué
    		$pageActuelle = intval($_GET['lapage']); // affecte le numéro de la page à la page actuelle
    		if ($pageActuelle > $nombreDePages) {	// teste si la page actuelle est supérieure aux nombre de pages
    			$pageActuelle = $nombreDePages; // si oui la page actuelle est égale aux nombre de pages
    		}
    	}
    	else {
    		$pageActuelle = 1; // si le numéro de page n'est pas sélectionné,la page actuelle est la n°1
    	}
    	$premiereEntree = ($pageActuelle - 1) * $membresParPage; // on calcule la première entrée à lire
    }
    else if (isset($_GET['lapage'])) { // teste si la un numéro de page est sélectionné
    	$pageActuelle = intval($_GET['lapage']);
    	if ($pageActuelle > $nombreDePages) {
    		$pageActuelle = $nombreDePages;
    	}
    	$premiereEntree = ($pageActuelle - 1) * $membresParPage; // on calcule la première entrée à lire
    }
    //affichage du nombre de page et de la page en cours
    		if (!empty($message)){
    			echo $message; echo '<br />';
    		}
    		if (empty($message)){
    			if (!empty($choix)){
    			for ($i = 1; $i <= $nombreDePages; $i++) {
    				if ($i == $pageActuelle) {
    					echo ' [ '.$i.' ] ';
    				}
    				else {
    					echo '<a href= "index.php?page=comodmember&amp;lapage='.$i.'" style="text-decoration:none">'.' '.$i.'</a>';
    				}
    			}
    			}
    		}


    Tout ça marchait avec une version php inférieure !!
    Je pense que le problème vient de "Switch" mais je ne vois pas quoi faire

  2. #2
    Expert éminent sénior
    Bonjour,
    Il nous faudrait le texte de la requête "complétée" (et virer * dans le select...).
    Sans ça impossible de répondre ici.

    Si c'est un problème de PHP, il faut pauser la question dans la section PHP.

    Tatayo.

  3. #3
    Membre averti
    J'ai repris le post car ce qui ne marche pas c'est le comptage des membres

    La requête
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //comptage des membres et des pages selon le choix effectué
    $sql = "SELECT COUNT(*) AS nb FROM membres" . $strWhere; //compte le nombre de personnes en fonction du choix effectué
    try {
        	$req = $cnx->query($sql);
        	$data = $req->fetch(); 
        	$TotalMembres = $data['nb']; // récupère le nombre d'enregistrements
    	$nombreDePages = ceil($TotalMembres/$membresParPage); // compte le nombre de pages
     }
    catch(Exception $e) {
       	echo "Mon Erreur : " . $e->getMessage();
     }


    Si le choix est de tout afficher ça marche mais si je sélectionne Allemands ou Français le comptage ne se fait pas

  4. #4
    Modérateur

    "Ça ne marche pas" n'est pas une description d'erreur...
    La requête s'exécute mais ne retourne aucune ligne ou déclenche-t-elle une erreur ?
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  5. #5
    Membre averti
    j'avais donné l'erreur affichée :

    &#65279;
    Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'Allemande'' at line 1
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // choix de l'affichage
    switch($choix){ //teste quel choix est sélectionné
      case "A":
       	$strWhere = "WHERE nationalite = 'Allemande'";
    	$nationalite = "'Allemande'";
      	break;
      case "F":
        	$strWhere = "WHERE nationalite = 'Française'";
    	$nationalite = "'Française'";
      	break;
      case "T":
    	$nationalite = "'Allemande' OR nationalite = 'Française'";
        	break;
    }
    //la requête
    $sql = "SELECT COUNT(*) AS nb FROM membres" . $strWhere; //compte le nombre de personnes en fonction du choix effectué

    La requête marche avec T puisque je n'ai pas la clause Where !!
    Merci

  6. #6
    Modérateur

    bonjour,

    Ce n'est plus le même script que celui posté initialement, ou vous utilisiez la variable $nationalite

    La vous utilisez la variable $strWhere

    Dans cette version, il n'y a pas d'espace entre le nom de la table et le WHERE, ce qui explique l'erreur

  7. #7
    Membre averti
    merci pour la réponse

    le code modifié
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // choix de l'affichage
    switch($choix){ //teste quel choix est sélectionné
      case "A":
    	$nationalite = "'Allemande'";
      	break;
      case "F":
    	$nationalite = "'Française'";
      	break;
      case "T":
    	$nationalite = "'Allemande' OR nationalite = 'Française'";
        	break;
    }
    //---------------------------
    //comptage des membres et des pages selon le choix effectué
    $sql = "SELECT COUNT(*) AS nb FROM membres WHERE nationalite = $nationalite";//compte le nombre de personnes en fonction du choix effectué
    try {
        	$req = $cnx->query($sql);
        	$data = $req->fetch(); 
        	$TotalMembres = $data['nb']; // récupère le nombre d'enregistrements
    	$nombreDePages = ceil($TotalMembres/$membresParPage); // compte le nombre de pages
     }
    catch(Exception $e) {
       	echo "Mon Erreur : " . $e->getMessage();
     }


    j'ai bien le comptage des personnes et le nombre de pages !!
    Merci

###raw>template_hook.ano_emploi###