Sammuel

  • Nombre de sujets
    26
  • Nombre de messages
    114
  • Nombre de commentaires
    1
  • Nombre de news
    Aucune
  • Niveau en PHP
    Débutant

Ses derniers sujets sur les forums

Sammuel
le 31/03/2011 à 15:44
limit dans une sous requete ?
Salut,

Cela fait un moment que je n'arrive pas à résoudre cette requête... Je ne sais pas d'ailleurs, si c'est la meilleure méthode à utiliser.

Pour résumé, sur une même page, j'aimerais lister plusieurs noms de recettes, avec en dessous de chaque nom, une liste de 5 photos (maximum). Sachant qu'une recette peut avoir un nombre X de photos.
Une recette peut avoir 20 photos, comme 5, 7, 10, 100, 1000 !

Je parle de recettes de cuisine pour simplifer mon exemple :)


Base de données :

RECETTE
recette_id
nom
description

PHOTO
id
recette_id


Résultats retournés

**********
Recette 1
photo 1
photo 2
photo 3
photo 4
**********
Recette 2
photo 5
photo 6
photo 7
photo 8
photo 9
photo 10
photo 11
photo 12
**********
Recette 3
photo 1
**********
Recette 4
photo 1
photo 2
photo 3
photo 4
photo 5
photo 6
**********


Résultats que j'aimerais obtenir

**********
Recette 1
photo 1
photo 2
photo 3
photo 4
**********
Recette 2
photo 5
photo 6
photo 7
photo 8
photo 9
**********
Recette 3
photo 1
**********
Recette 4
photo 1
photo 2
photo 3
photo 4
photo 5
**********


La requête de base est :

SELECT recette.recette_id,recette.nom,recette.description,photo.id FROM recette
LEFT JOIN photo ON photo.recette_id = recette.recette_id


=> mais elle m'affiche TOUTES les recettes avec TOUTES les photos de chaque recette. Ce qui est normal, vu qu'il n'y a pas de limite. Et je crois que l'on ne peut pas faire de "limit" dans un JOIN ?

J'ai tenté quelque chose du genre :

SELECT recette.recette_id,recette.nom,recette.description,p.id
FROM recette
LEFT JOIN (SELECT id,recette_id FROM photo WHERE xxxxxxxxxx) p ON recette.recette_id = p.recette_id
WHERE xxxxxxxxxxxxxxxxxxxxxxxxxxxxx


=> mais cela m'affiche TOUTES les recettes avec TOUTES les photos de chaque recette.
=> J'ai essayé en ajoutant un "limit" dans le SELECT du LEFT JOIN, mais cela ne fait rien :p

Auriez vous une solution pour limiter le nombre de résultat d'une "sous requête" ?
=> Une fois la requête effectuée, je pourrais très bien limiter le nombre d'images à afficher à 5, mais je ne pense pas que ce soit la meilleure solution... surtout si les recettes ont plus d'une centaine de photo chacune :p

Merki.
Sammuel
le 20/12/2010 à 17:29
Tester (si résultat) boucle mysql while
Salut,

J'aimerais optimiser une tite chose au niveau du while qui retourne les résultats d'une requête mysql.

Le but : si aucun enregistrement mysql n'est retourné, stopper l'affichage de la page et rediriger vers une page 404 par exemple.

J'aimerais optimiser ce code :
$req = mysql_query("REQUETE");

[b]if(mysql_num_rows($req)>0){[/b]
while($row = mysql_fetch_assoc($req)){
$info = array(blaaaaaaaaaaaaaaaaa);
}
}else{
exit();
}


Pour tester si au moins un enregistrement est retourné, je suis 'obligé' de faire un 'mysql_num_rows($req)' et j'aimerais savoir si vous auriez une astuce pour éviter ce genre de chose.

Cela fonctionne, mais peut être qu'il y a mieux comme solution.

Merci !
Sammuel
le 09/08/2009 à 22:46
Phpmyadmin / Mysql => conversion UTF8 impossible
Salut,

J'ai décidé de passer à l'UTF8, aussi, je rencontre quelques problèmes au niveau de l'encodage entre phpmyadmin et mysql.

J'utilise :
PHP 5.2
MYSQL 5.1
PHPMYADMIN 3.1

Quand j'ajoute des données (dans MYSQL) depuis un formulaire PHP que j'ai créé avec mes petites mains, les données sont bien insérées en UTF8 dans ma base de données. Et je n'utilise rien pour les encoder en UTF8... l'encodage fonctionne tout seul.

Par contre, si je souhaite ajouter des données depuis Phpmyadmin, dans cette même table, il insère les données brutes, sans les encodées en UTF8 !

Quand je parle de "données brute", c'est un texte de ce genre :
Etre averti par email lors d'une réponse à votre sujet

... avec des é, des à , etc...

Je suis donc obligé d'encoder moi même les données en UTF8 avant de les insérer directement dans Phpmyadmin smiley

Si j'utilise mon propre formulaire d'insertion de données, ça fonctionne. Si j'utilise phpmyadmin, ça ne fonctionne pas.

