WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Kod körs inte, vad har jag missat? (https://www.wn.se/forum/showthread.php?t=1061115)

ITkingen 2014-03-08 00:47

Kod körs inte, vad har jag missat?
 
Jag blir tokig. Detta visas inte som jag vill. Formuläret syns tydligt, men när jag trycker på knappen "Registrera" så visas ingenting. Jag har kört koden i en kodvaliderare, men inget syntaxfel upptäcks. Detta är en register.php-fil.

Vad har jag gjort fel?

Kod
PHP-kod:

<?php 


?>
 
<!DOCTYPE HTML> 
<html> 
    <head> 
        <meta charset="UTF-8"> 
        <link rel="stylesheet" type="text/css" href="style.css"> 
        <meta name="description" content="Beskrivning"> 
        <meta name="keywords" content="keywords"> 
        <link rel="canonical" href="webadress"> 
        <title>TITLE: Registrering</title> 
    </head> 
    <body> 

    <?php 
     
    
if ($_POST['register'] ) 
    { 
        
// Hämta inmatningar från formulär 
        
$getusername $_POST['username']; 
        
$getemail $_POST['email']; 
        
$getpassword $_POST['password']; 
        
$getretypepassword $_POST['retypepassword']; 
         
        if (
$getusername
        { 
            if (
$getemail
            { 
                if (
$getpassword
                { 
                    if (
$getretypepassword
                    { 
                        
// Kontrollera att de inmatade lösenorden matchat varandra 
                        
if ($getpassword === $getretypepassword
                        { 
                            
// En enkel validering av e-post 
                            
if ((strlen($getemail) >= 7) && (strstr($getemail"@")) && (strstr($getemail"."))) 
                            { 
                                
// Anslut till MySQL 
                                
require("./connect.php"); 
                                 
                                
// Kontrollera att användarnamnet inte är upptaget 
                                
$query mysql_query("SELECT * FROM users WHERE username='$getusername'"); 
                                
$result mysql_num_rows($query); 
                                if (
$result == 0
                                { 
                                    
// Kontrollera att e-postadressen inte redan finns registrerad 
                                    
$query mysql_query("SELECT * FROM users WHERE email='$getemail'"); 
                                    
$result mysql_num_rows($query); 
                                    if (
$result == 0
                                    { 
                                         
                                        
// Kryptera lösenordet 
                                        
$password md5(md5(md5("$salt1".$getpassword."$salt2"))); 
                                        
$getdate date("F d, Y"); 
                                         
                                        
// Infoga inmatningar i databasen 
                                        
mysql_query("INSERT INTO users VALUES ( 
                                        '', '
$getusername', '$password', '$getemail', '1', '', '$getdate')"); 
                                         
                                        
// Kontrollera att registreringen lyckades 
                                        
$query mysql_query("SELECT * FROM users WHERE username='$getusername'"); 
                                        
$result mysql_num_rows($query); 
                                        if (
$result == 1
                                        { 
                                             
                                            
// Stäng anslutning och skicka bekräftelsemeddelande 
                                            
mysql_close(); 
                                            
$webmaster "Webmaster <info@domän.se>"
                                            
$headers "From: $webmaster"
                                            
$subject "Du är nu registrerad!"
                                            
$message "Du är nu registrerad på websidan.\r\nAnvändarnamn: $getusername\r\nLösenord: $getpassword \r\nKlicka <a href='http://www.domän.se/login.php'>här</a> för att logga in.\r\n"
                                             
                                            if (
mail($getemail$subject$message$headers)) 
                                            { 
                                                
$errormessage "Registreringen lyckades! Ett e-postmeddelande har skickats till den adress som angavs."
                                                 
                                                
$getuser ""
                                                
$getemail ""
                                            } 
                                            else 
                                                
$errormessage "Ett fel har inträffat. Registreringsmeddelandet kunde inte skickas."
                                        } 
                                        else 
                                            
$errormessage "Ett fel har inträffat. Kontot kunde inte skapas."
                                    } 
                                    else 
                                        
$errormessage "Det finns redan en användare med den e-postadressen."
                                     
                                } 
                                else 
                                    
$errormessage "Användarnamnet är upptaget."
                                 
                                 
                             
                                 
                                 
                            } 
                            else 
                                
$errormessage "Du måste ange en korrekt e-postadress för att registrera dig."
                        } 
                        else 
                            
$errormessage "Dina lösenord matchade inte varandra."
                    } 
                    else 
                        
$errormessage "Du måste repetera lösenordet för att registrera dig."
                } 
                else 
                    
$errormessage "Du måste ange ett lösenord för att registrera dig."
            } 
            else 
                
$errormessage "Du måste ange en e-postadress."
        } 
        else 
            
$errormessage "Du måste ange ett användarnamn."
    } 
    else 

    
// Registreringsformuläret 
    
$registerform "<form action='./register.php' method='POST'> 

                    <span class='error'>
$errormessage</span> 
     
                    <p>Användarnamn<br> 
                    <input type='text' name='username' value='
$getusername'></p> 
                     
                    <p>E-post<br> 
                    <input type='text' name='email' value='
$getemail'></p> 
                     
                    <p>Lösenord<br> 
                    <input type='password' name='password' value=''></p> 
                     
                    <p>Lösenord igen<br> 
                    <input type='password' name='retypepassword' value=''></p> 
                     
                    <p><input type='submit' name='register' value='Registrera'></p> 
                     
                    </form>"

     
    echo 
$registerform 
         
    ?>
 

    </body> 
</html>


weetabix 2014-03-08 08:11

Är ju inte superhaj, men skall du ha det sista else:et?

Kimppa 2014-03-08 10:36

Citat:

echo $registerform

?>
Saknar också ";"

Försökte klistra in din kod i Notepad++ men allt är väldigt rörigt och "indenten" är helt otrolig :P Ändra i ditt program så den hoppar 3 mellanslag.

I övrigt hade jag använt mig av dina input names som en array.

Då kan du enklare kontrollera om POST är isset, samt sätta t.ex. NULL-värde på de som inte är det för att senare kunna visa felmeddelande.

Exempel:

Kod:

<?php 

$post_array = array("username","getemail","password","retypepassword");

$i = 0;

foreach ($post_array as $list){
  if(!isset($_POST[$post_array[$i]])){
      $_POST[$post_array[$i]] = NULL;
  } else {
      $_POST[$post_array[$i]] = $_POST[$post_array[$i]];
  } # end if
  $i++;
} # end foreach

$i = 0;

foreach ($post_array as $list){
  if($_POST[$post_array[$i]] == NULL){
      echo $_POST[$post_array[$i]]." not set!";
  } else {
      $_POST[$post_array[$i]] = $_POST[$post_array[$i]];
  } # end if
  $i++;
}

?>

Finns säkert bättre sätt att göra det på men det fungerar (tror jag, rätt nyvaken). T.ex. skapa funktion av det.

captaindoe 2014-03-08 11:00

Det här besvarar inte din fråga, men din kod är öppen för SQL & XSS attacker.
Du bör även använda filter_input för att hämta information från globala variabler.

Kimppa 2014-03-08 14:43

Citat:

Ursprungligen postat av captaindoe (Inlägg 20487991)
Det här besvarar inte din fråga, men din kod är öppen för SQL & XSS attacker.
Du bör även använda filter_input för att hämta information från globala variabler.

Vad är det för skillnad på mysqli::escape och filter_input?

Eller de kanske inte har med varandra att göra? Aldrig hört om filter_input förut.

captaindoe 2014-03-08 15:01

Jag skulle inte säga att de funktionerna är alltför lika, även om man kan använda filter_input för att 'escapa' SQL. Jag använder filter_input i valideringsprocessen och i filtreringsprocessen.

Det finns flera olika valideringar & filtreringar tillgänliga. Exempelvis kan hela denna rad ersättas med filter_input.

PHP-kod:

if ((strlen($getemail) >= 7) && (strstr($getemail"@")) && (strstr($getemail"."))) 

till
PHP-kod:

if(!is_null(filter_input(INPUT_POST'email'FILTER_VALIDATE_EMAIL))) 

Jag skulle säga att filter_input används för att säkra att en global variabel faktiskt innehåller det den ska göra. Finns även samma motsvarighet för lokala variabler, filter_var.

Om någon har ett annat användningsområde för filter_input & filter_var än det jag har skrivit, får ni gärna berätta det.

ANttila 2014-03-08 16:25

Jag gör en kvalificerad gissning på att du försöker sätta in '' som User ID, primary key.

PHP-kod:

// Infoga inmatningar i databasen  
 
mysql_query("INSERT INTO users VALUES (  
'', '
$getusername', '$password', '$getemail', '1', '', '$getdate')"); 

Det vill säga, MySQL error :)

Johnny Viking 2014-03-09 09:59

Snälla gör er kod säkrare där ute med åtminstone basic escape av input som ovan redan sagt.

Sedan angående din kod så rekommenderar jag mindre spagetti genom att lägga felsvaret inom / efter en if() istället för i else och på slutet försöka spåra djupt tillbaka för att se vilken som ger vad för error.

så t.ex:
$error = [] (eller $error = array() om du använder gammal PHP version)
if($bad) $error[] = "yada yada";

sen efter validering (en eller flera error variabler) så.
if(count($error) > 0) {
echo implode("<br />", $error)
}

Nått sådant simpelt liksom.

Sen som Antilla ovan sa, du anger ett tomt värde i INSERT för primary key. Ta bort första '' helt.

tartareandesire 2014-03-10 10:23

Citat:

Ursprungligen postat av captaindoe (Inlägg 20487998)
Det finns flera olika valideringar & filtreringar tillgänliga. Exempelvis kan hela denna rad ersättas med filter_input.

PHP-kod:

if ((strlen($getemail) >= 7) && (strstr($getemail"@")) && (strstr($getemail"."))) 

till
PHP-kod:

if(!is_null(filter_input(INPUT_POST'email'FILTER_VALIDATE_EMAIL))) 


Jag skulle hellre rekommendera en egen e-postvalidering. Det är dumt att använda färdiga funktioner i PHP som är så starkt beroende av externa förutsättningar om det enkelt kan undvikas. Bättre då att ha en egen som man snabbt kan anpassa efter nya förutsättningar.

Nihilnovi 2014-03-10 11:21

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20488095)
Jag skulle hellre rekommendera en egen e-postvalidering. Det är dumt att använda färdiga funktioner i PHP som är så starkt beroende av externa förutsättningar om det enkelt kan undvikas. Bättre då att ha en egen som man snabbt kan anpassa efter nya förutsättningar.

Just detta med e-postvalidering är något jag tycker man inte ska ge sig för mycket huvudvärk över.

Jag menar, !#$%&'*+-/=?^_`{}|[email protected], är en korrekt epost.

http://stackoverflow.com/questions/1...orks-correctly
lite rolig läsning.


Alla tider är GMT +2. Klockan är nu 20:22.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson