Aller au contenu

mathieu147

Webmaster Régulier
  • Compteur de contenus

    64
  • Inscrit(e) le

  • Dernière visite

Tout ce qui a été posté par mathieu147

  1. Ah oui, c'est vrai que la syntaxe de ce que je dois remplacer est finalement assez simple... Mais je me demandais quand-même s'il existait en PHP des équivalents des fonctions jQuery qui, il faut le dire, sont plutôt bien foutues.
  2. Normalement ça doit être le cas, mais je n'en suis pas certain. C'est du code qui sort de tinyMCE. Je ne l'ai pas encore surpirs à sortir du code invalide, mais il est vrai que je n'ai pas utilisé de fonctions très avancées de l'éditeur. C'est un mutualisé OVH, je ne sais pas si c'est installé, ça m'étonnerait... L'interface de mise à jour de mon site repose sur tinyMCE (éditeur WYSIWYG en Javascript), et je voudrais que la personne qui met à jour son site puisse inclure dans sa page des "blocs spéciaux", comme des galeries d'images, ou autre. Le problème est que faire un plugin tinyMCE qui inclut des galeries d'images peut être très compliqué, surtout si la galerie est changée par la suite. Donc j'ai fait un plugin tinyMCE qui insère des images (ça c'est facile) dont la classe est "gallery" et le alt est l'id de la galerie d'image. Ensuite à l'affichage, je voudrais remplacer la balise image par le bon contenu. En fait en résumé c'est pour pouvoir gérer facilement (avec une seule balise) dans tinyMCE des trucs plus complexes. Ben oui voilà... J'ai fait ça en Javascript pour pouvoir avancer un peu dans le reste de mon site qui avait besoin que ça soit fait, mais je me disais bien que c'était une solution de secours.
  3. mathieu147

    Parser du HTML en PHP

    Bonjour, J'ai dans la base de données de mon site une table avec mes pages. Elles ont un ID et (entre autres) un contenu HTML. Lorsque je génère une page, j'inclus ce morceau de HTML en même temps que l'entête, le menu, le pied de page, etc. Tout à fait classique. Mais, dans ce code HTML, j'ai certaines balises que je dois remplacer par d'autres. Pour l'instant, je fais ça en Javascript: j'ai un script jQuery qui récupère la balise à remplacer, et qui récupère (via xmlhttprequest) ce qu'il faut mettre à la place. Ça fonctionne très bien, mais je voudrais me passer de ce Javascript, j'aimerais faire tout ça directement en PHP. Voici le fonctionnement un peu plus détaillé: J'ai des balises IMG avec une certaine classe, je dois les récupérer toutes. Pour chaque balise IMG ainsi récupérée: récupérer l'attribut alt; Puis aller chercher avec une fonction ce qu'il faut mettre à la place, en fonction du alt; Enlever la balise IMG et la remplacer par ce qu'il faut. Super facile en javascript si le script replace.php me dit par quoi remplacer ma balise dont l'attribut est alt: $(document).ready(function() { $("img.replace").each(function() { var alt = $(this).attr("alt"); loadReplace($(this), alt); }); }); function loadReplace(el, alt) { var xhr = getXhr(); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) { replace = xhr.responseText; displayReplace(el, replace); } }; xhr.open("GET", replace.php + "&alt=" + alt, true); xhr.send(null); } function displayReplace(el, replace) { el.after(replace); el.remove(); } Existe-t-il en PHP des fonctions équivalentes qui permettent, à partir d'une chaîne de caractères représentant un fragment de HTML, de faire ce genre d'opérations? Merci d'avance!
  4. Bonsoir, Merci pour vos réponses. Effectivement, lorsque je dis que j'ai un client qui rédige ses pages en HTML, il ne s'agit que de la zone de texte de page, il n'a pas accès au menu généré automatiquement, ni à l'entête, au pied de page, et à la disposition générale. Par contre, si, il utilise des <div class="trucmachin"> et pas des balises <font> toutes nazes, il est très à cheval sur la présentation et veut un site vraiment le plus nickel possible. Mais je sais que c'est un peu une exception et que la plupart des gens voudront une interface un peu plus «user-friendly», je voulais savoir ce que vous utilisiez.
  5. Bonjour, Lorsque je crée un site vient toujours la question de la mise à jour. En effet, le propriétaire du site veut toujours pouvoir modifier lui-même le texte et la mise en page des pages de son site. Je ne sais jamais trop bien quelle solution utiliser, parce que chacune a des inconvénients. Sur un des sites que j'ai faits, le client voulait bien écrire toutes ses pages directement en HTML, parce que ça ne le dérangeait pas d'apprendre et qu'il voulait garder une grande souplesse en mise en page. Mais tout le monde n'est pas capable de comprendre le HTML. J'ai donc déjà utilisé aussi WikiRenderer (http://wikirenderer.berlios.de/) parce qu'il a une syntaxe super simple. Mais justement, la syntaxe est parfois trop simple et on n'a donc pas la souplesse du HTML. Et puis ça fait quand-même un langage à apprendre, et tout le monde ne veut/peut pas faire cet apprentissage (manque de temps, de capacité ou simplement ça les gonfle). La troisième solution est un éditeur WYSIWYG comme TimyMCE par exemple. Là c'est super parce que c'est assez simple à utiliser, mais déjà les images c'est pas toujours simple, mais surtout, ce n'est pas vraiment WYSIWYG, c'est plutôt WYSIPOMAPDCPUEDCQCPED (What You See Is Plus Ou Moins À Peu De Choses Près Un Exemple De Ce Que Ça Pourrait Éventuellement Donner) notamment à cause des feuilles de style qui peuvent changer des choses, ou de la largeur de la page qui n'est pas la même sur le site ou dans l'éditeur. Quand vous avez un client qui ne connaît pas le HTML (ce qui arrive souvent ) et qui veut mettre à jour ses pages lui-même (ce qui arrive souvent aussi), quelle solution utilisez-vous? Merci!
  6. Ouais, effectivement ça m'a l'air d'être ça. Je vais regarder, merci
  7. Bonjour, Je dois modifier le site web d'une entreprise dont une des activités est l'acheminement de personnes entre leur domicile et un aéroport. La fonctionnalité demandée par le client est la suivante: un visiteur doit pouvoir entrer l'adresse de son domicile, et choisir l'aéroport de destination afin d'avoir de connaître le prix du trajet. Je mets donc un champ où le visiteur peut mettre son adresse, et trois boutons pour choisir un des trois aéroports déservis par la compagnie. Il faudrait ensuite une fonction qui calcule la longueur (en kilomètres, en temps aussi si possible) du trajet à effectuer. Les explications que je trouve sur internet à ce sujet permettent d'afficher des cartes, des trajets, des marqueurs et plein de choses, mais moi je voudrais uniquement récupérer une valeur numérique sans nécessairement passer par l'affichage d'une carte (puisqu'à priori le visiteur s'en fout de voir une carte pour savoir où il habite). Pouvez-vous m'aider? Un grand merci d'avance!
  8. Bonne question Mais ça ne résoudrait pas mon problème, si??
  9. Bonjour, J'ai écrit un site de vente de livres en PHP, et j'utilise les sessions pour le login de mes utilisateurs: ils ont un panneau avec les ventes en cours (pour les modifier/supprimer etc.) accessible à eux seuls. Dans chaque page qui doit être réservée aux utilisateurs enregistrés, je vérifie si la variable de session 'pseudo' est initialisée: session_start(); if (!isset($_SESSION['pseudo'])) { header('Location: login.php5'); exit(); } Si ce n'est pas le cas, redirection vers le formulaire de login. Après login, je vérifie si le pseudo/mot de passe existe dans la BDD. Si c'est le cas, j'initialise la variable 'pseudo' et l'utilisateur est loggué, sinon, redirection vers une page qui dit que le mot de passe est mauvais: function verification($login, $pass) { //Vérification dans la BDD [...] } session_start(); if (isset($_POST['pseudo']) && isset($_POST['motdepasse'])) { $pseudo = $_POST['pseudo']; $motdepasse = $_POST['motdepasse']; if (verification($pseudo, $motdepasse)) { //On change d'identifiant de session session_regenerate_id(); //On sauvegarde le pseudo dans l'identifiant de session $_SESSION['pseudo'] = $pseudo; $page = "index.php5"; } else { $page = "authfail.php5"; } } [...] echo "<meta http-equiv=\"refresh\" content=\"0; url=$page\">"; [...] Ça fonctionne bien chez moi et chez la plupart de mes utilisateurs (différents OS et navigateurs), mais chez certain, il y a un problème: ils ne peuvent pas accéder aux pages privées: leur mot de passe est demandé à chaque fois, même quand il est bon. Quand il est faux, la page "mauvais mot de passe" est bien affichée. Qu'est-ce qui peut bien poser problème?? Pourquoi est-ce que ça fonctionne chez certains et pas chez d'autres? Il me semble que les sessions, c'est côté serveur, donc si ça marche pour un, ça devrait marcher pour tous, non? Un grand merci d'avance!
  10. Bonjour, et merci pour ta réponse! Mais, par hasard, tu ne connaîtrais pas un moyen de faire disparaître ça?
  11. Bonjour, Le site que je programme peut être visible ici. Pas de problème avec Firefox, mais avec IE j'ai différentes choses qui ne vont pas avec le menu, mais ce qui m'embête le plus, c'est la chose suivante: avec IE6, les éléments du menu se décalent à gauche ou à droite d'un pixel ou deux, et ne reviennent pas toujours en place, c'est assez étrange. Qu'est-ce qui se passe? Merci d'avance
  12. Et bien si je fais ça, ça me fait exactement la même erreur. Dans un sens, c'est logique: je n'ai pas d'index sur code_media dans ma table Media, et pourtant ma clé étrangère vers Media(code_media) est correcte dans ma table Exemplaire. Par contre, si je crée mes clés étrangères de cette façon: CREATE TABLE Emprunt( code_personne INT NOT NULL REFERENCES Membre(code_personne), code_film INT NOT NULL REFERENCES Film(code_film), code_exemplaire INT NOT NULL REFERENCES Exemplaire(code_exemplaire), date_emprunt DATE NOT NULL, date_restitution DATE, INDEX(code_personne, code_film, code_exemplaire), PRIMARY KEY(code_personne, code_film, code_exemplaire, date_emprunt) ) TYPE=InnoDB; ça marche! Mais je ne comprends pas pourquoi ça ne fonctionne pas de la première manière...
  13. mathieu147

    InnoDB et foreign keys

    Bonjour, Je tente de créer les tables de ma base de données avec le script SQL suivant: CREATE TABLE Personne( code_personne INT NOT NULL PRIMARY KEY, nom VARCHAR(50) NOT NULL, prenom VARCHAR(50) NOT NULL ) TYPE=InnoDB; CREATE TABLE Membre( code_personne INT NOT NULL PRIMARY KEY, adresse VARCHAR(100) NOT NULL, date_inscription DATE NOT NULL, INDEX(code_personne), FOREIGN KEY(code_personne) REFERENCES Personne(code_personne) ) TYPE=InnoDB; CREATE TABLE Film( code_film INT NOT NULL PRIMARY KEY, titre VARCHAR(50) NOT NULL, annee SMALLINT(6) NOT NULL, genre VARCHAR(25) NOT NULL, evaluation TINYINT(4) NOT NULL, code_personne INT NOT NULL, INDEX(code_personne), FOREIGN KEY(code_personne) REFERENCES Personne(code_personne) ) TYPE=InnoDB; CREATE TABLE Joue_dans( code_personne INT NOT NULL, code_film INT NOT NULL, PRIMARY KEY(code_personne, code_film), INDEX(code_personne, code_film), FOREIGN KEY(code_personne) REFERENCES Personne(code_personne), FOREIGN KEY(code_film) REFERENCES Film(code_film) ) TYPE=InnoDB; CREATE TABLE Media( code_media INT NOT NULL PRIMARY KEY, type VARCHAR(5) NOT NULL ) TYPE=InnoDB; CREATE TABLE Localisation( code_localisation INT NOT NULL PRIMARY KEY, description VARCHAR(50) NOT NULL ) TYPE=InnoDB; CREATE TABLE Exemplaire( code_film INT NOT NULL, code_exemplaire INT NOT NULL, code_media INT NOT NULL, code_localisation INT NOT NULL, PRIMARY KEY(code_film, code_exemplaire), INDEX(code_film, code_media, code_localisation), FOREIGN KEY(code_film) REFERENCES Film(code_film), FOREIGN KEY(code_media) REFERENCES Media(code_media), FOREIGN KEY(code_localisation) REFERENCES Localisation(code_localisation) ) TYPE=InnoDB; CREATE TABLE Emprunt( code_personne INT NOT NULL, code_film INT NOT NULL, code_exemplaire INT NOT NULL, date_emprunt DATE NOT NULL, date_restitution DATE, PRIMARY KEY(code_personne, code_film, code_exemplaire, date_emprunt), INDEX(code_personne, code_film, code_exemplaire), FOREIGN KEY(code_personne) REFERENCES Membre(code_personne), FOREIGN KEY(code_film) REFERENCES Film(code_film), FOREIGN KEY(code_exemplaire) REFERENCES Exemplaire(code_exemplaire) ) TYPE=InnoDB; Toutes les tables se créent correctement sauf la dernière (Emprunt). J'ai l'erreur suivante: C'est la dernière clé étrangère (code_exemplaire) qui pose problème, parce que si je retire les lignes FOREIGN KEY(code_exemplaire) REFERENCES Exemplaire(code_exemplaire) ça ne me met plus d'erreur (mais évidemment, j'ai perdu ma contrainte aussi, ce qui est ennuyeux ). Ça fait des heures que je cherche et que j'épluche la documentation de mySQL et les forums, mais je ne trouve pas. Merci d'avance de m'aider
  14. J'ai trouvé SELECT DISTINCT code_film, code_exemplaire FROM Exemplaire LEFT JOIN Emprunt USING (code_film, code_exemplaire) WHERE date_restitution!="0000-00-00" OR date_restitution IS NULL
  15. Bonjour, Dans le cadre d'une application de gestion de vidéothèque, j'ai une table Emprunt et une table Exemplaire: CREATE TABLE `Emprunt` ( `code_personne` int(11) NOT NULL, `code_film` int(11) NOT NULL, `code_exemplaire` int(11) NOT NULL, `date_emprunt` date NOT NULL, `date_restitution` date NOT NULL, PRIMARY KEY (`code_personne`,`code_film`,`code_exemplaire`,`date_emprunt`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Contenu de la table `Emprunt` -- INSERT INTO `Emprunt` (`code_personne`, `code_film`, `code_exemplaire`, `date_emprunt`, `date_restitution`) VALUES (1, 1, 1, '2007-04-20', '2007-04-21'), (1, 2, 1, '2007-04-21', '2007-04-23'), (2, 1, 1, '2007-04-21', '2007-04-22'), (3, 3, 1, '2007-04-22', '2007-04-25'), (4, 4, 1, '2007-04-23', '0000-00-00'), (5, 4, 3, '2007-04-24', '0000-00-00'); -- -------------------------------------------------------- -- -- Structure de la table `Exemplaire` -- CREATE TABLE `Exemplaire` ( `code_exemplaire` int(11) NOT NULL auto_increment, `code_film` int(11) NOT NULL, `code_media` int(11) NOT NULL, `code_localisation` int(11) NOT NULL, PRIMARY KEY (`code_exemplaire`,`code_film`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5; -- -- Contenu de la table `Exemplaire` -- INSERT INTO `Exemplaire` (`code_exemplaire`, `code_film`, `code_media`, `code_localisation`) VALUES (1, 1, 1, 1), (1, 2, 2, 2), (2, 1, 2, 3), (2, 2, 3, 4), (3, 1, 1, 1), (4, 1, 1, 2), (4, 2, 2, 3), (4, 3, 3, 4); J'aimerais déterminer le code_film et le code_exemplaire des exemplaires qui ne sont actuellement pas en location. Un exemplaire est en location si, dans la table Emprunt, il y a une ligne dont le code_exemplaire ET le code_film correspondent, et que la date de restitution est "0000-00-00"). J'ai pensé que je pourrais faire SELECT code_exemplaire, code_film FROM Exemplaire pour avoir les code_film et code_exemplaire de tous les exemplaires, puis SELECT code_exemplaire, code_film FROM Emprunt WHERE date_restitution!="0000-00-00" puis de faire la différence des deux, donc ceci; SELECT code_exemplaire, code_film FROM Exemplaire DIFF SELECT code_exemplaire, code_film FROM Emprunt WHERE date_restitution!="0000-00-00" sauf que j'ai une error in my SQL syntax... Apparemment on ne peut pas utiliser DIFF en MySQL? Comment puis-je faire? Merci d'avance!
  16. Et moi je n'en vois pas?! C'est un problème à approfondir, ça...
  17. Aaaaah, Dan, tu mériterais un bisou si t'étais une jolie blonde Merci beaucoup!
  18. Bonjour J'aimerais protéger par mot de passe certaines pages de mon site. Donc j'ai fait un système d'authentification qui met "ok" dans un cookie quand on est identifié (c'est un gros zéro point de vue sécurité, mais je changerai après, chaque chose en son temps ), et je n'ai donc qu'a vérifier le cookie à chaque page protégée. Voici comment je fais: <?php //On lit ce qu'il y a dans le cookie «passe» $isok = $_COOKIE["passe"]; //S'il n'est pas écrit «ok» c'est qu'on n'est pas loggué if ($isok!="ok") { echo "<p>Cette page est accessible uniquement par les membres. Merci de vous <a href=\"login.php\">authentifier</a></p>"; } else { ?> <p>Contenu protégé</p> <?php } ?> Ca fonctionne bien. Si je ne suis pas loggué, j'ai un lien vers la page de login, et si je le suis, je vois Jusque là, tout va bien... Seulement, je me dis bien que point de vue maintenance, c'est vraiment pas terrible. Je veux donc utiliser require() pour simplifier les choses. Je crée donc un fichier _protect.php qui contient: <?php $isok = $_COOKIE["passe"]; if ($isok!="ok") { echo "<p>Cette page est accessible uniquement par les membres. Merci de vous <a href=\"login.php\">authentifier</a></p>"; } else { ?> et mon fichier pageprotegee.php devient <?php require ('_protect.php'); ?> <p>Contenu protégé</p>; <?php } ?> Sauf que ça ne va pas... Si je ne mets pas <?php } ?> à la fin, il me dit qu'il y a un $ en trop à la dernière ligne de _protect.php. Si je le mets, il me dit qu'il y a une accolade fermée de trop dans pageprotegee.php... J'avoue ne pas trop comprendre. Il doit y avoir une subtilité de require() que je n'ai pas saisie. Un grand merci pour vos éclaircissements
  19. Moi je ne vois pas de petit carré avant <?php :-/ Enfin, merci quand-même :-)
  20. Maintenant ça marche... Je ne sais pas comment ça se fait, j'ai fait un nouveau fichier, j'ai copier/collé petit à petit pour voir à partir de quand ça commençait à foirer, et puis je suis arrivé au bout et ça a fonctionné. La vérité est ailleurs, moi je vous le dis... En tout cas, merci de votre soutient! :-D
  21. Voilà, j'ai carrément changé, pour que ce soit plus clair... En fait j'ai refait pareil, mais en deux pages. Sur la première, un bête formulaire en html: <form action="auth.php" method="post"> <p>Login:</p><br /> <input type="text" name="login"> <p>Mot de passe:</p><br /> <input type="password" name="pass"> <br /> <input type="Submit" value="Ok"> </form> et la deuxième page (auth.php) contient ceci: <?php //Récupération du login et de mot de passe entrés $login = $_POST['login']; $pass = $_POST['pass']; //Connection à la base de données $mysql_id = mysql_connect('hote', 'login', 'mot_de_passe'); mysql_select_db('base', $mysql_id); //Construction de la requète: On va chercher le mot de passe correspondant au membre dont on a le login. $requete = "SELECT mdp FROM membres WHERE login='" . $login . "'"; //Soumission de la requète à la base, et stockage du résultat dans la variable $result $result = mysql_query($requete,$mysql_id); //Mise en forme du résultat par PHP. La variable $membre contiendra le mot de passe de l'enregistrement trouvé. $membre = mysql_fetch_object($result); //La variable $bonmotdepasse contient le mot de passe venant de la base. $bonmotdepasse = $membre->mdp; //Vidage de la variable pour désencombrer la mémoire mysql_free_result($result); //Comparaison des mots de passe if($bonmotdepasse==$motdepasseentre) { setcookie("passe","ok"); Header("Location: ".$_SERVER["PHP_SELF"]); } elseif($bonmotdepasse!=$motdepasseentre) { setcookie("passe"); Header("Location: ".$_SERVER["PHP_SELF"]); } ?> Tout ce code php est AVANT tout le reste, avant même le doctype. J'ai toujours ce aux lignes avec setcookie() et Header(). Encore merci
  22. Rebonjour, Merci pour vos réponses! Malheureusement, j'ai enlevé tous les echo, tous les affichages de texte, et ça remet exactement la même erreur :/
  23. Bonjour , J'ai un problème de cookies. Je voudrais demander une authentification sur une page. Les login/mot de passe sont contenus dans une base mySQL: base : base table : membres champs de la table : login et mdp. Seulement, j'ai une erreur: et je ne vois pas du tout d'où elle vient... Voici le code: <?php //Réception des infos entrées dans le forumaire $motdepasseentre = @$_POST["pass"]; $login = @$_POST["login"]; echo $motdepasseentre; echo "<br />"; echo $login; //Connection $mysql_id = mysql_connect('hote', 'login', 'motdepasse'); mysql_select_db('base', $mysql_id); //Recherche du mot de passe correspondant au login entré //Construction de la requète $requete = "SELECT mdp FROM membres WHERE login='" . $login . "'"; echo "<br /> Requete : "; echo $requete; //Soumission de la requète à la base, et stockage du résultat dans la variable $result $result = mysql_query($requete,$mysql_id); //Mise en forme du résultat par PHP. La variable $membre contiendra le mot de passe de l'enregistrement trouvé. $membre = mysql_fetch_object($result); //Vidage de la variable pour désencombrer la mémoire mysql_free_result($result); //On vient d'aller chercher le mot de passe correspondant au login, il faut le comparer à celui entré dans le formulaire. $bonmotdepasse = $membre->mdp; echo "<br /> Mot de passe de la base de données : "; echo $bonmotdepasse; echo "<br /> Mot de passe entré dans le formulaire : "; echo $motdepasseentre; //Si les mots de passe correspondent, on met "ok" dans le cookie if($bonmotdepasse==$motdepasseentre) { echo "<br /> Les mots de passe correspondent"; setcookie("passe","ok"); //LIGNE 50 Header("Location: ".$_SERVER["PHP_SELF"]); //LIGNE 51 } //Sinon, on laisse le cookie vide elseif($bonmotdepasse!=$motdepasseentre) { echo "<br /> Les mots de passe ne correspondent pas"; setcookie("passe",""); //LIGNE 57 Header("Location: ".$_SERVER["PHP_SELF"]); //LIGNE 58 } //On lit le cookie $isOK = (@$_COOKIE["passe"]!=""); //S'il n'est pas vide, on affiche le menu if($isOK) { ?> <center> <A href="?pass=no">Déconnecter</A> - <A href="page1.php">Page 1</A> - <A href="page2.php">Page 2</A> - <A href="page3.php">Page 3</A> </center><hr> <?php } //S'il est vide, on affiche le formulaire else { ?> <form method="post"> <table><tr> <td><input type="password" name="pass"></td> <td><input type="text" name="login"></td> <td><input type="Submit" value="Entrer"></td> </tr></table> </form> <?php } ?> Merci beaucoup d'avance! PS1: je suis débutant, je ne connais pas grand chose PS2: Si je mets le bon mot de passe, l'erreur se trouve sur les lignes 50 et 51.
  24. Merci à vous deux, c'est à peu près ce que je cherchais ;-)
  25. Bonjour, On trouve un peu partout sur le web que Internet Explorer perd des parts de marché alors que Firefox en gagne. Mais je cherche autre chose comme statistiques. Ce serait la répartition de l'utilisation des navigateurs en fonction du type de sites. Exemple: Sites de design web: 75% FF , 15% IE , 10% pour les autres Sites de jeux vidéo : 2%FF , 97% IE , 1% pour les autres etc... Est-ce que vous savez où je pourrais trouver ça? Merci beaucoup d'avance!
×
×
  • Créer...