Page 1 sur 1

Problème $_SESSION

Posté : 26 déc. 2012, 12:31
par orell1
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.

Re: Problème $_SESSION

Posté : 26 déc. 2012, 12:46
par moogli
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.



@+

Re: Problème $_SESSION

Posté : 26 déc. 2012, 12:56
par orell1
Merciiiiiii!
je l'écris donc ainsi :
".!empty($_SESSION['debut']).", ".!empty($_SESSION['nb_affichage_par_page'])."
Si j'ai bien compris...?

Merci

Re: Problème $_SESSION

Posté : 26 déc. 2012, 15:20
par moogli
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 ).




@+

Re: Problème $_SESSION

Posté : 26 déc. 2012, 16:40
par orell1
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.

Re: Problème $_SESSION

Posté : 26 déc. 2012, 18:13
par sirakawa
À 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";

Re: Problème $_SESSION

Posté : 27 déc. 2012, 00:50
par orell1
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

Re: Problème $_SESSION

Posté : 27 déc. 2012, 14:27
par sirakawa
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().

Re: Problème $_SESSION

Posté : 27 déc. 2012, 15:11
par orell1
Ok j'ai compris.
Merci beaucoup.

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