Code php et bdd

Code php et bdd - PHP - Programmation

Marsh Posté le 03-02-2008 à 17:17:05    

Bonjour,
 
voila mon "probleme" qui n'en ai pas vraiment un, je debute en php/sql, je souhaiterais me créer une mediathèque perso en local.
 
je me suis créer une BDD avec phpMyAdmin (livré avec wamp), mais je ne sais pas quels code rentrer en php pour y acceder, que se soit uniquement pour la lecture que pour rentrer des données dedans.
 
pour commencer, voila ma BDD, dites moi ce qui va et ce qui va pas, svp, je suis la encore debutant, j'ai surement fais des erreurs, mais ou ?
 

Code :
  1. -- phpMyAdmin SQL Dump
  2. -- version 2.10.1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Serveur: localhost
  6. -- Généré le : Dim 03 Février 2008 à 16:55
  7. -- Version du serveur: 5.0.41
  8. -- Version de PHP: 5.2.3
  9. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  10. --
  11. -- Base de données: `mediatheque`
  12. --
  13. -- --------------------------------------------------------
  14. --
  15. -- Structure de la table `films_series`
  16. --
  17. CREATE TABLE `films_series` (
  18.   `id` int(10) NOT NULL auto_increment,
  19.   `image` varchar(50) character set utf8 collate utf8_bin NOT NULL,
  20.   `titre` varchar(100) character set utf8 collate utf8_bin NOT NULL,
  21.   `synopsis` varchar(1000) character set utf8 collate utf8_bin NOT NULL,
  22.   `dureeheures` varchar(2) character set utf8 collate utf8_bin NOT NULL,
  23.   `dureeminutes` varchar(2) character set utf8 collate utf8_bin NOT NULL,
  24.   PRIMARY KEY  (`id`)
  25. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  26. --
  27. -- Contenu de la table `films_series`
  28. --
  29. -- --------------------------------------------------------
  30. --
  31. -- Structure de la table `livres`
  32. --
  33. CREATE TABLE `livres` (
  34.   `id` int(10) NOT NULL auto_increment,
  35.   `image` varchar(50) character set utf8 collate utf8_bin NOT NULL,
  36.   `auteur` varchar(30) character set utf8 collate utf8_bin NOT NULL,
  37.   `titre` varchar(30) character set utf8 collate utf8_bin NOT NULL,
  38.   `resume` varchar(1000) character set utf8 collate utf8_bin NOT NULL,
  39.   `isbn` varchar(15) character set utf8 collate utf8_bin NOT NULL,
  40.   PRIMARY KEY  (`id`)
  41. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  42. --
  43. -- Contenu de la table `livres`
  44. --
  45. -- --------------------------------------------------------
  46. --
  47. -- Structure de la table `musiques`
  48. --
  49. CREATE TABLE `musiques` (
  50.   `id` int(10) NOT NULL auto_increment,
  51.   `image` varchar(50) character set utf8 collate utf8_bin NOT NULL,
  52.   `artiste` varchar(30) character set utf8 collate utf8_bin NOT NULL,
  53.   `album` varchar(30) character set utf8 collate utf8_bin NOT NULL,
  54.   `pistes` varchar(1000) character set utf8 collate utf8_bin NOT NULL,
  55.   `dureeheures` varchar(2) character set utf8 collate utf8_bin NOT NULL,
  56.   `dureeminutes` varchar(2) character set utf8 collate utf8_bin NOT NULL,
  57.   PRIMARY KEY  (`id`)
  58. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  59. --
  60. -- Contenu de la table `musiques`
  61. --


 
ensuite, quel code ecrire dans ma page pour voir les données rentrées, ou en rajouter, si je suis pas clair hesiter pas.
 
j'ai deja mis ce code pour le chemin de la BDD/tables
 

Code :
  1. <?php
  2. $mediatheque = mysql_connect("localhost","root","" ) or trigger_error(mysql_error(),E_USER_ERROR);
  3. $database = "mediatheque";
  4. ?>


 
merci d'avance pour votre aide
 
Maxime


Message édité par Max50 le 03-02-2008 à 17:17:48
Reply

Marsh Posté le 03-02-2008 à 17:17:05   

Reply

Marsh Posté le 03-02-2008 à 20:32:48    

merci pour ces quelques remarques, pour la durée en effet, j'avais pas pensé a l'écrire entierement en minutes.
 
sinon je vais garder les principes des tables, j'ai creer une pages php par tables, voila le sous menu de médiatheque sur la page php :
 
Livres | Musiques | Films et Séries
 
apres chaque catégories comporteras un moteur de recherche dirigé directement sur la table concerné.
Mais je dois admettre que ton idée est bonne.
 
pour le moteur de recherche j'essais d'inserer celui expliqué chez lycos, mais pas facile.
 
sinon pour l'affichage du contenus de la BDD, je me sert du site du zero, mais ca me marque une erreur.
 
edit : si tu pouvais m'aider sur un autre point, le contenu de la base que je souhaite afficher, j'aimerais faire en sorte que ca n'affiche que les 10 dernieres entree. Mais la encore, je sais pas comment faire.
 
pas facile le php, dommage parce que tres interessant

Message cité 1 fois
Message édité par Max50 le 03-02-2008 à 20:36:25
Reply

Marsh Posté le 04-02-2008 à 12:14:39    

Max50 a écrit :

edit : si tu pouvais m'aider sur un autre point, le contenu de la base que je souhaite afficher, j'aimerais faire en sorte que ca n'affiche que les 10 dernieres entree. Mais la encore, je sais pas comment faire.
 
pas facile le php, dommage parce que tres interessant


C'est pas vraiment un problème PHP, regarde plutot du coté de LIMIT dans ta requete SQL ;)
 
On a souvent (à tord) tendance à faire des requetes basiques (genre "select *", et a faire un traitement PHP derrière, alors qu'en fait, les requetes SQL permette de faire la plupart des trucs directement (trier, filtrer, limiter le nombre de valeurs renvoyées...etc...)
Donc si tu envois la bonne requete, tu récupère exactement ce dont tu as besoin, pas de traitement PHP derrière en dehors de l'affichage ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 04-02-2008 à 13:26:33    

merci du conseil, deja j'ai fais en sorte que les entrée soit lisible de la derniere a la premiere, du moins je pense (par logique), apres j'ai demandé a mysql de me créer la requete sql :
 

Code :
  1. $sql = ''
  2.         . ' ALTER TABLE `livres`'
  3.         . ' ORDER BY `id` DESC';


 
par contre la il va tout m'afficher, peut importe le nombre d'entrée, je crois qu'il y a une histoire de code contenant LIMIT ... mais je ne sais plus comment l'ecrire exactement.
 
edit :
 
je crois que la bonne requete est celle ci, non ?
 

Code :
  1. SELECT *
  2. FROM `livres`
  3. ORDER BY `id` DESC
  4. LIMIT 0 , 15


Message édité par Max50 le 04-02-2008 à 13:29:17
Reply

Marsh Posté le 04-02-2008 à 13:53:54    

Vu que tu fait un "order by" dans ta requete de select, inutile de de faire une requete de modification (alter) de ta table (tu tries dans chaque requete de sélection, inutile que la table soit déjà triée par avance dans ce cas ;) )
 
Ensuite, ça fait un moment que j'ai pas joué avec le SQL, mais de mémoire ton utilisation de LIMIT me semble bonne (0 pour commencer au 1er résultat de la requete, 15 pour en récupérer que 15).
 
Donc oui, le order by desc et le limit, fait que ta requete va renvoyer les 15 derniers id de ta table (donc les 15 plus récents, si je pars du principe que ID est ta clé primaire, et qu'il s'agit d'un autoinc :) )
 
Bon courage pour la suite ;)
 
PS: ensuite, tant qu'on est dans les conseils, le "select *" est en général à éviter, il est préférable de spécifier les champs que tu veux, et de ne récupérer que ceux-là, à moins que dans ce cas particulier, tu ai besoin de tous les champs de la table, mais c'est rarement le cas.


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 04-02-2008 à 13:59:16    

ok merci, je vais deja faire ces quelques modifs
 
et l'ID est bien en primaire et autoinc
 
pour la base de donnée je pense l'avoir compris, pour le moment.
 
sinon LA grande question, quel script doit je mettre pour pouvoir inscrire de nouvelles données dans la table concerné ?
 
par exemple pour la table livre, il faudrais voir de quoi rentrér les données suivantes directement depuis la page php en se servant de zone de texte, un peu comme lorsque l'on s'incrit sur un forum et que la BDD enregistre le tout :
 
- Image
- Titre
- Auteur
- Résumé
- ISBN


Message édité par Max50 le 04-02-2008 à 14:50:24
Reply

Marsh Posté le 04-02-2008 à 16:17:41    

Toujoursd pareil, tout ce passe par une requete SQL, mais au lieu de SELECT (qui sert à sortir les données), ça va être une requete d'INSERT, donc regard de ce côté là ;)
 
@++

Reply

Marsh Posté le 04-02-2008 à 21:10:00    

j'ai reussi a faire le liens entre le formulaires de saisi et la BDD, et aussi l'affichage sur la page, presque tout marche bien, il me donne bien du plus recent u plus ancien dans une limite de 10.
 
me reste plus qu'a regler le probleme du non affichage de certain champ de la table

Reply

Marsh Posté le 05-02-2008 à 18:07:59    

bon j'ai reussie tout ce que je voulais.
 
maintenant j'aimerais créer un groupe de pages protéger par mot de passe et login.
 
Plus clairement, ce que je voudrais, c'est me créer une partie admin, contenant x pages qui ne dvront en aucun cas etre accessibles en tapant l'adresse exact.
 
Un peu dans le style de la protection de la partie admin des forums
 
j'ai chercher via google mais je ne trouve rien d'interessant
 
Si vous souhaitez voir un exemple, je l'ai adapter sur un de mes sites (http://www.themusicbox.fr/maddmixaccueil.php), c'est le systeme de commentaires


Message édité par Max50 le 05-02-2008 à 18:22:59
Reply

Marsh Posté le 06-02-2008 à 15:21:53    

Bien,
 
1/ Manière simple mais facilement contournable
Tu gère avec ta BDD une notion de connexion (avec user et password) et seuls les gens qui se sont autentifiés (et qui donc avait un user + password valides) ont les liens vers les pages que tu veux "protéger"
Le problème c'est que quiconque ayant l'URL des pages en questions, pourra s'y rendre sans s'identifier
 
2/ Une vraie partie "Admin", je conseille l'utilisation de .htaccess (fais des recherche sur le sujet, c'est interessant)
 
3/ Solution 1 améliorée
Lorsque l'identification a réussie (login +password), tu mémorise les infos de l'utilisateur dans une/des variables de sessions, et après, en testant si ces variables existent, et ce qu'elles contiennent, tu en déduis ce que tu peux afficher pour l'utilisateur en question.
Genre si les variables de session n'existent pas (donc le gars ne s'est pas authentifié), ou si elle t'indique que c'est un utilisateur qui n'a pas le droit de consulter cette page, tu fais un pti coup de "header:location" pour le renvoyer à l'accueil, ou sur une page lui disant "Ou va-tu vilain, tu ne devrais pas être là !!!".
 
Personnellement, pour l'accès en consultation à des données que tu ne veux pas laisser voir par tous, j'utilise la méthode 3 (avec en variable de session, le user, et une variable de ma table des clients genre "niveau_des_droits" ), mais pour une vraie partie Admin qui permet de toucher des choses en profondeur sur le site, genre carrément aller attaquer phpmyadmin vers la BDD du site, j'utilise htaccess/htpassword, car ça concerne en général très peu d'utilisateurs, et qu'ils ne sont pas amenés à changer tous les 4 matins.
 
Voilou, bon courage


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 06-02-2008 à 15:21:53   

Reply

Marsh Posté le 07-02-2008 à 12:17:38    

ok merci, je pensais justement faire la solution 3, mais je ne trouve(ais) rien sur intenet, a chaque fois je me retrouver sur soit une protection php, java, html, etc, mais rien de bien performant.
 
le htaccess je connais, j'ai voulus l'utiliser une fois, mais mon hebergeur a son propre systeme de protection et empeche d'utiliser son propre htaccess, mais il n'est pas efficace du tout, bugg tout le temps.
 
Bon merci encore, je vais refaire une recherche sur google, tu ma donné de nouveaux termes a utilisé ;)

