Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2011, 22h34   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 17
Points : 1
Points : 1
Par défaut Upload photo dans répertoire via mysql

Bonjour,

Je ne trouve pas depuis quelques temps, je cherche à permettre à mes clients d'une boutique d'uploader leurs photos.
J'aimerais que les photos soient stockées dans un répertoire de mon serveur et que la photo uploadée soit associée dans un champs de ma table suivante pour qu'elle corresponde au client qui l'a uploadé :

id_customer id_gender email passwd birthday lastname newsletter firstname

Ou alors dans une autre table et la lier à la table au dessus.
De ce fait je pourrais afficher où je veux la photo en fonction du client sur mon site. D'après le même système que les avatars.

Le problème c'est que je ne vois vraiment pas comment je pourrais faire car je ne m'y connais pas assez en php/mysql pour écrire moi même le code. Donc si vous pourriez m'aider ou si vous connaissez un script déjà existant...

Merci d'avance si vous preniez le temps de m'aider car je ne trouve pas.
GuilVIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 09h34   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Hello

Ce que tu cherches à faire est assez simple; il te faut une table users et une table users_files ou tu stocke l'id de l'utilisateur et le path du fichier (si tu peux stocker le mime et des commentaires c'est encore mieux).

Images attachées
Type de fichier : png users_files.png (7,6 Ko, 24 affichages)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 10h32   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 17
Points : 1
Points : 1
Ok merci infiniment pour cette réponse détaillée. Je comprends mieux grâce à ton schéma.
J'ai déjà ma table customers, le problème c'est que je ne comprends pas comment faire ça :

Citation:
une table users_files ou tu stocke l'id de l'utilisateur et le path du fichier
Enfin je ne comprends pas comment je peux lier les 2 tables et stocker le path dans la bdd.
D'autant que ça se complique beaucoup plus étant donné que la boutique (Prestashop) utilise le smarty et que le mieux serait de ne pas toucher aux fichiers core system. J'suis un peu perdu

Ton tuto sur SDZ m'est vraiment très utile mais j'ai entendu dire qu'il pouvait y avoir des failles de sécurité ?!
GuilVIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 11h11   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Citation:
Enfin je ne comprends pas comment je peux lier les 2 tables et stocker le path dans la bdd.
C'est le champ users_id de la table users_files qui assure la relation. Cette relation caractérise par ailleurs une cardinalité 1-n (1 utilisateur à n fichiers).
On peut (et je te le recommande) sécuriser cette association au moyen d'une contrainte sur la clé étrangère users_id - une clé étrangère est un attribut d'une table qui provient d'une autre table, dans notre exemple, users_id est en fait l'attribut id de la table users, on doit donc s'assurer que chaque users_id présent dans users_files, on a bien un id correspondant dans la table users, sinon on risque de se retrouver avec des entrées orphelines dans la table users_id.

Citation:
D'autant que ça se complique beaucoup plus étant donné que la boutique (Prestashop) utilise le smarty et que le mieux serait de ne pas toucher aux fichiers core system. J'suis un peu perdu
Tu aurais dû poster dans la section Prestashop au lieu de PHP/MySQL. Remarque, je ne comprends pas en quoi une gestion des images pour tes utilisateurs fait partie de ta boutique ? ça devrait être un module indépendant de prestashop non ? Je te déconseille de tout mettre dans le même sac; je te recommande plutôt de faire ton site de façon à avoir
- mon site
- page utilisateurs > gestion des images
- boutique
- une autre section (blog par exemple)

Citation:
Ton tuto sur SDZ m'est vraiment très utile mais j'ai entendu dire qu'il pouvait y avoir des failles de sécurité ?!
En effet, il t'appartient de t'assurer qu'un utilisateur malveillant ne puisse pas envoyer des fichiers exécutables sur le serveur par exemple ou des fichiers de nature à empêcher les autres utilisateur d'utiliser le service correctement (XSS). C'est relativement simple en fait, tu dois juste vérifier que le fichier que tu reçoit n'est pas un .cgi / .php etc. Le renommer systématiquement avant d'enregistrer son emplacement en BDD est également une façon de se protéger (ça peut se faire très simplement avec move_uploaded_file).

-- Edit: voici ce à quoi devrait ressembler ton SQL de création des tables:
Code :
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
 
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
 
-- -----------------------------------------------------
-- Table `users`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `users` (
  `id` BIGINT(25) NOT NULL AUTO_INCREMENT ,
  `surname` VARCHAR(90) NOT NULL ,
  `name` VARCHAR(90) NOT NULL ,
  `password` VARCHAR(45) NOT NULL ,
  `birthday` DATE NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;
 
-- -----------------------------------------------------
-- Table `users_files`
-- -----------------------------------------------------
 
CREATE  TABLE IF NOT EXISTS `users_files` (
  `id` BIGINT(25) NOT NULL AUTO_INCREMENT ,
  `path` VARCHAR(125) NOT NULL ,
  `mime` VARCHAR(15) NULL ,
  `comment` TEXT NULL ,
  `users_id` BIGINT(25) NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_users_files_users` (`users_id` ASC) ,
  CONSTRAINT `fk_users_files_users`
    FOREIGN KEY (`users_id` )
    REFERENCES `users` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
 
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 12h33   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 17
Points : 1
Points : 1
Merci beaucoup je suppose qu'avec ce que tu m'as donné en SQL, la relation est déjà intégré car c'est en partie ce que je n'arrivais pas à faire.

Je n'avais pas vu qu'il y avait une rubrique Prestashop, en fait j'essaie de créer mon propre module qui puisse ajouter la gestion des images. Pour tout te dire j'essaie d'insérer un mini réseau social à la boutique (avatar, friend requests,...) mais le tout incorporé à ma boutique.

J'ai appris à créer un module sous Prestashop mais je ne comprends pas techniquement comment je pourrais le réaliser.
Car un module Prestashop c'est : un folder (module) qui contient en général module.php et module.tpl qui est le fichier template mais qui contient aussi du php et du html.
Je vais déjà essayer de modifier ma table SQL customers avec ce que tu m'as donné.
Je ne saurais comment te remercier
GuilVIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 12h59   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Citation:
je suppose qu'avec ce que tu m'as donné en SQL, la relation est déjà intégré
En réalité, une relation entre deux tables se fait de manière logique. On peut cependant leur donner une existence concrète en utilisant des FOREIGN KEY et des CONSTRAINT sur ces clés:
Code :
1
2
3
4
5
 
INDEX `fk_users_files_users` (`users_id` ASC) , >> Notre clé étrangère
CONSTRAINT `fk_users_files_users` >> Notre contrainte sur cette clé
  FOREIGN KEY (`users_id` )
  REFERENCES `users` (`id` )
Citation:
Pour tout te dire j'essaie d'insérer un mini réseau social à la boutique (avatar, friend requests,...) mais le tout incorporé à ma boutique.
Ok, pourquoi pas.

Pour t'aider voici un exemple de requête qui liste les fichiers uploadés par un utilisateur (qu'on connait par son name):
Code :
1
2
3
4
 
SELECT u.`id`, u.`name`, u.`surname`, f.`path`, f.`mime`, f.`comment`
FROM users AS u JOIN users_files AS f ON (f.users_id=u.id)
WHERE u.name='$username';
Un code tout simple pour tester ça:
Code :
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
 
<?php
header('Content-Type: text/plain');
 
$connection = mysql_connect("localhost","root","") or die("Cannot open mysql connection");
mysql_select_db("UserFiles");
 
$username = "Charles";
 
$query = "SELECT u.`id`, u.`name`, u.`surname`, f.`path`, f.`mime`, f.`comment`".
         " FROM `users` AS u JOIN `users_files` AS f ON (f.`users_id`=u.`id`)".
		 " WHERE u.name='$username'";
 
if ($results = mysql_query($query))
{
	while ($row = mysql_fetch_assoc($results))
	{
		var_dump($row);
	}
}
else
{
	$err = mysql_error();
	var_dump($err);
}
(j'ai mis le jeu d'essai en pièce jointe)

Produit:
Code :
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
 
array(6) {
  ["id"]=>
  string(1) "1"
  ["name"]=>
  string(7) "Charles"
  ["surname"]=>
  string(6) "Dubois"
  ["path"]=>
  string(34) "/var/www/mon_site/upload/file1.jpg"
  ["mime"]=>
  string(10) "image/jpeg"
  ["comment"]=>
  string(22) "Un commentaire stupide"
}
array(6) {
  ["id"]=>
  string(1) "1"
  ["name"]=>
  string(7) "Charles"
  ["surname"]=>
  string(6) "Dubois"
  ["path"]=>
  string(34) "/var/www/mon_site/upload/file2.jpg"
  ["mime"]=>
  string(10) "image/jpeg"
  ["comment"]=>
  string(28) "Un autre commentaire stupide"
}
On va d'ailleurs se simplifier le travail en utilisant une vue.
Avec MySQL, comme avec la plupart des SGBD relationnelles, il est possible de créer des vues de données pour abstraire la complexité de certaines requêtes. Dans notre cas, on va s'en servir pour faciliter la requête que je viens de te donner:
Code :
1
2
3
4
5
 
CREATE VIEW get_users_files AS 
SELECT u.`id` , u.`name` , u.`surname` , f.`path` , f.`mime` , f.`comment`
FROM `users` AS u
JOIN `users_files` AS f ON ( f.`users_id` = u.`id` )
On va désormais pouvoir faire:
Code :
1
2
 
SELECT * FROM get_users_files WHERE name = "Peter"
Tout simplement comme s'il s'agissait d'une table. En réalité, on a créé en quelque sorte une macro.
Fichiers attachés
Type de fichier : sql sample.sql (2,8 Ko, 2 affichages)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 13h50   #7
Invité de passage
 
Inscription : janvier 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 17
Points : 1
Points : 1
Hmmm ok vu comme ça j'ai compris. Je dois donc créer la vue get_users_files pour me faciliter la relation entre les 2 autres.
J'ai plusieurs questions à te poser :

1-
Code sql :
 INDEX `fk_users_files_users`
Peut-on mettre le nom d'index que l'on veut ?

2-
Code sql :
1
2
3
SELECT u.`id`, u.`name`, u.`surname`, f.`path`, f.`mime`, f.`comment`
FROM users AS u JOIN users_files AS f ON (f.users_id=u.id)
WHERE u.name='$username';
Qu'est ce que cela donnerait avec les tables ps_customer et ps_customer_files ? Car j'ai du mal à imaginer.

3- Ensuite je crée la vue avec
Code sql :
CREATE VIEW get_users_files AS
?

Et après je suis le tuto de SDZ pour savoir comment uploader dans un répertoire et que le path se mette dans la variable correspondante c'est ça ?
Et au final je pourrais positionner l'image du client en affichant la variable path ?

Désolé si mes questions peuvent paraître débiles, autant XHTML/CSS je maîtrise mais PHP/MYSQL je fais noob
GuilVIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 14h39   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Citation:
Peut-on mettre le nom d'index que l'on veut ?
Oui mais il vaut mieux que ces noms soient uniques.

Citation:
Qu'est ce que cela donnerait avec les tables ps_customer et ps_customer_files ? Car j'ai du mal à imaginer.
La structure de la requête restera globalement la même, pour répondre précisément il faudrait que je voies les structures (tu peux les obtenir avec un "show create table <table>;")

Citation:
Et après je suis le tuto de SDZ pour savoir comment uploader dans un répertoire et que le path se mette dans la variable correspondante c'est ça ?
Oui, il faut que tu vérifie que Apache à bien les droits de lecture/écriture dans le répertoire ou tu vas stocker les images.
Tu vas utiliser move_uploaded_file pour ça en spécifiant le chemin de destination (là ou tu veux poser tes fichiers). Petit rappel; PHP mets par défaut les fichiers uploadés dans un répertoire temporaire avec un nom temporaire, ceci afin d'éviter qu'un utilisateur malicieux ne puisse aller éxécuter un script coté serveur en conaissant ce path (qui généralement reste inchangé sur une plateforme). Il t'appartient de déplacer ce fichier (avec la fonction cité ci-dessus) et de lui remettre le bon nom - dans ton cas je te suggère d'en générer un.

Citation:
Et au final je pourrais positionner l'image du client en affichant la variable path ?
Oui, supposons que ton HTTP ROOT soit /var/www/mon_site et que le répertoire ou tu pose les images soit /var/www/mon_site/upload/, il suffira que tu mettes des balises img de la forme:
Code :
1
2
 
<img src="/upload/fichier.ext" alt="fichier.ext" width="50" height="50" title="fichier" />
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 17h04   #9
Invité de passage
 
Inscription : janvier 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 17
Points : 1
Points : 1
Code :
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
ps_customer	
CREATE TABLE `ps_customer` (
 `id_customer` bigint(25) unsigned NOT NULL AUTO_INCREMENT,
 `id_gender` int(10) unsigned NOT NULL,
 `id_default_group` int(10) unsigned NOT NULL DEFAULT '1',
 `secure_key` varchar(32) NOT NULL DEFAULT '-1',
 `email` varchar(128) NOT NULL,
 `passwd` varchar(32) NOT NULL,
 `last_passwd_gen` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `birthday` date DEFAULT NULL,
 `lastname` varchar(32) NOT NULL,
 `newsletter` tinyint(1) unsigned NOT NULL DEFAULT '0',
 `ip_registration_newsletter` varchar(15) DEFAULT NULL,
 `newsletter_date_add` datetime DEFAULT NULL,
 `optin` tinyint(1) unsigned NOT NULL DEFAULT '0',
 `firstname` varchar(32) NOT NULL,
 `dni` varchar(16) DEFAULT NULL,
 `active` tinyint(1) unsigned NOT NULL DEFAULT '0',
 `deleted` tinyint(1) NOT NULL DEFAULT '0',
 `date_add` datetime NOT NULL,
 `date_upd` datetime NOT NULL,
 PRIMARY KEY (`id_customer`),
 UNIQUE KEY `customer_email` (`email`),
 KEY `customer_login` (`email`,`passwd`),
 KEY `id_customer_passwd` (`id_customer`,`passwd`),
 KEY `id_gender` (`id_gender`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
Voici ma table ps_customer et je réfléchis à créer la table ps_customer_files avec ce que j'aurais besoin.

J'ai pas compris le "fichier.ext" que tu mets dans les balise img, est ce que je ne pourrais pas afficher tout simplement la variable $path ?
<img src=$path_user> ou quelque chose comme ça ?
GuilVIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 17h14   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Si bien sûr, mais ça produira chez le client ce que je t'ai donné en exemple.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 17h21   #11
Invité de passage
 
Inscription : janvier 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 17
Points : 1
Points : 1
Ok parfait et pour ma table qu'est ce tu en penses ? Ca donnerait quoi la requête avec une autre table ps_customer_files ?
Car je vois pas à quoi ça correspond les u. et f.

Merci encore après ça j'aurai tous les éléments nécessaires
GuilVIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 22h16   #12
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
ça donnerai quelque chose dans ce goût là:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
CREATE  TABLE IF NOT EXISTS `ps_customer_file` (
  `id_file` BIGINT(25) NOT NULL AUTO_INCREMENT ,
  `path` VARCHAR(125) NOT NULL ,
  `mime` VARCHAR(15) NULL ,
  `comment` TEXT NULL ,
  `ps_customer_id` BIGINT(25) NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_ps_customer_id` (`ps_customer_id` ASC) ,
  CONSTRAINT `fk_ps_customer_id`
    FOREIGN KEY (`ps_customer_id` )
    REFERENCES `ps_customer` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
(j'ai respecté ton formalisme).
Tu peux ajouter des champs à ta convenance comme la date d'envoi ou la taille du fichier etc.

Citation:
Car je vois pas à quoi ça correspond les u. et f.
Dans l'exemple de requête que je t'ai donné, tu as dû remarquer l'emploi du mot clé 'AS' de SQL. Ce mot clé sert à définir un alias pour un nom de table au sein d'une requête.
Code :
1
2
 
SELECT a.id, b.id FROM table_a AS a, table_b AS b;
Comme tu le vois avec l'exemple ci-dessus, on a 2 tables (table_a et table_b qui ont toutes deux un champ 'id', ce n'est pas pratique pour les sélectionner ensemble (d'ailleurs si tu tentes de le faire, MySQL lancera une erreur disant qu'il est incapable de lever l'ambigüité sur le champ id, en fait il ne saura pas dans quelle table la prendre.) Ajouter les alias 'a' et 'b' dans la clause from et préfixer le noms des champs sélectionnés permet de lever cette ambigüité et de faire fonctionner la requête. C'est aussi plus lisible (dans une clause ON par exemple - voir requête quelques post au dessus) et plus court pour écrire.
Note; ce n'est pas une convention, si tu n'en a pas l'usage (parce que par exemple tu n'utilise qu'une seule table), libre à toi de ne pas t'en servir.

Donc pour résumer:
Code :
1
2
3
4
 
SELECT a.name FROM table AS a;
// equivaut à
SELECT table.name FROM table;
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 22h24   #13
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Une requête qui joindrait les deux tables 'ps_customer' et 'ps_customer_file' pourrait être:
Code :
1
2
3
4
5
6
 
SELECT f.path, f.mime, f.comment, u.id_customer, u.email 
FROM ps_customer_file AS f 
JOIN ps_customer AS u 
ON (f.ps_customer_id=u.id_customer)
WHERE email="<email>";
J'ai supposé que Email était l'équivalent de ton champ login vu qu'il y a un index unique dessus. Sache également que les requêtes s'exécutent plus rapidement si la clause WHERE utilise un champ indexé.

Pour la vue, c'est simple:
Code :
1
2
3
4
5
6
7
8
9
 
CREATE VIEW ps_get_customer_file AS 
SELECT f.path, f.mime, f.comment, u.id_customer, u.email 
FROM ps_customer_file AS f 
JOIN ps_customer AS u 
ON (f.ps_customer_id=u.id_customer);
 
// Une requête sur cette vue
SELECT * FROM ps_get_customer_file WHERE email="<email>";
J'en profite pour préciser qu'on ne peut pas insérer, mettre à jour ou supprimer des champs avec une vue.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2011, 13h12   #14
Invité de passage
 
Inscription : janvier 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 17
Points : 1
Points : 1
Merci beaucoup pour toutes ces informations, tu te gaves
Maintenant que j'ai compris je vais passer à la pratique et ça risque d'être une autre histoire...
Merci encore Benjamin !
GuilVIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h22.


 
 
 
 
Partenaires

Hébergement Web