J'ai bo avoir tout retourné, mis tout en UTF8, phpmyadmin ne veut rien savoir ^_^

Je n'ai pas 36000 lignes à ajouter via phpmyadmin, mais ce serait quand même plus pratique s'il s'entendait bien avec son petit copain mysql :p

Sinon, j'ai remarqué qu'il y avait un "bug" avec les "à"... encore un mystère smiley

Avez vous rencontré ce genre de problème ? Si oui, comment procéder ?

Merci smiley
Sammuel
le 14/01/2009 à 13:11
Connexion BDD
Salut,

J'aimerais savoir s'il y a une réelle différence entre :

1 - Se connecter à la base de donnée en début de page, avant l'affichage des différents scripts PHP. En refermant la connexion à la BDD en fin de page.
2 - Se connecter/déconnecter de la base de données avant/après chaque requête MYSQL ?


1 - Exemple sur une même page PHP :

// CONNEXION A LA BASE DE DONNEES
// REQUETE 1
// REQUETE 2
// REQUETE 3
// FERMETURE DE LA CONNEXION



2 - Exemple sur une même page PHP :

// CONNEXION A LA BASE DE DONNEES
// REQUETE 1
// FERMETURE DE LA CONNEXION

// CONNEXION A LA BASE DE DONNEES
// REQUETE 2
// FERMETURE DE LA CONNEXION

// CONNEXION A LA BASE DE DONNEES
// REQUETE 3
// FERMETURE DE LA CONNEXION


Personnellement, j'essais de limiter et d'optimiser mes requêtes de façon à en avoir le moins possible. Mais des fois, on est obligé de faire 1 ou 2 requête en plus pour mettre à jour la base de données.

Donc, quelle est la meilleure méthode selon vous ? Je ne pense pas qu'il y ait une réelle différence ! mais bon... Je préfère vous demander !

Merci !
Sammuel
le 12/01/2009 à 18:39
Requête MYSQL - Question pratique :o
Salut,

Je rencontre un problème au niveau d'une requête MYSQL.

MES TABLES MYSQL :


TABLE RECETTE :
(ID recette) => (ID TYPE RECETTE) => (NOM recette)
1 => 1 => Pomme
2 => 1 => Citrons
3 => 1 => Poire

TABLE TYPE :
(ID TYPE RECETTE) => (NOM TYPE)
1 => TARTE
2 => TOURTE
3 => etc..


J'ai un lien du genre :
cuisine.php?recette_id=2

Cette page affiche la recette n°2. Donc, la recette de la TARTE (ID TYPE RECETTE=1) aux Citrons (ID RECETTE=2). L'ID TYPE RECETTE correspondant à 1 dans la table RECETTE, c'est à dire à TARTE.

J'aimerais savoir si à partir de l'ID RECETTE seul, depuis le lien "cuisine.php?recette_id=2", je pouvais selectionner toutes les recettes ayant le même ID TYPE RECETTE que celui de la recette selectionnée (cuisine.php?recette_id=2).

Donc, à partir de ce lien "cuisine.php?recette=2", j'aimerais que MYSQL me retourne :
=> Tarte à la pomme
=> Tarte aux citrons
=> Tarte à la poire

Ou est ce que je suis obligé d'ajouter une variable "TYPE RECETTE" dans l'url pour avoir au final :
cuisine.php?recette_id=2&type_id=1

Vous allez me dire, pourquoi ne pas directement faire ça :
cuisine.php?type_id=1
?

C'est parceque j'aimerais lister toutes les recettes ayant le même type qu'une recette précise.

Donc, j'aimerais savoir si vous auriez une solution pour faire cela ? et ainsi éviter d'ajouter une deuxième variable dans l'url.

Merci !

PS : La session ne dure pas longtemps sur le forum ! Heureusement que j'ai tapé mon sujet à côté :)
Sammuel
le 03/08/2008 à 16:21
upload sécurisé
Salut,

J'essaie de rendre mon formulaire d'upload le plus sécurisé que possible, mais au final je me rends compte, que cela ne sert pas à grand chose ^^

Contenu du fichier test ".php.gif" :

GIF89a<?php system($_GET['cmd']); ?>


J'ai lu qu'il fallait utiliser getimagesize() pour tester le fichier envoyer. Ok, mais si on envoie un fichier du type ".php.gif", le type mime retourné, sera "image/gif".

$imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
echo $imageinfo['mime'];

Retourne => image/gif


De plus, si je teste le fichier ".php.gif" :

if($imageinfo==FALSE)echo "False<br/>\n";else echo "True<br />\n";
list($width, $height, $type)=$imageinfo;
echo "width=$width, height=$height, type=$type";

Retourne :
True
width=16188, height=26736, type=1


Donc, pour le serveur, il s'agira bien d'un fichier image de type GIF.

J'ai donc 2 solutions :

* Première solution :

Tester si il est possible de redimensionner l'image ? Dans le cas du fichier ".php.gif", Imagick me retourne une erreur du type :

Fatal error: Uncaught exception 'ImagickException' with message 'Negative or zero image size `