Reply

Marsh Posté le 07-02-2008 à 14:14:36    

Oki, ben regarde en particulier les variables de session (ainsi que l'utilisation du session_start...etc...)
 
Après, le reste, ça revient à faire

Code :
  1. if (session n'existe pas OU user a pas les droits)
  2.     ... j'afiche pas, voire même je redirige là ou je veux ...
  3. else // ça veut dire que session existe ET user a les droits
  4.     ... j'affiche ...


 
attention pour la redirection, le "header:location" ne fonctionne pas si du texte a déjà été envoyé au navigateur... bien savoir où le placer (surtout dans le cas de l'utilisation de pseudo-frame)
 
Voilou, bonne chance pour la suite, et tu sais où me trouver si besoin ;)


Message édité par Xav_ le 07-02-2008 à 14:15:59

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 07-02-2008 à 16:44:40    

bon la chance n'est pas de mon coter, je me suis fait plein site pendant je en sais combien de temps, mais deja ce matin je commencais a regarder, la j'en ai al au crane :cry: .
 
Pourrais tu m'aider à ecrire les scripts STP ?
 
voila ce que je voudrais faire :
 
- créé table (BDD) (id [primaire et auto_inc], pseudo, passwd) (fait)
- Formulaire de connexion a la page admin.php (fait)
- création d'un cookie temporaire, afin de rester connecté (suppression du cookie à la deconnexion session/exploreur)
- formulaire de création du compte d'utilisateur (à faire mais aucun probleme a ce niveau)
 
Voila,
 
je vais encore chercher de mon coté mais pas facile de trouver, le seul site qui avais l'air interessant ne donne rien, il m'affiche tout mon code lors de l'ouverture de la page :sweat: ca va pas ca  :non:

Reply

Marsh Posté le 07-02-2008 à 17:49:33    

là je suis encore au taf, je vais pas finir avant 19h, donc je te garanti pas de regarder ce soir, surtout que du PHP, j'en ai pas fait depuis plus d'un an.
 
Je regarderai dès que j'aurais une minute, mes anciens scripts doivent trainner dans un coin de mon PC.
 
Mais en fait, si tu as déjà le formulaire de connexion, ben quand celle-ci est valide (donc dans la page ou tu traites les données du formulaire de connexion) donc si la connexion est "OK", tu fais un $_SESSION['user'] = $user
ensuite dans toutes tes pages, tu testes que $_SESSION['user'] existe (avec isset() par exemple) est contient le user que tu as renseigné au départ.
mais il faut que chacune de tes pages contiennent un session_start() au tout début de page par contre


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 07-02-2008 à 19:37:42    

ok merci, je vais deja essayer de voir ce que ca donne avec ce que tu ma dit.
 
mais surtout prend ton temps c'est pas urgent pour le moment c'est en local donc pas grand chose a craindre.

Reply

Marsh Posté le 12-02-2008 à 18:36:20    

Bonjour,
 
je viens de comprendre pourquoi je ne pouvais pas visualiser une image de la base de données, du moins je crois, cependant, bien que l'image soit bien detectée, elle n'apparait pas.
 
voila le bout de code pour faire apparaitre l'image :

Code :
  1. <img src='<?php echo $donnees['image']; ?>' height="100">


 
bien entendu la connexion a la BDD est bien effectué, il m'affiche bien le texte mais pas l'image.
 
besoin d'aide, .... encore, dsl ^^
 
Max

Reply

Marsh Posté le 13-02-2008 à 08:56:15    

Dans ta base, tu a stocké le fichier image (c'est faisable avec les données de type BLOB, mais pas vraiment recommandé), ou juste l'URL de l'image ?
 
D'après ton code d'affichage, j'ai tendance à pensé que tu n'a stocké que l'URL, mais je pose la question quand même ;)
 
Sinon, si tu print $donnees['image'] (sans les balises <img> ), l'URL correspond bien à celle de ton image ? le fichier image est-il bien présent à l'endroit attendu ? enfin les contrôles basics dans ce genre de comportement ;)
 

Reply

Marsh Posté le 13-02-2008 à 10:39:26    

Je stocke juste l'url je crois, mais j'aimerais faire en sorte que l'on puisse prendre une image sur son DD (via formulaire) et la mettre stocker pour la visuliser sur le site.
 
C'est surtout pour afficher soit la premiere de couverture d'un livre ou la jaquette d'un(e) cd/video.
 
Donc a la limite, pour des raisons de securité je pense, et si c'est possible, transmettre l'url de l'image a la BDD, et le fichier dans un dossier.
 
Est ce possible ?
 
ha oui pour ca
 

Citation :

Sinon, si tu print $donnees['image'] (sans les balises <img> ), l'URL correspond bien à celle de ton image ?


 
je pense que oui, puisque l'image est detecter, il ne me met pas de croix rouge dans le coin en haut à gauche mais il met le symbole comme quand une image est trouver et en cours de chargement (le petit carré avec plein de couleur dedans)


Message édité par Max50 le 13-02-2008 à 10:43:08
Reply

Marsh Posté le 13-02-2008 à 11:54:49    

Oki,
ben pour la 1ere partie, il te faut un formulaire d'upload des images (ya plein d'exemple tout fait sur le net, si tu trouve pas, je rechercherai dans mes code sources).
Une fois l'image uploadée, tu fini par un truc genre "move_uploaded_file" qui permet de déplacer le fichier du "cache d'UPLOAD", vers son emplacement définitif, avec son nom définitif (tout ça définit par tes soins, pour ranger au bon endroit, et gérer un nomage qui évite les doublons), ben c'est cette adresse là que tu dois renseigner dans ta BDD.
 
Pour la 2eme partie:
L'URL printée et que tu pense être bonne, si tu la copie et colle dans un nouvel onglet de ton navigateur, l'image s'affiche ?
 
Tu as pitete un soucis entre les chemin relatifs et absolus...
 
EDIT: voir les trucs en "gras" car à la relecture, je me rend compte que j'avais écris un peu trop vite et zappé des choses... :ange:


Message édité par Xav_ le 13-02-2008 à 14:05:15

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 13-02-2008 à 12:28:47    

ok merci je me renseigne sur google ;)
 
edit :
 
ok, donc je viens de verifier, donc en fait non, il n'y a pas d'url avec l'image, je pense que si il m'affiche l'emplacement de celle ci differement c'est tout betement parce que j'ai rajouter le code pour faire apparaitre celle ci. Donc pas d'url pour l'image.


Message édité par Max50 le 13-02-2008 à 12:39:35
Reply

Marsh Posté le 15-02-2008 à 12:48:24    

Slt,
 
bon j'ai besoin de ton avis, et peut etre de ton aide :
 
je souhaiterais créer un compteur de visite (nbr de fois que e site a ete ouvert en fonction de l'IP) basée sur un une BDD et du php.
 
1, les grandes lignes :
 
Donc voila, j'ai un code qui trouve l'IP de l'utilisateur, ensuite je vais créer un requete pour envoyer l'IP dans la BDD, puis retour dans mon pied de page, avec requete pour lire la BDD, et calcul qui donne le nombre de visite, pour finir par l'affichage avec un "echo".
 
2, la table :

Code :
  1. id int(11) autoinc, primaire
  2. ip char(15)


 
3 , les scripts :
 
Détection de l'IP et envois a la bdd

Code :
  1. <? php
  2. $ip = getenv("REMOTE_ADDR" );
  3. ?>
  4. <?php
  5. mysql_connect("localhost", "id", "pass" );
  6. mysql_select_db("bdd" );
  7. mysql_query("INSERT INTO ip VALUES('','$ip')" );
  8. mysql_close();
  9. ?>


 
Lecture de la BDD avec calcul (je cherche encore le code pour calculer)

Code :
  1. <?php
  2. mysql_connect("localhost", "id", "pass" );
  3. mysql_select_db("bdd" );
  4. $reponse = mysql_query("SELECT * FROM ip" );
  5. ////içi le code pour l'affichage
  6. }
  7. mysql_close();
  8. ?>


 
Affichage dans le pied de page

Code :
  1. Se site a été vu <?php echo $donnees['']; ?> fois.


 
donc si j'ai besoin de ton aide, c'est juste pour l'envoi de l'IP dans la BDD, j'aimerais qu'il y ai vérificatoin dans la BDD pour eviter les doubles.
 
j'ai deja chercher sur google et je continu en meme temps voila ce que j'ai mis en mots clé (empecher insertion identique dans une bdd en php)


Message édité par Max50 le 15-02-2008 à 13:24:40
Reply

Marsh Posté le 15-02-2008 à 14:40:44    

Re,
bon, en fait plusieurs petites choses:
 
1/ Réponses au problème actuel
- si c'est juste empêcher les doublons, t'a une méthode bourrin qui est de configurer ce champ dans ta table pour qu'il soit de type "unique" (je sais plus le terme exact, mais je sais que ça existe), si t'essaie d'insérer un doublon, my_sql va te bouler et la requête va échouer (plus crade on peut pas trouver, mais ça répond au besoin...).
- plus proprement, tu fais une requête de select WHERE ip = $ip, si la requete ne renvoie pas d'enregistrement (genre mysql_num_rows == 0), tu peux lancer ta requete d'insertion, sinon tu n'insert pas car l'ip est déjà présente dans la BDD.
- ce que tu appelle "le code pour calculer", ben soit tu selectionne le champs id de ta table, et tu fais un mysql_num_rows (depuis php cela va te dire combien d'enregistrement la requête à retourné), soit tu utilise "count" qui existe en SQL, et c'est directement mysql qui va te dire le nombre d'enregistrement de ta table, donc ce qu'il te faudra afficher, c'est le contenu retourné par celle-ci :D
 
2/ Propositions d'amélioration :)
- filtrer sur l'ip, c'est pas top, car toutes les personnes d'une même entreprise, auront la même ip et seront considérées comme 1 seule personne, il serait plus propre de faire une gestion par cookie (si le cookie est présent sur le PC, alors tu l'a déjà compté, sinon tu insert l'IP en BDD et tu crée le cookie pour pas le compter la prochaine fois
- tu ajoute un champs "nb_connex" de type entier dans ta table, comme ça quand quelqu'un se connecte, tu commence par faire ton SELECT (voir solution du 1/), si l'IP est présente, alors tu modifie ("update" au lieu de "insert" ) juste "nb_connex" en l'incrémentant de 1, sinon tu insert l'IP et tu met le nb de connexion à 1.
==> Celà te permet de compter plusieurs personne ayant une même IP comme plusieurs visiteurs, celà te permet également d'un coté "statistique" de pouvoir dire combien d'IP différentes se sont connectés (nb d'enregistrement de ta table), combien de personnes différentes se sont connectés (sommes des champs nb_connex" de ta table), et combien de personne par IP (le contenu de la table), ce qui peut être intéressant.
 
PS: un autre moyen simple (mais pas fiable) pour compter le nb d'enregistrement de la table en faisait un select sur id max, id étant incrémenté a chaque ajout dans la base, ça valeur correspond au nombre d'enregistrement (avec un offset de 1 si le 1er id est "0" ), mais si id n'a pas commencé à 0 ou 1, ou si pour une raison quelconque tu as supprimer des enregistrement, ben la valeur ne sera plus bonne :/


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 15-02-2008 à 16:10:41    

ok, merci pour vos reponse, je vais essayer de mettre ca en oeuvre.
 
la methode bourrin, ca serais de mettre en index par hasard. et il me semble que si il tombe sur une meme donnee ca te met un zolie message d'erreur  :pt1cable: ^^
 
je ne suis qu'un amateur qui apprends sur le tas apres tout ^^.
 
J'aime bien la methode cookie + BDD, mais je ne comprends pas grand chose la
 
edit :
 
voila ce que j'ai cru comprendre pour l'insertion sans doublon
 

Code :
  1. mysql_query("update INTO ip values ('','ip WHERE ip=$ip','nb_connex';" );


 
cependant la ou je bloque completement, c'est au niveau du cookie, je vois pas du tout comment faire pour voir si il est deja present ou non, et apres accepter ou refuser l'enregistrement dans la BDD
 
C'est juste comme ca mais si vous voulez voir le pourquoi du compteur voila mon site


Message édité par Max50 le 15-02-2008 à 17:33:05
Reply

Marsh Posté le 24-02-2008 à 18:15:04    

Bonjour,
 
voila quelque jour que je n'ai pas ecrit, je suis en train de creer une base + sa table afin de faire une ID avec niveau d'autorisation etc.
 
voila la table :
 

Code :
  1. -- phpMyAdmin SQL Dump
  2. -- version 2.10.1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Serveur: localhost
  6. -- Généré le : Dim 24 Février 2008 à 18:11
  7. -- Version du serveur: 5.0.41
  8. -- Version de PHP: 5.2.3
  9. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  10. --
  11. -- Base de données: `umbrella-corp_fr_1`
  12. --
  13. -- --------------------------------------------------------
  14. --
  15. -- Structure de la table `badge`
  16. --
  17. CREATE TABLE `badge` (
  18.   `id` int(11) NOT NULL auto_increment,
  19.   `photo` blob NOT NULL,
  20.   `nom` varchar(15) NOT NULL,
  21.   `prenom` varchar(15) NOT NULL,
  22.   `acces` varchar(1) NOT NULL,
  23.   `groupe` varchar(15) NOT NULL,
  24.   `codebarre` blob NOT NULL,
  25.   `user` varchar(15) NOT NULL,
  26.   `pass` varchar(15) NOT NULL,
  27.   `secukey` varchar(15) NOT NULL,
  28.   PRIMARY KEY  (`id`)
  29. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  30. --
  31. -- Contenu de la table `badge`
  32. --
  33. INSERT INTO `badge` (`id`, `photo`, `nom`, `prenom`, `acces`, `groupe`, `codebarre`, `user`, `pass`, `secukey`) VALUES
  34. (1, '', '', '', '', '', '', '', '', ''),
  35. (2, '', '', '', '', '', '', '', '', '');


 
Pourriez vous me dires quels sont les erreurs et idées diverses.

Reply

Marsh Posté le 28-02-2008 à 09:54:54    

Salut,
 
j'ai plusieurs questions:
- pourquoi 'photo' est de type blob ? si c'est l'url de l'image, un varchar serait mieu (blob c'est quand tu stocke le contenu de l'image dans la bdd)
- a quoi sert le champ 'codebarre' de type blob lui aussi ?
- a quoi sert le champ 'secukey' ?
 
Le 'pass' est sur 15 caractères, ça veut dire que tu le mémorise "tel quel" ? Il serait plus sécuritaire de stocker le md5(), mais dans ce cas, il te faux un varchar32.


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 28-02-2008 à 18:44:20    

Salut,
 
je me suis aider d'un site, mais apparement a tord.
 
Pass et secukey sont des champs de pass, pour le code barre c'est un champs image.
 
c'est plus complqué que ce que je pensais :sweat:
 
edit :
 
J'ai modifier la BDD pour les images, je stocke les url dans la BDD et le fichier dans un dossier. Je recommence aussi le traitement du formulaire a zero.
 
Je commence par le user, pass et secu
 
je viens de faire des recherche sur le hashage md5, je ne comprends pas grand chose,
 
j'ai mis ca, mais je pense que c'est insuffisant
 

Code :
  1. $cryptpass=md5($pass)
  2. $cryptsecu=md5($secu_key)


 
$pass et $secu_key, sont les données récupérer depuis le formulaire,
 
$cryptpass et $cryptsecu, sont les données que j'envois sur la base de donnée
 
ensuite j'ai mis ca
 

Code :
  1. $user=$_POST['user'];
  2. $passwd=$cryptpass;
  3. $secu=$cryptsecu;


 
puis envoi a la BDD

Code :
  1. mysql_query("insert into Ma_Table values ('id', '$user','$passwd','$secu');" ) or die;


 
et enfin deconnexion de la BDD
 
et quand je test il me met ca
 
Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\Test sript cryptage\traitement_cryptage.php on line 12
 
la ligne correspond au hashage de secu_key
 
je comprend pas, de l'aide serais bienvenu, je contnu de mon coté a cherche sur le net.


Message édité par Max50 le 28-02-2008 à 21:39:31
Reply

Marsh Posté le 29-02-2008 à 17:03:37    

Code :
  1. $cryptpass=md5($pass);
  2. $cryptsecu=md5($secu_key);

c'est quand même pas si simple ??? si ??? (le coup des ";" à la fin)
 
 
Sinon, oui la fonction s'utilise bien comme ça, rien de plus à faire.
Et tu as bien augmenter la taille des champs dans ta BDD ? car les md5 sont sur 32 caractères
 
1/ Si tu crypte le pass, pas besoin d'une variable "key" en plus à mon avis.
2/ Pas besoin d'utiliser une profusion de variables non plus:
- tu récup pass et key du formulaire
- ensuite tu les copies dans des nouvelles variables quand tu les hash
- ensuite tu copie les résultats de hachage dans des nouvelles variables encore
- ensuite tu insert ces dernières dans la BDD...
--> $_POST['pass'] -> $pass -> $cryptpass -> $passwd  :ouch: ya pitète moyen d'etre un peu moins consommateur ;)
3/ L'intéret des id en auto_inc, c'est de laisser la BDD s'en débrouiller toute seule, donc tu ne lui envoi pas de valeur (c'est plus simple)
 
un truc du genre

Code :
  1. mysql_query("insert into Ma_Table values ('', '$_POST[user]','md5($_POST[pass])');" ) or die;


 
bonne continuation, tu va y arriver  ;)  
 
 
 


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 29-02-2008 à 18:41:55    

houla oui les point virgule, lol, dsl, j'avais pas fait gaffe
 
merci de l'aide, a la prochaine,surement, :D


Message édité par Max50 le 29-02-2008 à 18:42:12
Reply

Marsh Posté le 09-03-2008 à 15:34:26    

Bonjour,
 
ca y est je crac, pourrais tu m'aider en me disant comment faire pour d'un coté uploader une image dans un dossier du serveur, et de l'autre stocker l'url de l'image dans la bdd.
 
pour le formulaire pas de probleme, mais c'est pour la page de traitement.
 
J'ai passé ces dernier jours a chercher mon bonheur en vain, je craque. Pour l'affichage et la lecture des données pas de probleme ;)
 
