2016-09-15 1 views
1

J'utilise un fichier php externe dans le champ "action" de mon formulaire HTML pour que les actions mentionnées dans le fichier php soient effectuées en cliquant sur le bouton Soumettre.PHP isset ('submit') retourne toujours FALSE

Pour cela, j'ai utilisé la fonction isset() dans le fichier php.

Cependant, je trouve que la fonction isset renvoie toujours FALSE, ce qui entraîne l'exécution de l'instruction else (comme dans le journal de la console).

Si je supprime la fonction isset() (et donc les instructions if-else), le code fonctionne à merveille.

Pouvez-vous s'il vous plaît vérifier le problème dans mon code?

J'ai aussi vu dans d'autres postes que je dois utiliser un autre argument avec isset(), par exemple,

if(isset($_POST['submit']) && !empty($_POST["xyz"])) 

est du tout nécessaire?

P.S .: Je suis encore dans la phase initiale du développement de la page et par conséquent je vous demande d'ignorer les problèmes de sécurité de mon code, dont je reconnais l'existence. :)

Mes sous-codes:

Mon formulaire HTML:

<form id="info-form" method="POST" action="form-submit.php"> 
    <label for="Name">What is your Name? </label> 
    <input required type="text" name="name" placeholder="Enter your full name here." /> 

    <label for="Email">What is your email ID? </label> 
    <input required type="email" name="email" placeholder="[email protected]" /> 

    <label for="mobile">What is your 10-Digit Mobile Number? </label> 
    <input required type="text" name="mobile" maxlength="10" /> 

    <button name="submit-form" type="submit" class="btn btn-lg btn-success"><i class="fa fa-paper-plane" aria-hidden="true"></i> 
   Submit 
    </button> 
    <button type="reset" class="btn btn-lg btn-warning"><i class="fa fa-undo" aria-hidden="true"></i> 
     Reset 
    </button> 
</form> 

Mon fichier form-submit.php:

<?php 
    if(isset($_POST['submit-form'])) 
    { 
     require("database-connect.php"); 

     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $mobile = $_POST['mobile']; 

     $sql = "INSERT INTO tbl_details ". 
       "(name,email_id,mobile_number) ". 
       "VALUES ". 
       "('$name','$email','$mobile')"; 

     mysql_select_db('db_info'); 
     $return = mysql_query($sql, $connect); 

     if(! $return) 
     { 
      die('Could not enter data: ' . mysql_error()); 
     } 

     echo "Entered data successfully\n"; 
     mysql_close($connect); 
    } 

    else 
    { 
     echo "Not Set\n"; 
    } 
?> 
+4

'submit'! =' Submit-form' (le nom de votre bouton de soumission). Donc vous voulez utiliser 'isset ($ _ POST ['submit'-form'])' dans votre instruction. – Qirel

+0

Voir http://stackoverflow.com/q/4559925/476 – deceze

+0

De plus, une note sur les normes de sécurité et de programmation: les fonctions 'mysql_ *' sont obsolètes depuis PHP 5.5 (et ** entièrement supprimées ** dans PHP 7) et vous devriez [cesser de les utiliser] (http://stackoverflow.com/q/12859942) si vous le pouvez. Vous devez choisir une autre API qui vous permet d'utiliser des instructions préparées (que vous * devriez vraiment * lorsque vous manipulez des entrées utilisateur), comme 'mysqli_ *' ou PDO - voir [choisir une API] (http://php.net /manual/en/mysqlinfo.api.choosing.php). Fondamentalement, vous êtes grand ouvert à l'injection SQL - avoir une lecture à [Comment puis-je empêcher l'injection SQL en PHP?] (Http://stackoverflow.com/q/60174/) – Qirel

Répondre

4

Vous ne devriez vraiment pas vérifier l'existence d'une valeur de bouton de soumission pour commencer. Comme vous le voyez, de légères modifications esthétiques du frontend, comme le type de bouton utilisé pour envoyer un formulaire, ne devraient pas avoir de répercussions sur le backend. Le bouton de soumission et sa valeur ne sont pas pertinents pour le traitement d'un formulaire.

Qu'est-ce que vous voulez vraiment vérifier sur le serveur est soit si la demande était une requête POST, ou si les valeurs que vous souhaitez travailler sont fixés, ou les deux:

if ($_SERVER['REQUEST_METHOD'] == 'POST') … 
if (isset($_POST['name'], $_POST['email'], $_POST['mobile'])) … 

La chose la plus raisonnable serait:

if ($_SERVER['REQUEST_METHOD'] != 'POST') { 
    header('HTTP/1.0 405 Method Not Allowed'); 
    exit; 
} 

ou:

if ($_SERVER['REQUEST_METHOD'] != 'POST') { 
    header('Location: myform.html'); 
    exit; 
} 

Une fois que vous avez affirmé que vous êtes traiter avec la bonne méthode HTTP, traiter vos données:

$data = filter_input_array(INPUT_POST, [ 
    'name' => FILTER_DEFAULT, 
    'email' => FILTER_VALIDATE_EMAIL, 
    'mobile' => FILTER_DEFAULT 
]); 

Comme vous le voyez, vous ne même pas besoin d'interagir avec $_POST directement du tout. Voir http://php.net/filter_input_array.

+0

Merci @deceze. Je ne vous remercierai jamais assez. Vous avez non seulement répondu à ma question, mais vous avez également fourni une meilleure façon de faire les choses, ce qui est essentiel pour un débutant comme moi. Vous m'avez enseigné une leçon importante - "quelques légers changements esthétiques au frontend ... ne devraient pas avoir de répercussions sur le backend". Merci beaucoup. Btw, si ce n'est pas clair pour d'autres débutants comme moi, la solution fournie dans cette réponse a fonctionné! À votre santé. – ABor

+1

Astuce: En savoir plus sur le protocole HTTP et entrer dans l'état d'esprit de la * gestion des requêtes HTTP * sur votre serveur. Prenez l'habitude de tester votre serveur en émettant des requêtes HTTP brutes en utilisant curl (ou tout autre outil que vous préférez). Obtenez que votre serveur se comporte comme un point de terminaison HTTP approprié. Cela rendra vos applications beaucoup plus saines que de penser en termes de boutons et de formulaires HTML. – deceze

+0

Merci pour le conseil. :) – ABor

0

Modifier votre bouton tag comme ça. J'espère que cela vous aidera!

<input name="submit-form" value="Submit" type="submit" class="btn btn-lg btn-success"> 

Merci!

+1

Pourquoi devrait-il changer le '

+0

Le seul but d'un bouton d'envoi est d'envoyer les données du formulaire HTML au script côté serveur spécifié dans l'attribut ACTION du formulaire. –

+1

Oui ... alors pourquoi devrait-il être un ''? '

0

Vous devez utiliser un élément input au lieu d'un bouton.

<button name="submit-form" type="submit" class="btn btn-lg btn-success"> 
<i class="fa fa-paper-plane" aria-hidden="true"></i>Submit 
</button> 

devrait être remplacée par une entrée comme ceci:

<input name="submit-form" value="ButtonText" type="submit" class="btn btn-lg btn-success" /> 

La valeur d'une entrée est le texte qu'il affiche à l'utilisateur.

Aussi, dans votre question vous mentionner isset('submit') et isset($_POST['submit']), tandis que d'autres ont raison et ce n'est pas un nom existant dans votre code HTML, votre code PHP ne contient la isset($_POST['submit-form']) correcte. Il provoque un peu de confusion pour certains « rapide » lecteurs ...


En ce qui concerne le !empty($_POST["xyz"])) supplémentaire, pour votre but (vérifier si le formulaire est un postback) qui ne sera pas nécessaire.

+1

'

+0

@RocketHazmat Je ne savais pas que ... merci – x13

+0

Aussi, la 'valeur' d'un' ' est * à la fois * le texte affiché et la valeur soumise. '