Kom ihåg mig?
Home Menu

Menu


Kod körs inte, vad har jag missat?

 
Ämnesverktyg Visningsalternativ
Oläst 2014-03-08, 00:47 #1
ITkingen ITkingen är inte uppkopplad
Banned
 
Reg.datum: Feb 2014
Inlägg: 22
ITkingen ITkingen är inte uppkopplad
Banned
 
Reg.datum: Feb 2014
Inlägg: 22
Standard 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>
ITkingen är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-08, 08:11 #2
weetabixs avatar
weetabix weetabix är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2004
Inlägg: 311
weetabix weetabix är inte uppkopplad
Flitig postare
weetabixs avatar
 
Reg.datum: Dec 2004
Inlägg: 311
Är ju inte superhaj, men skall du ha det sista else:et?
weetabix är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-08, 10:36 #3
Kimppas avatar
Kimppa Kimppa är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2010
Inlägg: 793
Kimppa Kimppa är inte uppkopplad
Mycket flitig postare
Kimppas avatar
 
Reg.datum: Jul 2010
Inlägg: 793
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.

Senast redigerad av Kimppa den 2014-03-08 klockan 10:39
Kimppa är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-08, 11:00 #4
captaindoes avatar
captaindoe captaindoe är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2010
Inlägg: 431
captaindoe captaindoe är inte uppkopplad
Flitig postare
captaindoes avatar
 
Reg.datum: Dec 2010
Inlägg: 431
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.
captaindoe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-08, 14:43 #5
Kimppas avatar
Kimppa Kimppa är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2010
Inlägg: 793
Kimppa Kimppa är inte uppkopplad
Mycket flitig postare
Kimppas avatar
 
Reg.datum: Jul 2010
Inlägg: 793
Citat:
Ursprungligen postat av captaindoe Visa inlägg
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.
Kimppa är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-08, 15:01 #6
captaindoes avatar
captaindoe captaindoe är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2010
Inlägg: 431
captaindoe captaindoe är inte uppkopplad
Flitig postare
captaindoes avatar
 
Reg.datum: Dec 2010
Inlägg: 431
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.
captaindoe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-08, 16:25 #7
ANttila ANttila är inte uppkopplad
Medlem
 
Reg.datum: Aug 2013
Inlägg: 81
ANttila ANttila är inte uppkopplad
Medlem
 
Reg.datum: Aug 2013
Inlägg: 81
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
ANttila är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-09, 09:59 #8
Johnny Viking Johnny Viking är inte uppkopplad
Medlem
 
Reg.datum: Aug 2011
Inlägg: 273
Johnny Viking Johnny Viking är inte uppkopplad
Medlem
 
Reg.datum: Aug 2011
Inlägg: 273
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.
Johnny Viking är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-10, 10:23 #9
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Ursprungligen postat av captaindoe Visa inlägg
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.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-03-10, 11:21 #10
Nihilnovi Nihilnovi är inte uppkopplad
Medlem
 
Reg.datum: Jun 2008
Inlägg: 233
Nihilnovi Nihilnovi är inte uppkopplad
Medlem
 
Reg.datum: Jun 2008
Inlägg: 233
Citat:
Ursprungligen postat av tartareandesire Visa inlägg
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.
Nihilnovi är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 21:34.

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