Merci d'avance.
 
Max
 
edit : j'avais vu un site interessant phpdebutant, mais apparement il ne marche pas.
 
edit 2 : lorsque j'insert les données directement depuis la base, pas de probleme, mais c'est lorsque je passe par un formulaire, ca bloque
 
edit 3 :
 
j'ai reussi a trouver un script pour faire ce que je voulais mais il ne marche pas et je suis perdu pour ce qui est de le configurer
 

Code :
  1. <?php
  2. //appel du fichier de connexion à la base de données
  3. mysql_connect("localhost", "root", "" );
  4.         mysql_select_db("re1_game" );
  5.  
  6. //récupérations des valeurs saisies dans le formulaire
  7. $id=$_post['id'];
  8. $img=$_POST['img'];
  9. $bio=$_POST['bio'];
  10. //affichage du contenu des variables
  11. echo "Les données ont bien été transmisses.";
  12. //insertion dans la base de données
  13. $reqinsert="insert into persos_alpha values ('id', '$img','$bio');";
  14. mysql_query($reqinsert) or die("La requête ne fonctionne pas. La table n'a pas été mise à jour. <br />".mysql_error());
  15. if(isset($_FILES['photo']))
  16. {
  17. $dest_dossier = 're1/images/alpha/';  // utilisez également des slashes sous windows : $dest_dossier  = 'd:/damien/photos/';
  18. $dest_fichier = basename($_FILES['photo']['name']);
  19. move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);}
  20. // récupère la partie de la chaine à partir du dernier .
  21. // Ex : .png
  22. $extension = strrchr($_FILES['photo']['name'], '.');
  23. // récupère la partie après le .
  24. //Ex : png
  25. $extension = substr($extension, 1);
  26. // récupère la taille du fichier
  27. $taille = filesize($_FILES['photo']['tmp_name']);
  28. // enlever les accents
  29. $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  30. // remplacer les caracteres autres que lettres, chiffres et point par _
  31. $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
  32. // fermeture de la connexion
  33. mysql_close();
  34. ?>
  35. <a href="modif_persos_re1.php">Retour</a>


 
