2009-12-18 5 views
0

J'ai un fichier php qui contient un formulaire HTML, puis une logique PHP, puis un pied de page HTML ... dans cet ordre.Intégration PHP et HTML

Je suis en train d'obtenir les valeurs de la forme dans une logique de validation de php dans le botton de la page (mais avant le pied de page) en utilisant <?php VALIDATION LOGIC HERE ?>.

le problème est lorsque la validation trouve une erreur, la logique php va mourir() et par conséquent, mon pied de page HTML ne sera pas exécuté.

Y at-il un moyen d'exécuter mon pied de page HTML malgré mon php die() ;? ... ou y a-t-il une meilleure façon globale d'intégrer mon HTML et PHP? Merci! Toute aide serait très appréciée.


EDIT: J'ai fait mourir() presque partout dans mon code où je suis sur le point de se connecter à une base de données. Si les informations d'identification de l'utilisateur sont correctes, elles se connectent .. si les informations d'identification sont erronées, elles mourront() ..

Est-ce une bonne pratique et une utilisation de die()? il semble que la solution à mon problème est d'utiliser return() INSTEAD OF die() ... afin de continuer à traiter le pied de page HTML.

En outre, j'ai des situations telles que mysql_connect() ou die(). Comment puis-je continuer à traiter la page HTML restante lorsque die() est exécuté avant le traitement du code HTML? ..je ne pense pas mysql_connect() ou retour; est une bonne pratique, n'est-ce pas?

Merci encore à l'avance! Les commentaires ont été très utiles!

+0

S'il vous plaît fournir le code ainsi que votre question – Gordon

+0

Pourquoi votre sortie de validation du script? Vous pouvez laisser la validation simplement afficher un message d'erreur HTML et le laisser fonctionner. De cette façon, le pied de page passe bien. – Boldewyn

Répondre

2

Comme d'autres états, vous devriez avoir plusieurs fichiers; header.php, index.php, footer.php, formvalidator.php. Dans votre fichier index.php, vous devez inclure header.php et footer.php. Dans la balise de formulaire, l'action consiste à charger formvalidator.php

Dans le script sous forme de validateur, vous pourriez avoir quelque chose comme ceci:

// All form fields are identified by '[id]_[name]', where 'id' is the 
    // identifier of the form type. 
    // The field identifier we want to return is just the name and not the id. 
    public function getFormData() { 
    $formData = array(); 
    foreach ($_POST as $key => $value) 
    { 
     // Remove [id]_ 
     $name = preg_replace('!.*_!', '', $key); 

     if (is_array($value)) { 
     $formData[$name] = implode(',', $value); 
     } else { 
     $formData[$name] = $value; 
     } 
    } 
    return $formData; 
    } 

Maintenant, vous pouvez boucle à travers le réseau et valider chaque champ. Si vous trouvez une erreur, renvoyez un message d'erreur, sinon, traitez le formulaire.

Mise à jour
Répondez à votre mise à jour.

Vous ne devriez jamais utiliser die(). Au lieu de cela, quittez la fonction dans laquelle vous vous trouvez et renvoyez un message d'erreur. Si vous mourez simplement(), vous ne savez jamais ce qui s'est mal passé où.

Il n'est pas possible de valider le serveur d'un formulaire sauf si vous cliquez sur le bouton Envoyer. Vous pouvez mettre le code que je vous ai donné dans le même fichier PHP que la forme, et lorsque vous soumettez, vous suffit de recharger la même page (juste mettre action="<?= $_SERVER['PHP_SELF'] ?>")

Si vous souhaitez valider les champs soumettre avant, vous devez à cela en utilisant javascript, comme par exemple jQuery.validate. Hmm ... il semble que vous ayez besoin de plus de connaissances sur la façon de mélanger PHP avec du code HTML. Jetez un oeil à ce beginners guide sur la façon de travailler avec des formulaires en PHP.

2

Je voudrais utiliser un fichier externe pour le traitement et la validation du formulaire, puis rediriger vers la page de formulaire sur erreur/succès, affichant un message d'erreur/succès.

+0

court et concis – Gordon

0

Il existe plusieurs façons de faire ce que vous faites. mais pour répondre à votre première question, vous pouvez créer une fonction appelée footer qui renvoie une chaîne avec html nécessaire pour être affichée dans le pied de page et appeler le die (footer()); mais ... pourquoi utilisez-vous mourir? ne pouvez-vous pas simplement compter les erreurs et les afficher quelque part dans le résultat? vous ne devriez pas tuer le script de cette façon.

Et pour la deuxième question. vous pouvez utiliser comme BenTheDesigner dit, une page html avec l'action de formulaire pointant vers un script PHP qui valide et retourne au formulaire si quelque chose s'est mal passé ou aller ailleurs si ce n'est pas le cas. mais là aussi, vous devriez supprimer la fonction die() et appeler autre chose pour vous rediriger. vous pouvez utiliser un système de template comme smarty pour séparer votre logique de votre présentation html. vous pouvez tout écrire dans un seul fichier, mais essayez d'écrire votre logique entière en haut du fichier et tout le code HTML en bas. et utilisez <? = $ var? > pour afficher des trucs php, ou des conditions simples pour différents résultats html. mais n'utilisez pas die(). ça complique les choses, je suppose.

1

Je viens de faire un header.php et un fichier footer.php. S'il y a une erreur, revenez juste au lieu de mourir.

De cette façon, en haut de votre page, vous pouvez simplement mettre:

<?php include('header.php');?> 

///put in whatever html there may be 


<?php 
/// put your form and processing info here 
///just return if you need to prevent further processing 
?> 

///put in whatever html there may be 
<?php include('footer.php');?> 
0

L'utilisation de die() n'est pas une bonne pratique car elle n'affichera pas de message convivial à l'utilisateur visitant votre site. Vous devriez être absolument sûr de vouloir utiliser die. Par exemple, vous pouvez l'utiliser dans les procédures lorsque vous pensez qu'il y a une tentative de piratage. Au lieu de cela, essayez d'utiliser if else structure pour montrer ou cacher des choses. Voici le prototype possible que vous pouvez mettre en œuvre:

// if there is a validation error, show it, otherwise not 
    if ($error == true) 
    { 
    // show footer 
    } 

    <!-- Your footer goes normally here -->