Avatar billede Slettet bruger
07. december 2009 - 03:25 Der er 17 kommentarer og
1 løsning

Godt igang med Bruger script mangler lige det sidste.

Jeg har været ved at lave et script, så bruger kan oprette sig til en side.
Dette er mest for at lære PHP så derfor vil det være rart med beskrivelser af hvad koderne betyder og hvorfor de skal være der.

Jeg har lavet en standart form i en fil der hedder add_user:
[code]<form action="user_create.php" method="post">
Username: <input type="text" name="username" maxlength="100" value=""><br>   
Email: <input type="text" name="email" maxlength="100" value""><br>
Password: <input type="password" name="password1" maxlength="100"><br>
Gentag Password: <input type="password" name="adgangskode2" maxlength="100"><br>
<input type="submit" value="Opret">
</form>[/code]


Den sender, som i nok kan se, data til user_create.php


[code]
<?php

require("db_connect.php");

$username = &$HTTP_POST_VARS['username'];
$email = &$HTTP_POST_VARS['email'];
$password1 = &$HTTP_POST_VARS['password1'];
$password2 = &$HTTP_POST_VARS['passwrod2'];
$adminlvl = '0';

if(empty($username)) {
echo 'Du skal skrive et brugernavn';}

if(empty($email)) {
echo 'Du skal skrive en email';}


mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);


$result = mysql_query("select username from DWO_Users where username = '$username'")

or die (mysql_error());

$number = mysql_num_rows($result);

if ($number > 0) {

print 'Desværre er Brugernavnet optaget';

} else {

mysql_query("insert into DWO_Users (username, email, adminlvl) values ('$username', '$email', '$adminlvl')")

or die(mysql_error());

print "Brugeren $brugernavn er nu oprettet. Afvent godkendelse af Adminstartor";

}


?>
[/code]

Som i kan se har jeg lavet user_creat.php fil:

[code]
<?php

require("db_connect.php");

$username = &$HTTP_POST_VARS['username'];
$email = &$HTTP_POST_VARS['email'];
$password1 = &$HTTP_POST_VARS['password1'];
$password2 = &$HTTP_POST_VARS['passwrod2'];
$adminlvl = '0';

if(empty($username)) {
echo '<font color="red">Du skal skrive et brugernavn</font>';}

if(empty($email)) {
echo '<font color="red">Du skal skrive en email</font>';}


mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);


$result = mysql_query("select username from DWO_Users where username = '$username'")

or die (mysql_error());

$number = mysql_num_rows($result);

if ($number > 0) {

print '<font color="red">Desværre er Brugernavnet optaget</font>';

} else {

mysql_query("insert into DWO_Users (username, email, adminlvl) values ('$username', '$email', '$adminlvl')")

or die(mysql_error());

print "Brugeren $brugernavn er nu oprettet. Afvent godkendelse af Adminstartor";

}


?>
[/code]

Mit problem er nu:
1. At selvom jeg har lavet funktionen med at Brugernavn ikke må være på 0 tegn. Så oprettede den allgevel en bruger (uden bruger navn) Den hoppede simpelthen det over uden at stoppe. Og så skriver den. Du skal skrive et brugernavnBrugen er nu oprettet.....
Hvorfor gør den det?
Jeg vil gerne have det sådan, at når jeg opretter en bruger.
Så må den ikke forsætte oprettelsen, hvis Brugernavn, email eller noget andet felt er på 0 tegn. Eller hvis Brugernavn eller email er brugt. Og fejl beskederne skal komme hver for sig. Ikke bare hvor begge bliver skrevet ind i samme fejl besked: "Dit brugernavn eller email er brugt."

2. Jeg vil gerne have at den siger. Hvis brugernavnet er optaget. Hvilket den fint gør. Men hvis så Emailen er brugt, vil jeg gerne have at den udskriver en fejl tekst på den også.
Har prøvet at sætte den ind. Men det virker ikke, og er ikke så stiv til det endnu.

3. Jeg ville også gerne have at den tjekkede om password1 og
Password2 er ens. Og hvis de er det så skal den den sende passwordet til feltet "password" i databasen.

