Avatar billede Jakie Juniormester
22. februar 2012 - 20:39 Der er 7 kommentarer og
1 løsning

Script bliver ikke fuldført?

Hej.

Det er sådan at jeg laver en GET, fra en post fra min menu, så den ligesom henter siden ned, men hvis jeg så laver et script, hvor man kan registrere sig som bruger, og man ikke udfylder formen korrekt, så bliver resten og koden ikke eksvakveret.

Kode:



switch ($_GET["page"]){
  case "register":
    $html .= "
      <h2>Opret bruger</h2>
<form method='post' action='?page=reguser'>
<table>
<tr>

<td>Brugernavn: </td>
<td><input type='text' name='player' ><br /></td>

</tr>
<tr>
<td>Kodeord: </td>
<td><input type='password' name='password' ><br /></td>

</tr>
<tr>
<td>Gentag kodeord: </td>
<td><input type='password' name='pass2'> <br /></td>

</tr>
<tr>
<td>Email-adresse: </td>
<td><input type='text' name='email' ></td>

</tr>
<tr>
<td><input type='submit' value='Registrere'></td>
<td>Når du opretter dig som bruger, accepterer du automatisk vores <a href='?page=betingelser'>betingelser</a></td>

</tr>
</table>

   
</form>


      ";
    break;
 
  case "reguser":
 
$player=$_POST['player'];
$password=$_POST['password'];
$pass2=$_POST['pass2'];
$player=strip_tags($player);
$email=$_POST['email'];
$email=strip_tags($email);

if ($email == "")
{
$html .= "    You forgot the email!!!!<br />
<a href='register.php'>Go back</a><br />";
exit;
}
if ($password==$pass2)
{

$isplayer="SELECT * from players where name='$player'";
$isplayer2=mysql_query($isplayer) or die("kunne ikke query players tabel");
$isplayer3=mysql_fetch_array($isplayer2);
if(!$_POST['password'] || !$_POST['pass2'])
{
$html .= "    You forgot the password!!.<br />
<a href='register.php'>Go back</a>";
exit;
}
else if($isplayer3 || strlen($player)>21 || strlen($player)<1)
{
$html .= "    There is already a player with that name or the name was longer than 16 or shorter than 1.
<br /><a href='register.php'>Go back</a>";
exit;
}
else
{
$isadress="SELECT * from players where email='$email'";
$isadress2=mysql_query($isadress) or die("kunne ikke query kodeord");
$isadress3=mysql_fetch_array($isadress2);
if($isadress3)
{
$html .= " There is already one player with that email-adress<br />
<a href='register.php'>Go back</a>";
exit;
}
else
{
$password=md5($password);

$sql = "INSERT into players(name, password, email, level, exper, attack, defense, hpoints) VALUES ('$player','$password','$email','1','0','5','5','30')";
mysql_query($sql) or die("Kunne ikke registrere brugeren");

$html .= "Tak du er nu registeret";

}
}
}

else
{

  $html .= "   
   
Kodeordene matchede ikke hinanden.<br />
<a href='?page=register'>Go back</a><br />
      ";

exit;
}




På forhånd tak for hjælpen :)
Avatar billede olebole Juniormester
22. februar 2012 - 21:35 #1
<ole>

Inormationer? Hvad sker der? Hvad sker der ikke? Hvad havde du forventet skulle ske? Får du fejl? Hvis du får fejl, hvad siger de så? Har du slået fejlmeddelelser til?

PS: Din kode er en uimodståelig lækkerbidsken for enhver hacker eller barnerøv, som synes, det er sjovt at tømme databaser og lægge et site ned! Du bør sætte dig ind i helt grundlæggende sikkerhed

/mvh
</bole>
Avatar billede Jakie Juniormester
22. februar 2012 - 22:32 #2
Jeg havde regnet med at ált det her ville blive ekskavkerét, hvis det ligesom blev opfyldt af if-statements, men det gør de ikke:

if ($email == "")
{
$html .= "    You forgot the email!!!!<br />
<a href='register.php'>Go back</a><br />";
exit;
}
if ($password==$pass2)
{

$isplayer="SELECT * from players where name='$player'";
$isplayer2=mysql_query($isplayer) or die("kunne ikke query players tabel");
$isplayer3=mysql_fetch_array($isplayer2);
if(!$_POST['password'] || !$_POST['pass2'])
{
$html .= "    You forgot the password!!.<br />
<a href='register.php'>Go back</a>";
exit;
}
else if($isplayer3 || strlen($player)>21 || strlen($player)<1)
{
$html .= "    There is already a player with that name or the name was longer than 16 or shorter than 1.
<br /><a href='register.php'>Go back</a>";
exit;
}
else
{
$isadress="SELECT * from players where email='$email'";
$isadress2=mysql_query($isadress) or die("kunne ikke query kodeord");
$isadress3=mysql_fetch_array($isadress2);
if($isadress3)
{
$html .= " There is already one player with that email-adress<br />
<a href='register.php'>Go back</a>";
exit;


Istedet så stopper det ligesom alt der.

ps.Tak for tippet :)
Avatar billede olebole Juniormester
22. februar 2012 - 22:52 #3
Så du får ikke udskrevet tekst og link, hvis e-mail-feltet ikke er udfyldt?
Avatar billede Jakie Juniormester
23. februar 2012 - 14:43 #4
ja præcis eller hvis kodeordene ikke matcher hinanden :)

Når, men det var noget jeg ville prøve. Er ikke vant til at gøre det sådan, så jeg dropper det.. Og gør det jeg plejer, men vil gerne lige spørge med hensyn til det du sagde med sikkerheden, da jeg egentligt ikke har gået gang med det endnu.

Jeg ved ikke rigtigt for omfattende jeg skal være.

Altså, ville det her være nok:


function beskyttelse($string)
{
  $string = mysql_real_escape_string($string);
  $string = htmlentities($string);
  $string = stripslashes($string);
  $string = strip_tags($string);
  return $string;
}


Eller skal det være mere kompliceret end som så?
Avatar billede olebole Juniormester
23. februar 2012 - 18:08 #5
Først og fremmest bør du, hvergang du modtager data 'udefra', nøje undersøge, om variablen indeholder, hvad du forventer - såsom type, antal tegn, etc.

Dernæst bør du smide brugen af MySQL-API'et på bålet. Det er dybt forældet konstruktion, som indebærer en i udgangspunktet tåbelig måde at håndtere SQL-forespørgsler på.

MySQL-databasen har undergået en omfattende udvikling, bl.a. således, at den som andre databaser understøtter Prepared Statements.

I alle nye applikationer bruger man i dag prepared statements - f.eks. under det nyere MySQLI-API (I'et står for 'Improved'). En god og letlæselig begynder tutorial kan du finde her.

Den funktion, du viser, vil kun skabe et hav af problemer - og den vil ikke effektivt beskytte dig mod SQL-injection. Der er ingen vej udenom at sætte sig ind i prepared statements.
Avatar billede Jakie Juniormester
23. februar 2012 - 22:56 #6
Okay. Tak :)

Vil tutorialen dække det hele eller er der noget som jeg mangler at dække? :)

Du må også gerne vedlægge svar :)
Avatar billede olebole Juniormester
23. februar 2012 - 23:09 #7
Den er en begyndelse. Man lærer heller ikke at kode det gamle MySQL i en tutorial på én side - men du er godt i gang.

Tag et par timer en gang i mellem og kik i de to første links, jeg skrev. Dels er der mange spændende funktoner, du endnu ikke har været i nærheden af - og dels er der mange nyttige brugerkommentarer under hvert afsnit. I tilgift får du god øvelse i at læse sprogreferencer  *o)

Ellers tak, jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)
Avatar billede Jakie Juniormester
24. februar 2012 - 00:21 #8
Okay.

Mange tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester