[RESOLU] Problème $_SESSION

Mammouth du PHP | 687 Messages

26 déc. 2012, 12:31

Bonjour à tous,
J'ai une petite erreur que je n'arrive pas à corriger, peut-être avez vous une idée de comment faire...?

mon erreur : Erreur SQL !SELECT * FROM clients order by num_client desc limit 0,
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 '' at line 1

Ma requête
  $conn = db_connect();
  $sql = "SELECT * FROM ".CLIENTS." where ref ='$num_c' order by $tri desc limit ".$_SESSION['debut'].", ".$_SESSION['nb_affichage_par_page'].""; 
  $result = mysql_query($sql, $conn) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  $num_results = mysql_num_rows($result) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
J'ai l'impression que cela provient de ".$_SESSION['debut'].", ".$_SESSION['nb_affichage_par_page'].""; car lorsque je navigue un peu sur le site et que je revient sur la page où l'erreur se produit, plus d'errreur et tout fonctionne...

Avec vous une idée svp?

Merci par avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 déc. 2012, 12:46

Salut,

Effectivement le problème viens de ta seconde variable de session qui n'est pas valorisée. La requête finit par une virgule => erreur ;)

Utilise empty pour éviter ce type d'erreurs.



@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

26 déc. 2012, 12:56

Merciiiiiii!
je l'écris donc ainsi :
".!empty($_SESSION['debut']).", ".!empty($_SESSION['nb_affichage_par_page'])."
Si j'ai bien compris...?

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 déc. 2012, 15:20

Non, plutôt avec de vrai condition et la concaténation.
<?php
$sql ='le début de la requête ';
If (!empty($_SESSION['debut']) && !empty($_SESSION['nb_affichage_par_page'])){
$sql .= 'la limite';
}
// exécution de la requête. 
?>
Tu peux aussi ajouter une condition pour être certain que les deux paramètres soit bien de entier (avec filter_var et le filtre FILTER_VALIDATE_INT ).




@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

26 déc. 2012, 16:40

je viens d'essayer ce que tu m'as dit :
  $conn = db_connect();
  $sql = "SELECT * FROM ".CLIENTS." order by $tri desc";
    if (!empty($_SESSION['debut']) && !empty($_SESSION['nb_affichage_par_page'])){
  $sql .="limit ".$_SESSION['debut'].", ".$_SESSION['nb_affichage_par_page'].""; 
  }
  $sql =" limit ".$_SESSION['debut'].", ".$_SESSION['nb_affichage_par_page'].""; 
  $result = mysql_query($sql, $conn);
  $num_results = mysql_num_rows($result);
mais ça ne fonctionne pas très bien...
En fait l'erreur a disparu mais il ne fait plus de limit...
Il affiche tous les résultats...

une idée?

Merci beaucoup.

Mammouth du PHP | 2278 Messages

26 déc. 2012, 18:13

À partir de l'idée de moogli, en relisant la doc de filter_var:
<?PHP
$nombre_enregistrements = 144; //calculé par ailleurs
$debut_demande = 144;
$nombre_demande = 1;
//vérification du début
$options = array(
'options' => array(
'default' => 0, // valeur à retourner si le filtre échoue
'min_range' => 0,//ou 1 suivant comment est gérée la table
'max_range'=> $nombre_enregistrements
),
'flags' => '',
);

$debut = filter_var( $debut_demande, FILTER_VALIDATE_INT, $options);
var_dump($debut); // pour les tests

$options = array(
'options' => array(
'default' => ($nombre_enregistrements-$debut)+1, // valeur à retourner si le filtre échoue
'min_range' => 1,
'max_range'=> $nombre_enregistrements-$debut
),
'flags' => '',
);

$nombre = filter_var( $nombre_demande, FILTER_VALIDATE_INT, $options);
var_dump($nombre); // pour les tests

?>

$sql = "SELECT * FROM CLIENTS where ref ='$num_c' order by $tri desc limit $debut, $nombre";
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 687 Messages

27 déc. 2012, 00:50

Merci beaucoup!
Tout fonctionne bien ;-)
Merci pour votre aide!

Petite question...?
J'ai un formulaire php et j'utilise onchange="this.form.submit();" pour envoyer une seule la valeur d'un des champs dans ma base sql...
Je souhaite revenir sur ce même formulaire lorsque le submit est fait avec bien entendu les valeurs qui ont déjà été précédemment remplies .

Une petite idée?

Merciiii

Mammouth du PHP | 2278 Messages

27 déc. 2012, 14:27

il faudrait que le script cible contienne des champs cachés dans un <form method='post'...> et que ce formulaire soit activé après modif de la bdd, ou alors mettre les variables en session.
Mais je pense sans en être sûr qu'il vaut mieux attendre que mysql ait fini(ne pas mettre de header)
<?PHP
$requete = "";
mysql_query($requete):
$_SESSION= ...;
?>
<body onload ='active()'>
<form ...>
</body>
où active est du même genre que ce que tu fais sur onchange().
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 687 Messages

27 déc. 2012, 15:11

Ok j'ai compris.
Merci beaucoup.

Je vais tester tout ça.
Bonnes fêtes de fin d'année!