pourrais tu m'aider stp, merci


Message édité par Max50 le 09-03-2008 à 19:03:50
Reply

Marsh Posté le 12-03-2008 à 15:37:45    

Re,
désolé, ça fait un petit moment que j'étais pas passé dans le coin...
 
- pour le "configurer", à part adapter le "$dest_dossier" à celui qui va bien sur ton serveur, je pense pas qu'il y ait grand chose d'autre à faire.
 
- Par contre, le "move_uploaded_file" à la ligne 22, alors que que c'est en ligne 32 et 34 que sont retiré les caractères "problématiques"...
En général, vaux mieux mettre en forme le nom AVANT la copie, paske après c'est un peu tard je pense...
 
- Ensuite, moi j'ai tendance à faire un "if" sur le "move_uploaded_file", histoire de récupérer s'il a fonctionné ou non (et de pouvoir afficher un message en conséquence".
 
- Ensuite, c'est tout à la fin (après mise en fome et copie réussi) que je mettrai la BDD à jour, avec le chemin et nom complet de l'image étant:
--> $Chemin_jusqu_a_ton_script.$dest_dossier.$dest_fichier
 
- Pis aussi, la récupération de l'extension en faisant une simple recherche de ".", c'est pas top, vaut mieux que tu fasses des tests sur $_FILE['type']
 
Voilà, pour les conseils, j'espère que ça va t'aider à avancer ;)
 


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 14-03-2008 à 13:52:24    

