2010-08-24 6 views
0

Voici l'idée: l'utilisateur clique sur une page où il peut créer un "article" sur cette page, il peut télécharger des fichiers et avant le formulaire de soumission (fourni par Flash pour les utilisateurs de Flash/Javascript supporté et propulsé par un pur PHP + 5 fichiers + iFrame pour les utilisateurs sans Flash/Javascript) Il doit rester sur la même page

Lorsque l'utilisateur clique sur une page, j'utilise cet extrait pour créer une identification longue et unique :
$random_id = hash('SHA512', (time() * microtime()) . mt_rand(1, 1000) . mt_rand(1, 1000) . uniqid((time() * microtime()))); Cette variable est stockée en session.Parce que je dois la recréer chaque fois que l'utilisateur clique sur cette page (car il peut annuler l'ajout de l'article cette fois-ci et décider de l'ajouter quelques minutes plus tard). entrée en frontend (pour laisser forme Flash/HTML envoyer cette variable avec $_POST tableau)

Lorsque l'utilisateur télécharge un fichier avec Flash/Javascript ou quand il télécharge un fichier en utilisant PHP/iframe Je validation des fichiers, renommer & les déplacer dans un répertoire temporaire temporaire nom ($randon_id).

Lorsque le formulaire est soumis j'utilise $random_id pour trouver les fichiers téléchargés et ajouter l'ID de l'élément correct à la table des fichiers.

Maintenant, je suis confronté à un gros problème. Bien sûr, j'utilise la validation frontend (mais c'est une sorte de "jouet", seulement pour augmenter la convivialité) donc j'ai besoin de valider la forme par PHP. Parfois, l'utilisateur fournit des données incorrectes (format incorrect, etc.). Lorsque l'utilisateur clique sur le bouton Soumettre, la page est rechargée. Et maintenant je viens avec mon problème:

Lorsque la page est rechargée $random_id change comme il est actualisé. Donc, entrée cachée sous forme HTML (encore une fois, il est utilisé par le formulaire Flash et le formulaire HTML). Comment éviter cela?

Pour clarifier: Non, je ne veux pas bloquer mon site pour les utilisateurs sans Flash/Javascript. L'accessibilité est une clé pour moi, ce site doit fonctionner pour tout le monde (avec et sans Javascript/Flash, etc.).

PS. J'utilise le framework KohanaPHP.

Cordialement,
Top

Répondre

1

Si je vous comprends bien, juste ne pas définir une nouvelle valeur d'identification unique dans la session si l'on est déjà réglé. c'est à dire vérifier si elle existe déjà pour la session et l'utiliser si c'est le cas. Ensuite, chaque chargement de page par l'utilisateur aura le même ID jusqu'à expiration/fin de la session.

+0

J'ai pensé à cette solution. Mais que se passe-t-il si l'utilisateur décide de ne pas soumettre le formulaire, renvoie une autre page et revient à la page "Ajouter un article"? La variable de session existera. – Tom

+0

Définissez la valeur de l'ID unique uniquement lorsqu'ils ont frappé la page Ajouter un élément. Donc, s'ils partent, puis retournent à la page, ils obtiennent un nouvel identifiant. OU, réutilisez le même identifiant unique, mais supprimez simplement les informations saisies précédemment que vous avez stockées lors de la visite de la page Ajouter un élément. Si vous stockez des éléments dans une base de données, cette dernière peut être meilleure car vous pouvez effacer toutes les données partiellement téléchargées plus facilement. – GrandmasterB