galerie photo

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : galerie photo

par Lorenzo » 18 avr. 2006, 07:32

bordel, encore invité :?
ya qu'a moi que le forum en veut ? :)


donc tu aurais du mettre LIKE '%%%s%%' .... tu commence a comprendre pourquoi le sprintf n'est peut etre pas a sa bonne place ?

par Invité » 18 avr. 2006, 07:16

ATTENTION : dans un sprintf, tous les % litteral doivent etre echappé par un % donc si tu veux renvoyer un % tu doit mettre %%

par Chile » 17 avr. 2006, 21:33

:D avec la soluce de Truc et la remarque de Lorenzo, ca marche tres bien !! donc en resumé :
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s%%' AND bpays.site LIKE '%s%%' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage); 
merci beaucoup a vous deux :wink:

par Lorenzo » 17 avr. 2006, 20:47

ATTENTION : dans un sprintf, tous les % litteral doivent etre echappé par un % donc si tu veux renvoyer un % tu doit mettre %%

par Truc » 17 avr. 2006, 19:08

a l'origine c'est du dreamweaver
le revoilà mon mot :lol:

En effet encore sprintf() qu'il ne veux pas comme le echo() :
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s\%' AND bpays.site LIKE '%s\%' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);
essaie en échappant les % avec \

Sinon repasse en mode plus courant:
$query_affichageimage = "SELECT * FROM bpays WHERE bpays.pays LIKE '".$colname_affichageimage."%' AND bpays.site LIKE '".$colname2_affichageimage."%' ORDER BY bpays.pays");

par Chile » 17 avr. 2006, 18:34

si , j'avais bien vu ton code Truc,
je l'avais appliqué :
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s%' AND bpays.site LIKE '%s%' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);
mais lorsque je fais la requete j'ai ce message d'erreur :

Code : Tout sélectionner

Warning: sprintf(): Too few arguments in ......./affichageimag.php on line 18 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 'LIMIT 0, 4' at line 1
et la ligne 18 c'est celle la :cry:
pour repondre a Lorenzo, je veux bien croire que mon script est bizarre ! a l'origine c'est du dreamweaver, puis retouché peu a peu avec vous pour qu'il reponde a mon besoin :wink:

par Truc » 17 avr. 2006, 18:23

Argh mon post à du passer inaperçu alors je le remet...
bah j'ai oublié le principal avec l'utilisation de LIKE... le %.

j'ai confondu avec celui de sprintf()

Donc ça donnerait:
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s%' AND bpays.site LIKE '%s%' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);

par Lorenzo » 17 avr. 2006, 18:19

la je ne peux plus t'aider vu que je n'ai pas la librairie mysql ....

tu vas devoir tester avec des echo a differents endroits de ton script pour voir si tu as bien les valeurs que tu attends ...

par Invité » 17 avr. 2006, 18:17

Merci pour le code Lorenzo, mais je l'ai mis
en place, mais ca ne marche plus :)
je ne pense pas avoir oublié qlq chose, car j'ai fait
betement un copier/coller.
pas de message d'erreur, mais pas de données !

par Lorenzo » 17 avr. 2006, 18:11

oups, j'ai oublié de dire qu'il faut absolument proteger les chaines qui viennent de l'exterieur contre les attaques, betises et autres ....

donc tu dois utiliser mysql_real_escape_string() ou mysql_escape_string() voir meme un addslashes() pour proteger les chaines avant de les inserer dans la requete

---------------

qu'un mot "Dreamweaver" ?