4. Jeg vil gerne at den også kan se hvis der ikke er "@" og ".2-3bogstaver" i emailen. at så siger den også det.
Har kigget her: http://www.phpartikler.dk/artikler/regexp.php men kan ikke lige dreje hvordan det skal sættes ind.

5. Jeg ville gerne have at alle fejl beskeder kom i filen user_add.php ved siden af inputfelterne. Og så at alle data (pånær password) stadig vil stå i felterne.

6. Sidst vil jeg gerne have at man ryger tilbage til user_add.php når brugeren er oprettet. Og at Teksten med brugeren er oprettet kommer til at stå øverst i den fil. 

Giver 15 point for svar på spørgsmålene.
Og please vær sød at skære det helt ud i pap for mig :)
Avatar billede Slettet bruger
07. december 2009 - 03:32 #1
Hmmm den der [ code ]  [ /code ] virker vidst ikke

user_add.php:

<form action="user_create.php" method="post">
Username: <input type="text" name="username" maxlength="100" value=""><br>   
Email: <input type="text" name="email" maxlength="100" value""><br>
Password: <input type="password" name="password1" maxlength="100"><br>
Gentag Password: <input type="password" name="adgangskode2" maxlength="100"><br>
<input type="submit" value="Opret">
</form>




user_create.php:

<?php

require("db_connect.php");

$username = &$HTTP_POST_VARS['username'];
$email = &$HTTP_POST_VARS['email'];
$password1 = &$HTTP_POST_VARS['password1'];
$password2 = &$HTTP_POST_VARS['passwrod2'];
$adminlvl = '0';

if(empty($username)) {
echo '<font color="red">Du skal skrive et brugernavn</font>';}

if(empty($email)) {
echo '<font color="red">Du skal skrive en email</font>';}


mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);


$result = mysql_query("select username from DWO_Users where username = '$username'")

or die (mysql_error());

$number = mysql_num_rows($result);

if ($number > 0) {

print '<font color="red">Desværre er Brugernavnet optaget</font>';

} else {

mysql_query("insert into DWO_Users (username, email, adminlvl) values ('$username', '$email', '$adminlvl')")

or die(mysql_error());

print "Brugeren $brugernavn er nu oprettet. Afvent godkendelse af Adminstartor";

}


?>
Avatar billede xicrow Nybegynder
07. december 2009 - 18:08 #2
Det ville være en god ide hvis du samlede dine fejlbeskeder i et array, så har du mere styr på dem, samt du kan lettere tjekke om der er opstået nogen fejl undervejs:
// Array for erros
$errors = array();

// Get POST variables
$username = $_POST['username'];
$email = $_POST['email'];
$password1 = $_POST['password1'];
$password2 = $_POST['passwrod2'];
$adminlvl = '0';

// Check if username is empty
if (empty($username)){
  $errors[] = '<font color="red">Du skal skrive et brugernavn</font>';
}
// Check if email is empty
if (empty($email)){
  $errors[] = '<font color="red">Du skal skrive en email</font>';
}
// More checks here...
// ...

// Check if any errors has occured
if (count($errors) > 0){
  // Display errors
  foreach ($errors as $error){
    echo $error;
  }
}
else{
  // Create the user
  mysql_query("insert into DWO_Users (username, email, adminlvl) values ('$username', '$email', '$adminlvl')") or die(mysql_error());
 
  echo "Brugeren $brugernavn er nu oprettet. Afvent godkendelse af Adminstartor";
}

På den måde har du et array hvor du samler alle fejl der måtte opstå, og brugeren bliver kun oprettet hvis der ikke er registreret nogen fejl.

/xicrow
Avatar billede Slettet bruger
07. december 2009 - 23:08 #3
Mange tak.
Dejligt med nogle muligeheder for at gøre det bedre.
Er ho til for at lære.