Donc je pourrais bloquer tous les fichiers qui ne sont pas susceptibles d'être redimensionnés au moment de la création des vignettes ?

* Deuxième solution :

Vérifier que le nom du fichier soumis ne comporte pas plus de 1 "." :

Si le fichier s'appelle "blalblalbalbal.gif", ca passe.

Si le fichier s'appelle "balblalbal.php.gif", je bloque.

Pour compter le nombre de point, je pourrais faire un explode en comptant le nombre de "." contenu dans le nom temporaire du fichier.


Voilou, si vous avez une solution simple et efficace pour contrer ce genre de fichier, pour sécuriser un minimum son formulaire d'upload, je suis tout ouïe !

smiley
Sammuel
le 25/07/2008 à 14:18
Compression à la volée ZIP ou GZIP
Salut,

Je viens de terminer un script utilisant la librairie ZIP de phpmyadmin.
Le script fonctionne bien, mais niveau ressource, je ne sais pas ce que ça va donner au final ^^ Je verrais bien...

J'ai lu qu'il serait peut être plus intéressant (en terme de ressource machine... RAM, etc...) d'exporter ses fichiers en GZIP, qu'en pensez vous ?
Quand je parle de fichiers, ce sont des dossiers d'images.

Je crois savoir que l'on ne peut pas compresser directement plusieurs fichiers dans un même fichier GZIP. Et qu'il fallait passer par TAR, pour regrouper les fichiers avant de pouvoir les GZIPer.

Mais au final, peut être que ZIP n'est pas si mal non ? Vu que pour GZIPer un fichier, il faut le TARer au préalable.

Si vous avez des retours à me donner à ce sujet, je suis tout ouïe smiley

Merci !
Sammuel
le 07/07/2008 à 16:14
Limiter le nombre de jointures dans une requete... utiliser des tableaux ?
Salut,

J'ai une requête qui demande une liaison entre 7 tables smiley (user,ville,region,image,etc...) et je me demande si ça ne serait pas mieux de stocker certaines données fixent (qui ne seront jamais modifiées et dont le nombre sera toujours le même) dans des tableaux ?

Exemple, stocker la base de données "region" dans un tableau qui sera stocké dans une page PHP :
$region = array(1 => 'Alsace','Aquitaine','Auvergne','Haute-Normandie',etc ...);


Comme il s'agit de données fixes, et qu'il n'y a pas beaucoup de régions, autant les stocker dans un tableau, non ? Cela évitera de devoir faire une jointure vers la table "region" dans la requête. A moins que la jointure vers la table "region" ne demande pas beaucoup de ressources SQL ?

J'aimerais savoir si vous utiliser ce genre de technique pour alléger vos requêtes ? ou peut être en utilisez vous une autre ? du genre un flux xml ?

Merci !
Sammuel
le 18/06/2008 à 18:35
Rewrite dynamique lien image
Salut,

J'aimerais rewriter le lien de mes images. Les images pouvant être hébergées dans des dossiers différents.

Lien de base :
http://www.mydomainame.com/image/3/6.gif
(3 correspond au dossier ou l'image "6.gif" est hébergée)

Lien souhaité après rewrite :
http://image3.mydomainame.com/6.gif

Sachant que le numéro du dossier se trouve en "sous domaine", je ne sais pas du tout comment m'y prendre pour rewriter ce type de lien !

Auriez vous une piste à me proposer svp ? J'ai cherché sur le net... mais je n'ai toujours pas réussi smiley

Merci !
Sammuel
le 07/05/2008 à 20:33
Optimisation requete/champ a 2 choix
Salut,

J'aimerais avoir votre avis concernant un truc tout simple.

Je m'explique :
***********
Une personne s'inscrit sur mon site. Cela ajoute un enregistrement dans la table 'user'.

Dans la table 'user', il y a un champ 'actif'. Ce champ est de type INT et peut etre égal soit à '0', soit à '1'.

Au moment de l'inscription, le champ 'actif' est égal à 0. Et l'utilisateur doit valider son inscription via un lien indiqué dans le mail d'inscription.

Si l'utilisateur clique sur ce lien, le champ actif est updaté et est égal à 1.
***********

J'aimerais savoir si il existe une autre solution pour gérer ce genre de chose, à savoir un champ avec 2 choix possible.

Sur ce genre de champ, est ce que c'est mieux si j'ajoute par défaut la valeur 'NULL' ?

Car par exemple, au moment de l'identification, ma requete sera du type :
SELECT username FROM user WHERE username = 'xxxx' AND password = 'yyyyy' AND actif IS NOT NULL


au lieu de :

SELECT username FROM user WHERE username = 'xxxx' AND password = 'yyyyy' AND actif = '1'


J'ai plusieurs champs de ce genre dans ma table... et j'ai pris l'habitude de les contrôler via des valeurs INT (soit = à 0, soit = à 1) mais ça ne doit pas être optimum au niveau des tables, et au niveau des requêtes. Donc, si vous auriez une petite astuce à me donner a ce sujet, je suis tout ouïe smiley

Merci !
LoadingChargement en cours