2012-04-03 4 views
2

Hier ist mein Code. Aus irgendeinem Grund, wenn ich das Formular ohne Platzierung und Passwörter einreiche, erstellt es immer noch den Datenbankeintrag. Es sind einige Kommentare im Code verstreut, aber der Code ist ziemlich einfach. Irgendwelche Ideen?isset() - Funktion gibt True zurück, auch wenn der Artikel nicht eingestellt ist

<?php 
//signup.php 
include 'connect.php'; 
include 'header.php'; 

echo '<h3>Sign up</h3>'; 

if($_SERVER['REQUEST_METHOD'] != 'POST') 
{ 
    /*The form hasn't been posted yet, display it 
     note that the action="" will cause the form to post to the same page it is on */ 
    echo '<form method="post" action=""> 
     Username: <input type="text" name="user_name" /><br /> 
     Password: <input type="password" name="user_pass" /><br /> 
     Password again: <input type="password" name="user_pass_check" /><br /> 
     E-mail: <input type="email" name="user_email" /><br /> 
     <input type="submit" value="Add category" /> 
     </form>'; 
} 
else 
{ 
    /* so, the form has been posted, we'll process the data in three steps: 
     1. Check the data 
     2. Let the user refill the wrong fields (if necessary) 
     3. Save the data 
    */ 
    $errors = array(); /* declare the array for later use */ 

    if(isset($_POST['user_name'])) 
    { 
     //the user name exists 
     if(!ctype_alnum($_POST['user_name'])) 
     { 
      $errors[] = 'The username can only contain letters and digits.'; 
     } 
     if(strlen($_POST['user_name']) > 30) 
     { 
      $errors[] = 'The username cannot be longer than 30 characters.'; 
     } 
    } 
    else 
    { 
     $errors[] = 'The username field must not be empty.'; 
    } 

    if(isset($_POST['user_pass'])) 
    { 
     if($_POST['user_pass'] != $_POST['user_pass_check']) 
     { 
      $errors[] = 'The two passwords did not match.'; 
     } 
    } 
    else 
    { 
     $errors[] = 'The password field cannot be empty.'; 
    } 

    if(!empty($errors)) 
    { 
     echo 'Uh-oh.. a couple of fields are not filled in correctly..'; 
     echo '<ul>'; 
     foreach($errors as $key => $value) 
     { 
      echo '<li>'.$value.'</li>'; 
     } 
     echo '</ul>'; 
    } 
    else 
    { 
     //the form has been posted without errors, so save it 
     //notice the use of mysql_real_escape_string, keep everything safe. 
     //also notice the sha1 function which hashes the password 
     $sql = "INSERT INTO 
        users(user_name, user_pass, user_email, user_date, user_level) 
       VALUES('" . mysql_real_escape_string($_POST['user_name']) . "', 
         '" . sha1($_POST['user_pass']) . "', 
         '" . mysql_real_escape_string($_POST['user_email']) . "', 
         NOW(), 
         0)"; 

     $result = mysql_query($sql); 
     if(!$result) 
     { 
      //something went wrong, display the error 
      echo 'Something went wrong while registering. Please try again later.'; 
      //echo mysql_error(); //debugging purposes, uncomment when needed 
     } 
     else 
     { 
      echo 'Successfully registered. You can now <a href="signin.php">sign in</a> 
        and start posting!'; 
     } 
    } 
} 
include 'footer.php'; 
?> 
+0

Ich bin mir nicht sicher, ob ich dich richtig verstehe. Aber, basierend auf was ich sehe, überprüfen Sie, ob '$ _POST ['user_pass']' und '$ _POST ['user_name']' leer ist? Wenn ja, dann verwenden Sie 'isset()' komplett falsch. –

+0

können Sie auch einfach alt verwenden, wenn hier wie if ($ _ POST ['user_pass')) –

+0

Ich habe es endlich geschafft, vielen Dank Ihnen allen. – Slerig

Antwort

6

Wenn die Variable deklariert ist, werden immernoch leere und/oder leere Strings gesetzt. Versuchen Sie folgendes:

if(isset($_POST['user_pass']) && $_POST['user_pass'] != "")

+0

Danke, ich glaube, dies wird der einfachste Weg sein, mein Problem zu beheben. – Slerig

+1

@Slerig Wenn eine Antwort angegeben wurde, vergessen Sie nicht, sie als Antwort zu markieren. Prost. – Blake

4

isset prüft, ob die Variable gesetzt ist - in diesem Fall wird sie auf '' gesetzt (eine leere Zeichenkette). Versuchen Sie auch, leer() zu verwenden.

+0

Das habe ich mir gedacht. Vielen Dank. Ich werde die leere() Funktion versuchen. – Slerig

0

einfache Lösung: if(!empty($_POST['xxx']) == true) fast gleich, wenn Sie verwenden:

if(isset($_POST['xxx']) == true && $_POST['xxx'] != '') 

Ausnahme: isset() in Bezug auf 0 (Zeichenfolge oder Zahl), wie wahr, während empty() Grüße 0 als wahr.

+0

'Wenn (! Leer ($ _ POST ['xxx']))' sollte genug sein, es gibt wahr oder falsch selbst zurück. – UbiQue

0

prüfen auch dieser

if(isset($_POST['user_pass']) && !empty($_POST['user_pass'])) 

isset() wird das überprüfen, ob der POST gesetzt für 'user_pass' &! Empty() prüft, ob, wenn der Wert leer ist.

+0

Willkommen bei StackOverflow. Antworten mit nur Code in ihnen neigen dazu, zum Löschen markiert zu werden, da sie "niedrige Qualität" sind. Bitte lesen Sie den Hilfebereich zur Beantwortung von Fragen und überlegen Sie, ob Sie Ihrer Antwort einen Kommentar hinzufügen möchten. – Graham

Verwandte Themen