pas de probleme pour l'attente, c'est pas non plus la securite de l'etat mdr.
 
merci pour ton aide, je vais voir ca.
 
donc pour resumer, et savoir si j'ai bien compris,
 
- je met la chaine de caractere avant le "move_uploaded_file". avec un if pour confirmer que ca a marcher.
 
et enfin j'envois d'un coter
 
- l'image dans le dossier cible
 
- puis les données du formulaire dans la BDD
 
sinon pour les tests sur fichier, pour des raison de secu je suppose, j'essairais de trouver comment l'ameliorer apres, une fois que le reste fonctionneras.
 
encore merci
 
 
nb
 
edit : voir message suivant :d


Message édité par Max50 le 17-03-2008 à 12:07:38
Reply

Marsh Posté le 17-03-2008 à 12:13:28    

salut,
 
bon j'ai réussis a faire envoyer l'image dans un dossier et le lien dans la base.
 
elle s'affiche sans probleme, mais le texte inserer dans la table ne veux pas a l'exeption de l'id.
 
je t'envois les differentes info
 
 
 
 
 
la table :
 

Code :
  1. -- phpMyAdmin SQL Dump
  2. -- version 2.10.1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Serveur: localhost
  6. -- Généré le : Lun 17 Mars 2008 à 12:14
  7. -- Version du serveur: 5.0.41
  8. -- Version de PHP: 5.2.3
  9. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  10. --
  11. -- Base de données: `re_game`
  12. --
  13. -- --------------------------------------------------------
  14. --
  15. -- Structure de la table `persos_alpha_re1`
  16. --
  17. CREATE TABLE `persos_alpha_re1` (
  18.   `id` int(11) NOT NULL auto_increment,
  19.   `resume` varchar(2000) NOT NULL,
  20.   `img` text NOT NULL,
  21.   `name` varchar(20) NOT NULL,
  22.   `firstname` varchar(20) NOT NULL,
  23.   PRIMARY KEY  (`id`)
  24. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Fiche d''identité persos RE1' AUTO_INCREMENT=2 ;
  25. --
  26. -- Contenu de la table `persos_alpha_re1`
  27. --
  28. INSERT INTO `persos_alpha_re1` (`id`, `resume`, `img`, `name`, `firstname`) VALUES
  29. (1, '', '1205751955.', '', '');


 
 
 
 
formulaire :
 

Code :
  1. ...
  2. <br />
  3.     <fieldset class="fieldset_form_game"><legend><a name="equipe_alpha"><span style="color:red; font-size:20; text-decoration:underline; text-align:center;">Equipe Alpha</span></a></legend>
  4.      <form name="modifs_persos_re1" action="traitement_perso_alpha_re1.php" method="post" enctype="multipart/form-data">
  5.       <table width="800" border="0" style="text-align:right;">
  6.        <tr><td width="350">
  7.         <textarea rows="30" cols="50" name="bio" value="bio"></textarea>
  8.        <td width="100" style="text-align:center;">
  9.        </td><td width="350" style="text-align:left;">
  10.         <input type="text" name="nom" value="nom">
  11.          <br />
  12.         <input type="text" name="prenom" value="prenom">
  13.          <br />
  14.         <input type="file" name="image" value="img">
  15.          <br />
  16.         <input type="submit" value="Envoyer">
  17.        </td></tr>
  18.       </table>
  19.      </form>
  20.     </fieldset>
  21.      <br />
  22. ...


 
 
 
 
traitement :
 
 

Code :
  1. <?php
  2. //Récupération de l'image et déplacement vers dossier
  3. if (isset($_FILES['image']['size']))
  4.         {
  5.                 //On déplace l'avatar
  6.                 $image = time();
  7.                 $nomimage = str_replace(' ','',$image).".".$extension_upload;
  8.                 $image = "../re1/images/alpha/".str_replace(' ','',$image).".".$extension_upload;
  9.                 move_uploaded_file($_FILES['image']['tmp_name'],$image);
  10.         }
  11. //Vérification de l'avatar :
  12. if (!empty($_FILES['image']['size']))
  13. {
  14.         //On définit les variables :
  15.         $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' ); //Liste des extensions valides
  16.        
  17.         if ($_FILES['image']['error'] > 0)
  18.         {
  19.                 $image_erreur = "Erreur lors du tranfsert de l'image : ";
  20.         }
  21.         if ($_FILES['image']['size'] > $maxsize)
  22.         {
  23.                 $i++;
  24.                 $image_erreur1 = "Le fichier est trop gros : (<strong>".$_FILES['image']['size']." Octets</strong>    contre <strong>".$maxsize." Octets</strong> )";
  25.         }
  26.         $extension_upload = strtolower(substr(  strrchr($_FILES['avatar']['name'], '.')  ,1));
  27.         if (!in_array($extension_upload,$extensions_valides) )
  28.         {
  29.                 $i++;
  30.                 $image_erreur3 = "Extension de l'avatar incorrecte";
  31.         }
  32. }
  33. //appel du fichier de connexion à la base de données
  34. include '../includes/connexiondb_jeux.php';
  35. // Récupération des données
  36. $bio=$_post['bio'];
  37. $img=$nomimage;
  38. $name=$_post['nom'];
  39. $firstname=$_['prenom'];
  40. // Envois des données vers la BBD
  41. mysql_query("insert into persos_alpha_re1 values('','$bio','$img','$name','$firstname');" ) or die;
  42. mysql_close();
  43. ?>


 
 
 
affichage dans la page php
 

Code :
  1. <?php
  2. include '../includes/connexiondb_jeux.php';
  3. $reponse = mysql_query("SELECT * FROM persos_alpha_re1" ); // Requête SQL
  4. // On fait une boucle pour lister tout ce que contient la table :
  5. while ($donnees = mysql_fetch_array($reponse) )
  6. {
  7. ?>
  8. <p>
  9. <table width="900" border="0" style="text-align:justify;" >
  10. <tr><td>
  11.  <img src="../re1/images/alpha/<?php echo $donnees['img']; ?>" width="300" alt="<?php echo $donnees['name']; ?> <?php echo $donnees['firstname']; ?>" /></td>
  12. <td>
  13.  Nom :<?php echo $donnees['name']; ?>
  14.   <br />
  15.  Prénom : <?php echo $donnees['firstname']; ?>
  16.   <br />
  17.  Numéro d'enregistrement : <?php echo $donnees['id']; ?>
  18.   <br />
  19.  <blockquote>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $donnees['resume']; ?></blockquote>
  20. </td>
  21. </table>
  22. </p>
  23. <?php
  24. }
  25. mysql_close(); // Déconnexion de MySQL
  26. ?>

Message cité 1 fois
Message édité par Max50 le 17-03-2008 à 12:17:49
Reply

Marsh Posté le 17-03-2008 à 14:12:44    

J'ai pitète pas été très clair alors je ré-explique quelques points:
1/ ce qu'il faut comprendre, c'est que move_uploaded_file, c'est ça qui "copie le fichier temporaire vers le nom et l'emplacement définitif"
 
Une fois cette ligne passée, tout contrôle sur $_FILE('peu importe'] n'a plus aucun intérêt puisque le fichier a déjà été "enregistré" avec le nom et l'emplacement fourni dans le move_uploaded_file
Donc c'est AVANT ça qu'il faut que tu fasse ton contrôle de l'extension et tout le toutim...
 
2/ quand je dis faire un if sur move_uploaded_file, ça veut pas dire "l'inclure dans un if qui fait divers trucs", mais vraiment "faire un if sur cette instruction"

Code :
  1. if(move_uploaded_file($origine, $destination))
  2. {
  3.     // -->  upload réussi, donc on continue (ajout du record en BDD...etc...)
  4. }
  5. else
  6. {
  7.     $msg = "l'upload n'a pas fonctionné"; // pas la peine d'aller plus loin dans le traitement de l'enregistrement
  8. }


 
3/ fait un print (echo) de ta requête(donc la ligne du mysql_query) avant de l'envoyer, car je pense que tu as plusieurs problèmes dans la construction des champs:
- tu concatène avec "$extension_upload" alors que je ne vois pas où est renseignée cette variable
- tu récup le contenu du formulaire avec $_post['toto'] alors qu'il faut $_POST['toto'] (ce qui n'est pas pareil)
 