j'ai pas compris, mais ca doit etre normal, j'ai pas encore dormi et il est presque 18h et j'ai encore tout le menage a faire ce qui me stresse d'avance :(

par Truc » 17 avr. 2006, 18:06

deja je vois pas trop ce qu'un sprintf() vient faire ici, mais c'est surement une question de gout ... les egouts et les couleurs ca ne se discute pas :lol:
qu'un mot "Dreamweaver" :lol:

Ce code est une autre soluce mais la mienne est courte :wink:

par Lorenzo » 17 avr. 2006, 18:02

deja je vois pas trop ce qu'un sprintf() vient faire ici, mais c'est surement une question de gout ... les egouts et les couleurs ca ne se discute pas :lol:

tout le code que je t'ai mis te permet de creer une variable qui va contenir la requete MySQL.


bon sang, j'ai vraiment du mal avec ton script, j'ai rarement vu ca ... bon, j'arrete de faire ma mauvaise tete et je te file ce que je pense etre la bonne reponse ... :?:



$currentPage = $_SERVER["PHP_SELF"];

// On affecte la valeur de $_POST si elle existe, sinon celle de $_GET si elle existe, sinon on laisse vide :
$colname_affichageimage = (isSet($_POST['pays'])) ? $_POST['pays'] : ((isSet($_GET['pays'])) ? $_GET['pays'] : "");
$colname2_affichageimage = (isSet($_POST['site'])) ? $_POST['site'] : ((isSet($_GET['site'])) ? $_GET['site'] : "");


$maxRows_affichageimage = 4;
$pageNum_affichageimage = 0;
if (isset($_GET['pageNum_affichageimage'])) {
  $pageNum_affichageimage = $_GET['pageNum_affichageimage'];
}
$startRow_affichageimage = $pageNum_affichageimage * $maxRows_affichageimage;

mysql_select_db($database_pays, $pays);


$w1 = '';
$w2 = '';
if( $colname_affichageimage ){
    $w1 = "bpays.site LIKE '$colname_affichageimage'";
}
if( $colname2_affichageimage ){
    $w2 = $w1 ? " AND bpays.pays LIKE '$colname2_affichageimage'" : "bpays.pays LIKE '$colname2_affichageimage'";
}

if( $w1 || $w2 ){
    $query_affichageimage = "SELECT * FROM bpays WHERE $w1 $w2 ORDER BY bpays.pays";
}else{
    $query_affichageimage = "SELECT * FROM bpays ORDER BY bpays.pays";
}


$query_limit_affichageimage = sprintf("%s LIMIT %d, %d", $query_affichageimage, $startRow_affichageimage, $maxRows_affichageimage);
$affichageimage = mysql_query($query_limit_affichageimage, $pays) or die(mysql_error());
$row_affichageimage = mysql_fetch_assoc($affichageimage);

if (isset($_GET['totalRows_affichageimage'])) {
  $totalRows_affichageimage = $_GET['totalRows_affichageimage'];
} else {
  $all_affichageimage = mysql_query($query_affichageimage);
  $totalRows_affichageimage = mysql_num_rows($all_affichageimage);
}
$totalPages_affichageimage = ceil($totalRows_affichageimage/$maxRows_affichageimage)-1;

$queryString_affichageimage = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_affichageimage") == false &&
        stristr($param, "totalRows_affichageimage") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_affichageimage = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_affichageimage = sprintf("&totalRows_affichageimage=%d%s", $totalRows_affichageimage, $queryString_affichageimage);

par Truc » 17 avr. 2006, 17:57

bah j'ai oublié le principal avec l'utilisation de LIKE... le %.

j'ai confondu avec celui de sprintf()

Donc ça donnerait:
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s%' AND bpays.site LIKE '%s%' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);

par Chile » 17 avr. 2006, 17:41

Salut Lorenzo, et merci,
j'ai compris le principe, par contre je ne sais pas
ou le placer dans mon script, et si je dois eliminer
une qlq chose ? :oops:
j'ai essayé de rempalcer ici :
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s' AND bpays.site LIKE '%s' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);
mais ca ne marche plus :cry:
si tu peux m'en dire plus

par Lorenzo » 17 avr. 2006, 16:52

ben logique puisque la requete fait une recherche sur une chaine vide !

si tu veux choisir tous les champs de la table MySQL quand l'utilisateur renvoit une valeur vide ou non definit pour le "site", tu vas devoir modifier ton PHP pour creer une autre requete, ex :
if( !isset($_post['site']) || $_post['site'] == '' ){
    // je liste pour tous les sites
    $req = "SELECT * FROM bpays WHERE bpays.pays LIKE '$_post[pays]'  ORDER BY bpays.pays"
}else{
    // je liste pour 1 site
    $req = "SELECT * FROM bpays WHERE bpays.pays LIKE '$_post[pays]' AND  bpays.site LIKE '$_post[site]' ORDER BY bpays.pays"
}

---------
edit :

puisque tu peux avoir les 2 possibilités de choix de l'utilisateur non definit, il faudrait meme faire ca :

$w1 = '';
$w2 = '';
if( isset($_post['site']) && $_post['site'] ){
    $w1 = "bpays.site LIKE '$_post[site]'"
}
if( isset($_post['pays']) && $_post['pays'] ){
    $w2 = $w1 ? " AND bpays.pays LIKE '$_post[pays]'" : "bpays.pays LIKE '$_post[pays]'";
}

if( $w1 || $w2 ){
    $req = "SELECT * FROM bpays WHERE $w1 $w2 ORDER BY bpays.pays";
}else{
    $req = "SELECT * FROM bpays ORDER BY bpays.pays";
}

------------
edit n°2 :

puisque tu proposes un select aux utilisateurs, autant le proposer sous sa forme "multiple", qu'ils puissent selectionner les pays qu'ils veulent et pareil pour les site, ex :

<select name="toto" size="5" multiple="multiple">