Men der var ikke så meget svar til mine spørgsmål. Er det noget du også kan hjælpe mig med?
Avatar billede Slettet bruger
07. december 2009 - 23:09 #4
:P ved ikke hvad jeg prøvede at skrive. Der skulle stå "Er her for at lære"
Avatar billede xicrow Nybegynder
07. december 2009 - 23:33 #5
1. Grunden til at den går videre, og opretter brugeren selvom der er fejl, er at der ikke er noget der forhindrer den i at gøre dette, da du tjekker om der er en fejl, ja, men senere opretter du bare brugeren alligevel. Derfor jeg gav dig eksemplet med at gemme dine fejlbeskeder så du kan tjekke senere (f.eks. inden du opretter brugeren) om der er opstået nogen fejl.

2. Du tjekker for om e-mailen er i brug på nøjagtigt samme måde som du tjekker om brugernavnet allerede er i brug, blot på et andet felt i database, samt med den angivne e-mail. Hvis du ikke kan få det til at virke, så skriv det kode der ikke virker

3. I det jeg har skrevet ovenfor, tilføjer du bare:
// Check if passwords match
if ($password1 != $password2){
  $errors[] = '<font color="red">Kodeordene skal være ens</font>';
}
Derefter skal du så bare gemme kodeordet i din tabel, der hvor du opretter brugeren.

4. Du kan evt. tilføje:
// Check if e-mail is valid
if (!preg_match('#^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$#', $email)){
  $errors[] = '<font color="red">E-mail adressen er ugyldig</font>';
}

5. Kan gøres på flere måder. Jeg ville nok undlade at lave "user_create.php", og istedet behandle formen (det jeg har skrevet ovenfor) i user_add.php. Dermed kan man blot "sende" variablen med registrerede fejl i "videre", og udskrive dem et passende sted, f.eks. lige over formularen.
Men du kan vel også gemme de registrerede fejl i en session, og derefter sende tilbage til "user_add.php", hvor de bliver udskrevet.
Det samme gør sig gældende med de data der er indtastet i formularen.

6. Det kan du gøre ved at lave en redirect (header('location: ...'); exit;) efter du har oprettet brugeren. Så kan du f.eks. sende til "user_add.php?success=1". Derefter laver du et check der hvor du vil have beskeden skal stå, i retningen af:
if (@$_GET['success'] == 1){
  echo 'Brugeren er nu oprettet';
}
Avatar billede Slettet bruger
07. december 2009 - 23:52 #6
5. Kan gøres på flere måder. Jeg ville nok undlade at lave "user_create.php", og istedet behandle formen (det jeg har skrevet ovenfor) i user_add.php. Dermed kan man blot "sende" variablen med registrerede fejl i "videre", og udskrive dem et passende sted, f.eks. lige over formularen.
Men du kan vel også gemme de registrerede fejl i en session, og derefter sende tilbage til "user_add.php", hvor de bliver udskrevet.
Det samme gør sig gældende med de data der er indtastet i formularen.


Grunden til jeg gerne vil adskille de 2 sider er at jeg personligt synes det er nemmere at overskue filerne på den måde. Det er nok en smags sag. Som jeg sagde så er jeg MEGET grøn indefor PHP. Hvis jeg vil lave session. (Det er nok også det næste jeg skal lære helt) Hvordan smider jeg så dem i sessions og tilbage i formularen og får fejl teksterne smidt ind?






6. Det kan du gøre ved at lave en redirect (header('location: ...'); exit;) efter du har oprettet brugeren. Så kan du f.eks. sende til "user_add.php?success=1". Derefter laver du et check der hvor du vil have beskeden skal stå, i retningen af:
if (@$_GET['success'] == 1){
  echo 'Brugeren er nu oprettet';
}


