Ses derniers messages sur les forums
Quel est le message d'erreur fournit pas mysql_error ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Tu peux mettre en ligne un flux généré pour qu'on puisse l'analyser ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Ce n'est pas la solution, c'est un contournement temporaire pour que ça fonctionne. Laisser des fichiers en 0777 est une extrêmement mauvaise idée. Essaye de restreindre un minimum les droits sur le fichier.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Je vais compléter en précisant que PHPMyAdmin permet de facilement fournir un accès à n'importe quelle base MySQL.
Cependant, fournir trop de renseignement sur l'échec de connexion sur une interface publique est considéré comme une mauvaise pratique de sécurité. Il ne faut pas dire si le nom d'utilisateur ou le mot de passe est mauvais, il faut dire que l'authentification est mauvaise, au pire.
Dans le cas d'une erreur de connexion (serveur indisponible, erreur étrange), il faut uniquement dire que le serveur est en maintenance.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
(jeca) Tu as lu ça où ? Parce que sur le manuel de MySQL, ce n'est pas vraiment ce qui est marqué :
documentation
Notez aussi que la valeur de retour de la fonction SQL LAST_INSERT_ID() contient toujours la valeur d'AUTO_INCREMENT la plus à jour. Cette valeur n'est pas remise à zéro lors de l'exécution d'autre requêtes car elle est maintenue pour le serveur.
Ceci dit, si l'autoincrément est considéré par connexion, ça ne change pas grand chose si tu utilises le module PHP pour Apache. Le socket « risque » d'être le même, et donc la connexion MySQL commune entre les appels de différents clients HTTP. Ce qui nous ramène au problème initial de risque de collision et d'inconsistance.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
(darkus) Si tu as le même problème, tu pourras certainement nous expliquer ce que nanard avait comme problème ^^;
Bon, trêve de plaisanterie : créé un nouveau sujet dans le forum, histoire que tu expliques ce que tu souhaites, ce que tu essaye et ce que tu obtiens. À partir de là, on pourra peut-être t'aider.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
(Rolland) Il n'y a aucune garantie. En fait, cette fonction te fourni le dernier id inséré, et ce sans considéré une quelconque « race condition ». Sur un site où les accès sont très concurrents, tu risques te rendre la base de données très inconsistante.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
(La Globule) Je suis d'accord avec ton approche, et je l'ai aussi déjà employée. D'ailleurs, c'est ce que j'ai pour l'instant retenu dans mon logiciel de blog. Le problème, c'est que je suis paranoïaque, et que donc je vais de toute façon me diriger vers un système de template (mais en XSL par contre).
Ce qui m'embête dans ton exemple, c'est que $membre->name peut contenir du code non-échappé (au sens HTML). Alors qu'en employant un moteur de template, on peut faire en sorte que l'ensemble des données liées du modèle à la vue seront contrôlées et remie d'équerre. Alors qu'en accédant directement au modèle, il faut plus de rigueur en amont.
Finalement, c'est une question de confiance et d'approche.
(Il faut préciser que mon exemple n'a rien à voir avec Smarty, c'est uniquement une proposition d'exemple pour montrer la logique qu'il y a avec ce genre d'approche)
Quand à la consommation de CPU... ça dépend de ce qu'on veut privilégier. Mais une chose est certaine : la sécurité a un coût.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Ça dépend de ce que tu entends par code. Smarty part du principe que le PHP c'est trop compliqué pour les WebDesigner, qu'il y a trop d'implication liées à la sécurité pour un béotions d'utiliser PHP, car PHP a bien évolué depuis qu'il n'était qu'un langage de template (car s'en est un, mais il est parti dans tout les sens et requiert aujourd'hui une réelle expertise).
Bref, dans les templates Smarty, tu n'as qu'un ensemble (volontairement) très limité de structures logiques, l'essentiel étant l'usage de clés. Ce template sera chargé comme un fichier à parser, et ne sera pas interprété par PHP, lorsque le moteur de parsing de Smarty trouve des structures qu'il comprend, il les interprète et génère une sortie (généralement HTML). Pour ce faire, il se réfère à un objet registre qui contient les variables disponibles pour l'affichage.
Le but ultime de Smarty, c'est véritablement de découpler le modèle (les données traitées par l'application) de la vue (le HTMl par exemple).
On pourrait imaginer un moteur de template qui pourrait s'utiliser ainsi (exemple non-fonctionnel) :
<?php
$membres = array() ;
$nembres[] = (object) array('id' => 1, 'name' => 'Lupus', 'login' => (object) array('date' => '2008 11 06 07 00')) ;
$nembres[] = (object) array('id' => 2, 'name' => 'carpoga', 'login' => (object) array('date' => '2008 11 05 22 35')) ;
$tpl =<<<EOT
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<title>%wiz:titre;</title>
</head>
<body>
<div id='body'>
<wiz:if test="membres.length > 0">
<table>
<thead>
<tr><td>Membre</td><td>dernière connexion</td></tr>
</thead>
<tbody>
<wiz:for collection='membres' in='membre'>
<tr id='membre-%wiz:membre.id;'>
<td>%wiz:membre.name;</td>
<td>%wiz:membre.login.date;</td></tr>
</wiz:for>
</tbody>
</table>
</wiz:if>
<wiz:if test="membres.length = 0">
<p>Il n'y a pas de membres qui se sont connectés.</p>
</wiz:if>
</div>
<div id='debug'>
<wiz:if test="connected">
<p>La connection s'est bien effectuée.</p>
</wiz:if>
</div>
</body>
</html>
EOT;
// on créé le parseur à partir d'une fonction membre statique
$view = wiz::from_string($tpl) ;
// le moteur de template repère ce qu'il comprend (balises <wiz: > et entités %wiz: ;)
$view->parse() ;
$view->bind_string('title', 'La liste des membres connectés.') ;
$view->bind_array('membres', $membres) ;
$view->bind_callback('connected', 'mysql_ping') ;
/* appel de la méthode magique $wiz->__tostring. La méthode va effectuer le lien entre les données liées et les « variables » présentent dans le fichier template, et générer le code HTML correspondant.
*/
echo $view ;
Finalement, mon exemple de template ressemble plus à de l'XSL que du Smarty, mais l'idée est là.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Étant donné que les fonction mysql_ vont disparaître à moyen terme, il est conseillé de se mettre à un système qui abstrait un minimum l'accès aux données.
Et quel est ton problème avec PDO ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.