Enfin voilà, j'aimerais bien voir un peu le contenu de la requête pour voir si elle est bien formée AVANT d'être envoyée à mysql
(d'ailleurs en général, on construit la requête dans un champs genre $req, et après on fait un mysql_query($req); c'est plus simple pour retoucher la construction ;))


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 17-03-2008 à 16:45:13    

c'est bon, merci a toi, mais apres n relecture du code j'ai trouvé pourquoi le texte ne s'affichais pas, et en effet je viens de lire ce que tu ma mis, et c'est bien a cause de "POST" que j'avais ecris "post".
 
au moment de l'ecrire je n'avais pas fait attention, je n'ai pas encore les reflexes d'un pro ou au moins d'un habitué.
 
sinon pour le "move_uploaded_file" il marche tres bien ;)
 
pour ce qui est des requetes je t'ai tout mis au dessus, seule la mise en page general n'y est pas. Pour le code qui transmet l'image vers un dossier je l'ai recuperer sur un tutos internet, je l'ai juste modifier pour ne pas avoir la contrainte de taille et poids d'image, moi seul pouvant les mettres ca ne posais pas de probleme a ce niveau. Je vais verifier que je n'ai pas fait de mauvaise manip et supprimer quelque chose qu'il ne faut pas.
 
merci a toi
 
surement a une prochaine fois :d,
 
Max

Reply

Marsh Posté le 17-03-2008 à 17:06:32    

c'est farpait alors si tout marche.
 
Si repasse dans le coin, rajoute juste [RÉSOLU] au début du titre de ton topic (si tu sais pas, ça se fait, éditant le tout premier message), et sera tout bon.
 
Bon courage pour la suite ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 18-03-2008 à 15:48:24    

bon je crois qu'il y a un leger bugg, en local ca marche mais pas en ligne.
 
voila l'adresse http://www.umbrella-corp.org/re1/persos.php
 
en local les images s'affichent sans probleme, mais en ligne parfois ca marche d'autres non.
 
tu pourrais me dire si ca te fais pareil ? merci
j'ai wamp qui est sur mon pc, est ce que ca pourrais venir interferer ?


Message édité par Max50 le 18-03-2008 à 15:50:21
Reply

Marsh Posté le 18-03-2008 à 16:27:17    

Alors,
moi j'ai bien les images qui s'affichent (testé seulement avec FF) par contre en affichant le source, je vois que tes chemins sont:
src="images/alpha/1205829610."
 
donc 2 soucis:
- ya pas d'extension, et ça c'est pas top (soit il est pas sauvegardé en base, donc pb à l'enregistrement, soit ya un problème dans ton script d'affichage)
- il est préférable de fournir ./ au début du chemin quand c'est à partir de l'emplacement courant (en UNIX c'est très important, il y a fort à parier que ton hébergeur utilise UNIX), donc écrire tes adresses de la forme:
src="./images/alpha/mon_fichier_image.extension"
 
Voilà, je pense que si tu corrige ces 2 points, ça devrait le faire ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 18-03-2008 à 16:31:20    

ok, je vais de suite modifier le lien et je vais essayer de trouver pourquoi il n'y a pas d'extension.
 
bon deja le bon coté c'est que les images s'affichent, donc pour les visiteurs c'est mieux :)
 
merci, je vois ca et je te redis ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed