2014-05-25 6 views
0

en ce moment ma forme des liens vers une nouvelle page avec tout mon code PHP sur elle. Je voudrais que tout le code soit exécuté sur la même page que dans ce tutoriel: http://www.w3schools.com/php/php_form_url_email.aspHTML FORM + PHP: formulaire d'action pour rester sur la même page que le login

J'ai quelques difficultés à comprendre exactement comment ce tutoriel le gère. Je pensais peut-être qu'il serait possible de stocker mon code add.php dans une fonction, puis l'appeler avec une action de formulaire. Est-ce possible? Sinon, quelle serait la meilleure façon d'y parvenir?

ici est ma forme de code:

<form action="add.php" method="post"> 

    <p> 
      Username: <input type="text" name="Username"><br> 
      Email: <input type="text" name="Email"><br> 
      Password: <input type="password" name="Password"><br> 
      Confirm Password: <input type="password" name="ConfirmPass"> 
    </p> 

    <p> 
      <input type="submit"> 
    </p> 

</form> 

et voici ma page add.php:

<?php 

$Username = $_POST['Username']; 
$Password = $_POST['Password']; 
$Email = $_POST['Email']; 
$ConfirmPass = $_POST['ConfirmPass']; 
$safeUsername = SQLite3::escapeString($Username); 
$safePassword = SQLite3::escapeString($Password); 
$safeEmail = SQLite3::escapeString($Email); 
$safeConfirmPass = SQLite3::escapeString($ConfirmPass); 
$hostName = explode('@', $Email); 


$database = new PDO('sqlite:maindb.db'); 

$sql = "SELECT * FROM users WHERE Username = ?"; 
$result = $database->prepare($sql); 
$result->bindParam(1, $safeUsername); 
$result->execute(); 



    if($result->fetch()) { 
      echo "Username " . $safeUsername . " already exists"; 
    } 
    else { 
       if (filter_var($safeEmail, FILTER_VALIDATE_EMAIL) && checkdnsrr($hostName[1]) && !empty($safeEmail)) { 
        if (preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$safeEmail)) { 
         if (!empty($safeUsername) && (preg_match("/^[a-zA-Z ]*$/",$safeUsername)) && !empty($safeUsername)) { 

          if ($safePassword == $safeConfirmPass && !empty($safePassword)) { 
           echo $Username . " was successfully added to the database."; 
           $stm = "INSERT INTO users(Username, Password, Email) VALUES(?,?,?)"; 
           $stmt = $database->prepare($stm); 
           $stmt->bindParam(1, $safeUsername); 
           $stmt->bindParam(2, $safePassword); 
           $stmt->bindParam(3, $safeEmail); 
           $stmt->execute(); 

           $database = null; 
          } 
          else {echo "Passwords do not match"; } 

         } 
         else {echo "Invalid Username.";} 
        } 
        else {echo "Invalid e-mail address.";} 
       } 
       else {echo "Invalid e-mail address.";} 
     } 



?> 

Merci pour l'aide! Je vous en suis reconnaissant.

+1

s'il vous plaît arrêter d'utiliser w3schools.com, il a dangereusement mauvais conseiller –

+0

http://www.w3fools.com – Terry

Répondre

0

Dans le didacticiel lié ils utilisent

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    //your stuff here 
    //save your form values etc. 
} 

pour vérifier s'il y a eu un poste à votre page (cela peut être une page de même la même page). Fondamentalement, cela vérifiera si une demande POST a été envoyée à cette page. Ce qui sera le cas si vous utilisez un avec une méthode de publication.

Comme un test supplémentaire dont ils ont également mis des trucs comme

if (empty($_POST["name"])) { 
    //name is empty print error! 
} 

en pour vérifier si un champ est vide ou non. tout ce que vous devez faire maintenant est de changer votre action à la même page.

+0

Génial cela a fonctionné, merci. De même, avez-vous des chances de savoir comment réinitialiser la variable de message d'erreur ou toutes les variables d'un utilisateur lors de l'actualisation de la page? – user3671613

+0

de quelles variables de message d'erreur parlez-vous exactement? Pourriez-vous donner un exemple? –

+0

même code que ci-dessus mais j'ai changé {echo "Invalid blablabla"} à autre {$ message = "Adresse e-mail invalide.";} – user3671613

Questions connexes