Det vil sige at jeg skal lave denne linje i toppen af add filen:
if (@$_GET['success'] == 1){
  echo 'Brugeren er nu oprettet';

Og denne linje i bunden af create filen:
(header('location:user_add.php?success=1'); exit;)
Avatar billede xicrow Nybegynder
08. december 2009 - 00:15 #7
Det vil sige at jeg skal lave denne linje i toppen af add filen:
if (@$_GET['success'] == 1){
  echo 'Brugeren er nu oprettet';

Og denne linje i bunden af create filen:
(header('location:user_add.php?success=1'); exit;)


For at sende brugeren til en besked hvis brugeren er blevet oprettet, skal du indsætte en redirect som herunder, derudover har jeg også tilføjet at fejlbeskeder bliver gemt i en session:
// Check if any errors has occured
if (count($errors) > 0){
  // Save errors to session
  $_SESSION['errors'] = $errors;
 
  // Save form data to session
  $_SESSION['post_data'] = $_POST;
 
  // Redirect back to form
  header('location:user_add.php');
  exit;
}
else{
  // Create the user
  mysql_query("insert into DWO_Users (username, email, adminlvl) values ('$username', '$email', '$adminlvl')") or die(mysql_error());
 
  // Redirect to a success message
  header('location:user_add.php?success=1');
  exit;
}

I "user_add.php" filen, laver du som du selv har skrevet, følgende i toppen af filen, men tilføjer også at den udskriver eventuelle fejl:
if (isset($_SESSION['errors'])){
  foreach ($_SESSION['errors'] as $error){
    echo $error.'<br />';
  }
}
elseif (@$_GET['success'] == 1){
  echo 'Brugeren er nu oprettet';
}

Derudover kan du nu også hente de data brugeren havde indtastet i formularen ved at gøre følgende:
<form action="user_create.php" method="post">
Username: <input type="text" name="username" maxlength="100" value="<?php echo @$_SESSION['post_data]['username']; ?>"><br> 
Email: <input type="text" name="email" maxlength="100" value"<?php echo @$_SESSION['post_data]['email']; ?>"><br>
Password: <input type="password" name="password1" maxlength="100"><br>
Gentag Password: <input type="password" name="adgangskode2" maxlength="100"><br>
<input type="submit" value="Opret">
</form>

Derudover skal du huske (og dette er meget vigtigt), at skrive session_start(); som det første i alle de filer du ønske at benytte sessions. Det vil sige at de filer du bruger sessions i gerne skulle se således ud:
Line 1: <?php
Line 2: session_start();
Line 3: // Kode, kode, og mere kode...
Line 4: // ...

Såfremt du bruger en eller anden inkluderet fil, som du inkludere på alle dine sider, kan du dog også nøjes med at tilføje den som det første i den fil. Hvis du ikke gør, kan det klart anbefales.

/xicrow
Avatar billede Slettet bruger
08. december 2009 - 00:31 #8
Har lige fået et problem med først del af dit svar:
Vil gerne lige sige tak for en god hjælp ellers. Det er måske mig der er meget dum. Men skal lige ind i det

Her er problemet.
Min create fil:


<?php
require("db_connect.php");

// Array for erros
$errors = array();

// Get POST variables
$username = $_POST['username'];
$email = $_POST['email'];
$password1 = $_POST['password1'];
$password2 = $_POST['password2'];
$adminlvl = '0';

// Check if username is empty
if (empty($username)){
  $errors[] = '<font color="red">Du skal skrive et brugernavn<br></font>';
}

// Check if email is empty
if (empty($email)){
  $errors[] = '<font color="red">Du skal skrive en email<br></font>';
}


// Check if passwords match
if ($password1 != $password2){
  $errors[] = '<font color="red">Kodeordene skal være ens<br></font>';
}



// Check if e-mail is valid
if (!preg_match('#^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$#', $email)){
  $errors[] = '<font color="red">E-mail adressen er ugyldig</font>';
}



// Check if any errors has occured
if (count($errors) > 0){
  // Display errors
  foreach ($errors as $error){
    echo $error;
  }
}
else{
  // Create the user
  mysql_query("insert into DWO_Users (username, password, email, adminlvl) values ('$username', '$password1', '$email', '$adminlvl')") or die(mysql_error());

  echo "Brugeren $brugernavn er nu oprettet. Afvent godkendelse af Adminstartor";
}

?>


Når jeg prøver at oprette en bruger så får jeg denne fejl:
Access denied for user 'thewildcrew.dk'@'srv65.one.com' (using password: NO)

Hvad betyder det. Før kunne jeg jo godt tilføje i databasen men det kan jeg slet ikke nu.
Og mangler der ikke en del der tjekker hvor vidt brugernavn og/eller mail er brugt i systemet? Det var der da før. Eller har jeg bare fjernet for meget?
Avatar billede xicrow Nybegynder
08. december 2009 - 00:44 #9
Jo du mangler det du havde før der tjekkede om brugernavn/e-mail allerede findes i databasen.

Den fejl du får siger at du ikke har adgang til database med de oplysninger du har angivet, og at du ikke har angivet noget kodeord til din database. Da du ligger på et online webhotel lyder det meget underligt hvis du ikke skal bruge en adgangskode for at forbinde til databasen. Derfor tror jeg lige du skal tjekke dine forbindelses oplysninger.

/xicrow
Avatar billede Slettet bruger
08. december 2009 - 00:53 #10
Okay. jeg misforstod noget.

Det er det her jeg mangler der og der ligger en connect til databasen:



mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);


$result = mysql_query(&quot;select username from DWO_Users where username = &#039;$username&#039;&quot;)

or die (mysql_error());

$number = mysql_num_rows($result);

if ($number &gt; 0) {

print &#039;&lt;font color=&quot;red&quot;&gt;Desværre er Brugernavnet optaget&lt;/font&gt;&#039;;

} else {



Men her tjekker jeg jo kun om brugernavnet er brugt.
Og hvis det ikke er brugt. Så sender den mig jo vider og opretter efter den der else der er nederste.
Hvordan smider jeg en: Hvis brugernavn ikke er brugt OG emailen ikke er brugt, så skal den der else først komme.
Kan ikke rigtigt se at man kan indsætte et and nogen steder.
Og skal vel bare indsætte dette på en måde:


$result = mysql_query(&quot;select email from DWO_Users where email = &#039;$email&#039;&quot;)

or die (mysql_error());

$number = mysql_num_rows($result);

if ($number &gt; 0) {

print &#039;&lt;font color=&quot;red&quot;&gt;Din Email er brugt&lt;/font&gt;&#039;;
Avatar billede xicrow Nybegynder
08. december 2009 - 01:11 #11
Det går da helt i kage med det kode-visning i dag...

Det du skal lave er enten:

$result = mysql_query("select username from DWO_Users where username = '$username' or email = '$email' limit 1");
if (mysql_num_rows($result)){
  // Brugernavn eller e-mail findes allerede
}

Som tjekker om brugernavn eller e-mail allerede findes, ellers skal du lave:

$result = mysql_query("select username from DWO_Users where username = '$username' limit 1");
if (mysql_num_rows($result)){
  // Brugernavn findes allerede
}
$result = mysql_query("select username from DWO_Users where email = '$email' limit 1");
if (mysql_num_rows($result)){
  // E-mail findes allerede
}

Som først tjekker om brugernavn findes, og derefter om e-mail findes.

Husk forresten session_start(); hvis du ikke allerede har tilføjet den !

/xicrow *slut for i nat*
Avatar billede Slettet bruger
08. december 2009 - 02:23 #12
Weee kunne faktisk løse nogle problemer selv nu :P

Men der er opstået 2 nye.

1. Jeg fremprovokere de 4 fejl beskeder som der skal komme. Og de kom. Helt perfekt. Så oprettede en en rigtigt bruger. Han kom fint ind i databasen. MEN. Der kom ikke nogen besked om at "brugeren nu er oprettet". Og alle fejl beskederne fra session er der stadig. Og vil ikke rigtigt forsvinde. Og det er selvom brugerne faktisk er oprettet.


2. Jeg har prøvet at indsætte:
<?php echo @$_SESSION['post_data]['username']; ?>
i min value. (ved at copy/past). Det eneste der sker er at min user_add.php side bare er hvid og ikke viser noget.
Hvad kan fejlen være her?



Mine filer ser sådan ud:

user_add.php
==========================
<?php
session_start();

if (isset($_SESSION['errors'])){
  foreach ($_SESSION['errors'] as $error){
    echo $error.'<br />';
  }
}
elseif (@$_GET['success'] == 1){
  echo 'Brugeren er nu oprettet';
}

?>


<form action="user_create.php" method="post">
    Username: <input type="text" name="username" maxlength="100" value=""><br>   
    Email: <input type="text" name="email" maxlength="100" value""><br>
    Password: <input type="password" name="password1" maxlength="100"><br>
    Gentag Password: <input type="password" name="password2" maxlength="100"><br>
    <input type="submit" value="Opret">
</form>

==========================


user_create.php
==========================
<?php

require("db_connect.php");
mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);



// Array for erros
$errors = array();


// Get POST variables
$username = $_POST['username'];
$email = $_POST['email'];
$password1 = $_POST['password1'];
$password2 = $_POST['password2'];
$adminlvl = '0';


// Check if username is empty
if (empty($username)){
  $errors[] = '<font color="red">Du skal skrive et brugernavn</font>';
}


// Check if email is empty
if (empty($email)){
  $errors[] = '<font color="red">Du skal skrive en email</font>';
}


// Check if passwords match
if ($password1 != $password2){
  $errors[] = '<font color="red">Kodeordene skal være ens</font>';
}


// Check if e-mail is valid
if (!preg_match('#^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$#', $email)){
  $errors[] = '<font color="red">E-mail adressen er ugyldig</font>';
}


// Brugernavn findes allerede
$result = mysql_query("select username from DWO_Users where username = '$username' limit 1");
if (mysql_num_rows($result)){
  $errors[] = '<font color="red">Dit brugernavn er optaget</font>';
}


// E-mail findes allerede
$result = mysql_query("select username from DWO_Users where email = '$email' limit 1");
if (mysql_num_rows($result)){
  $errors[] = '<font color="red">Der er en bruger oprettet på denne mail</font>';
}



// Check if any errors has occured
if (count($errors) > 0){
  // Save errors to session
  $_SESSION['errors'] = $errors;

  // Save form data to session
  $_SESSION['post_data'] = $_POST;

  // Redirect back to form
  header('location:user_add.php');
  exit;
}
else {


  // Create the user
  mysql_query("insert into DWO_Users (username, password, email, adminlvl) values ('$username', '$password1', '$email', '$adminlvl')") or die(mysql_error());

  // Redirect to a success message
  header('location:user_add.php?success=1');
  exit;
}

?>

==========================
Avatar billede Slettet bruger
08. december 2009 - 02:23 #13
Ja ved ikke lige hvad der sker for dem :S

Weee Nu er vi der næsten.

Det giver en lidt selvtillid når man endlig ser lyset og selv kan rette lidt fejl.

Nu oplever jeg kun 2 ting der ikke er som de skal være:

Problem nummer 1:
Jeg fremprovokerede de 4 fejl for at teste om det virker og det gør det. Men nu har jeg så et andet problem. Session beskederne bliver ved med at stå der. Og beskeden om at brugen er oprettet kommer ikke frem. uanset hvad jeg gør kan jeg ikke få fejlbeskederne væk.

Problem nummer 2:
Du skrev tidligere hvordan jeg skulle sætte session ind i value for at få brugernavn og kodeord til at blive stående når man skriver forkert. Hvis jeg indsætter det i mine inputfelter får jeg bare en hvid skærm frem. Hvordan kan det være?
Jeg kopiere bar dette ind:
<?php echo @$_SESSION['post_data]['username']; ?>


Lige nu ser mine filer sådan ud:

user_add.php
--------------------------

<?php
session_start();

if (isset($_SESSION['errors'])){
  foreach ($_SESSION['errors'] as $error){
    echo $error.'<br />';
  }
}
elseif (@$_GET['success'] == 1){
  echo 'Brugeren er nu oprettet';
}

?>


<form action="user_create.php" method="post">
    Username: <input type="text" name="username" maxlength="100" value=""><br>   
    Email: <input type="text" name="email" maxlength="100" value""><br>
    Password: <input type="password" name="password1" maxlength="100"><br>
    Gentag Password: <input type="password" name="password2" maxlength="100"><br>
    <input type="submit" value="Opret">
</form>


--------------------------


user_create.php
--------------------------
<?php

require("db_connect.php");
mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);



// Array for erros
$errors = array();


// Get POST variables
$username = $_POST['username'];
$email = $_POST['email'];
$password1 = $_POST['password1'];
$password2 = $_POST['password2'];
$adminlvl = '0';


// Check if username is empty
if (empty($username)){
  $errors[] = '<font color="red">Du skal skrive et brugernavn</font>';
}


// Check if email is empty
if (empty($email)){
  $errors[] = '<font color="red">Du skal skrive en email</font>';
}


// Check if passwords match
if ($password1 != $password2){
  $errors[] = '<font color="red">Kodeordene skal være ens</font>';
}


// Check if e-mail is valid
if (!preg_match('#^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$#', $email)){
  $errors[] = '<font color="red">E-mail adressen er ugyldig</font>';
}


// Brugernavn findes allerede
$result = mysql_query("select username from DWO_Users where username = '$username' limit 1");
if (mysql_num_rows($result)){
  $errors[] = '<font color="red">Dit brugernavn er optaget</font>';
}


// E-mail findes allerede
$result = mysql_query("select username from DWO_Users where email = '$email' limit 1");
if (mysql_num_rows($result)){
  $errors[] = '<font color="red">Der er en bruger oprettet på denne mail</font>';
}



// Check if any errors has occured
if (count($errors) > 0){
  // Save errors to session
  $_SESSION['errors'] = $errors;

  // Save form data to session
  $_SESSION['post_data'] = $_POST;

  // Redirect back to form
  header('location:user_add.php');
  exit;
}
else {


  // Create the user
  mysql_query("insert into DWO_Users (username, password, email, adminlvl) values ('$username', '$password1', '$email', '$adminlvl')") or die(mysql_error());

  // Redirect to a success message
  header('location:user_add.php?success=1');
  exit;
}

?>
--------------------------
Avatar billede Slettet bruger
08. december 2009 - 02:25 #14
Hmmmm eksperten.dk opføre sig meget mystisk.
Først vil den ikke poste mit indlæg, og da jeg så skriver et nyt, poster den sku begge.
Avatar billede xicrow Nybegynder
08. december 2009 - 08:36 #15
For det første, i din user_create.php, skal du også have session_start(); i toppen af filen.

Problem nummer 1:
For at fjerne fejlbeskederne, kan du skrive følgende under din form:
<?php
// Check if session with errors is set
if (isset($_SESSION['errors'])){
  // Clear session with errors
  unset($_SESSION['errors']);
}
?>

Problem nummer 2:
Har lige set at jeg har glemt et enkelt '-tegn her:
<?php echo @$_SESSION['post_data]['username']; ?>
Den skal selvfølgelig se sådan her ud:
<?php echo @$_SESSION['post_data']['username']; ?>

Det var grunden til at du fik en fejl (blank skærm), beklager meget.

/xicrow
Avatar billede Slettet bruger
08. december 2009 - 11:38 #16
i min create havde jeg den der "session start" i. Hvade bare slettet den for at se om den så undlod at tage sessions data'erne med.

Så er der bare en sidste fejl.
Når brugeren er oprettet, må den gerne rense value felterne...

Du har sku været en stor hjælp.
Nu har jeg forstået det meget bedre.
Det er lidt nemmere at forstå ting når man arbejder med det.
Frem for at læse det 1000 tak
Avatar billede xicrow Nybegynder
08. december 2009 - 12:24 #17
For at "rense value felterne", skal du lige ændre lidt i din else i "user_add.php":

else {
  // Create the user
  mysql_query("insert into DWO_Users (username, password, email, adminlvl) values ('$username', '$password1', '$email', '$adminlvl')") or die(mysql_error());
 
  // Clear POST values from session
  unset($_SESSION['post_data']);
 
  // Redirect to a success message
  header('location:user_add.php?success=1');
  exit;
}

Og tak for de pæne ord, er da glad for at kunne hjælpe. Håber forresten ikke det gør noget at jeg skrive mine kommentarer i koden på engelsk, har bare altid gjort det, og kan næsten ikke få mig selv til at skrive dem på dansk :P

/xicrow
Avatar billede Slettet bruger
08. december 2009 - 12:35 #18
Det var så lidt
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