Avatar billede trajkovski Nybegynder
02. juli 2004 - 17:08 Der er 4 kommentarer og
1 løsning

Uforklarlig fejl i php

Hej

Jeg er stødt på endnu et stort mysterie!

Jeg har modificeret en side i mit brugersystem, hvor man opretter brugere.

Hele koden er som følger:
"
<?
session_start();
//header("Cache-control: private"); //IE 6 Fix
if(!$_SESSION['brugernavn']){
$msg = "Log ind nedenfor";
header("Location: logind.php?msg=".$msg);
exit();
}
if($_SESSION['first_login'] == 1){
header("Location: ret_data.php");
exit();
}
if($_SESSION['user_level'] == 4){
echo "Du har været for dum, så du må ikke en skid! Så kan du lære det!!!";
exit();
}

function is_email_valid($email) {
  if(eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,3}$", $email)) return TRUE;
  else return FALSE;
}

require("../billeder/mysql/mysql-funktioner.php");

$lav_nu = $_REQUEST['lav_nu'];
$personens_fornavn = $_POST['personens_fornavn'];
$personens_mellemnavn = $_POST['personens_mellemnavn'];
$personens_efternavn = $_POST['personens_efternavn'];
$personens_email = $_POST['personens_email'];
$personens_tlfnr = $_POST['personens_tlfnr'];
$personens_user_level = $_POST['personens_user_level'];

$personens_fornavn = stripslashes($personens_fornavn);
$personens_mellemnavn = stripslashes($personens_mellemnavn);
$personens_efternavn = stripslashes($personens_efternavn);
$personens_email = stripslashes($personens_email);
$personens_tlfnr = stripslashes($personens_tlfnr);

$personens_tlfnr = str_replace(' ', '', $personens_tlfnr);

$denne_bruger = $_SESSION['brugernavn'];
$denne_brugers_user_level = $_SESSION['user_level'];
$denne_brugers_id = $_SESSION['userid'];


if(!$lav_nu == true){
echo "Er oplysningerne korrekte?";
echo "<p>Fornavn:<br \>".$personens_fornavn."<p>Mellemnavn:<br \>".$personens_mellemnavn."<p>Efternavn:<br \>".$personens_efternavn."<p>Email:<br \>".$personens_email."<p>Mobiltelefonnummer:<br \>".$personens_tlfnr."<p>User level:<br \>".$personens_user_level."<br \><br \>";
echo "<a href=\"opret_bruger_check.php?lav_nu=true\">Ja</a>&nbsp;&nbsp; <a href=\"java script:history.back()\">Nej</a>";
exit();
}

if(is_email_valid($personens_email) == false){
echo "Den angivne emailadresse er ugyldig!<br \>Prøv igen.";
include("opret_bruger.php");
exit();
}

if($personens_user_level < $denne_brugers_user_level){
echo "Du har valgt et user level der er højere end dit eget!<br \> Dette tillades ikke!";
include("opret_bruger.php");
exit();
}

if(!$personens_fornavn || !$personens_efternavn || !$personens_email || !$personens_tlfnr){
echo "Du mangler at udfylde alle felterne markeret med *!";
include("opret_bruger.php");
exit();
}

function makeRandomPassword() {
  $salt = "abchefghjkmnpqrstuvwxyz0123456789";
  srand((double)microtime()*1000000);
      $i = 0;
      while ($i <= 7) {
            $num = rand() % 33;
            $tmp = substr($salt, $num, 1);
            $pass = $pass . $tmp;
            $i++;
      }
      return $pass;
}

$personens_password = makeRandomPassword();
$personens_brugernavn = makeRandomPassword();
$krypteret_password = md5($personens_password);

$admin_mail = "";
$admin_emne = "Der er en mulig sikkerhedsrisiko i genereringen af en ny bruger og password!!!";
$admin_besked = "Da ".$_SESSION['brugernavn']." oprettede ".$personens_brugernavn." blev det generede brugernavn og det genererede password ens!

Information om nyoprettet bruger:

";


if($personens_password == $personens_brugernavn){
mail($admin_mail, $admin_emne, $admin_besked,
        "From: \n
        X-Mailer: PHP/" . phpversion());
}

aabn_forbindelse_og_vaelgdb();
$findes = mysql_query("SELECT * FROM brugere WHERE email='$personens_email'");
$oprettet_af = mysql_result(mysql_query("SELECT userid FROM brugere WHERE brugernavn='$denne_bruger'"),0);

if(mysql_num_rows($findes) > 0){
echo "Der er allerede oprettet en bruger med emailadressen ".$personens_email;
include("opret_bruger.php");
exit();
}

$denne_brugers_efternavn = mysql_result(mysql_query("SELECT efternavn FROM brugere WHERE userid='$denne_brugers_id'"),0);
$denne_brugers_klasse = mysql_result(mysql_query("SELECT klasse FROM brugere WHERE userid='$denne_brugers_id'"),0);
$sql = mysql_query("INSERT INTO brugere (brugernavn, fornavn, mellemnavn, efternavn, password, email, tlfnr, user_level, signup_date, oprettet_af) VALUES('$personens_brugernavn', '$personens_fornavn', '$personens_mellemnavn', '$personens_efternavn', '$krypteret_password', '$personens_email', '$personens_tlfnr', '$personens_user_level', now(), '$oprettet_af')");
$personens_id = mysql_insert_id();
luk_forbindelse();

if(!$personens_id){
echo "Personens id kunne ikke hentes fra databasen";
include("opret_bruger.php");
exit();
}

$emne = "Du er blevet oprettet i brugersystemet";
$besked = "Hej $personens_fornavn

Du er blevet oprettet i brugersystemet af ".$_SESSION['fornavn']." ".$denne_brugers_efternavn." fra ".$denne_brugers_klasse.".

Dit brugernavn er: $personens_brugernavn
Dit password er: $personens_password

Før du kan logge ind skal du aktivere dit medlemskab. Dette kan gøres her: http://sag.niconet.dk/system/aktiver.php?id=$personens_id&personens_krypterede_password=$krypteret_password

Hvis du har modtaget denne mail ved en fejl, skal du blot lade være med at aktivere dit medlemskab, hvorefter du vil blive slettet fra systemet efter en måned.

Med venlig hilsen

Nicolai

P.S. Dette er en automatisk email så lad venligst være med at besvare den!";

//$lav_nu == true
if($sql) {
mail($personens_email, $emne, $besked,
        "From: \n
        X-Mailer: PHP/" . phpversion());
echo "Der er blevet sendt et brugernavn og password til ".$personens_email;
exit();
} else {
echo "Der opstod en fejl - prøv igen! Hvis fejlen fortsætter kontakt da en admin.";
include("opret_bruger.php");
exit();
}
//mysql_insert_id(); --  Get the ID generated from the previous INSERT operation
?>
"

Den tilføjede blok kode er:
if(!$lav_nu == true){
echo "Er oplysningerne korrekte?";
echo "<p>Fornavn:<br \>".$personens_fornavn."<p>Mellemnavn:<br \>".$personens_mellemnavn."<p>Efternavn:<br \>".$personens_efternavn."<p>Email:<br \>".$personens_email."<p>Mobiltelefonnummer:<br \>".$personens_tlfnr."<p>User level:<br \>".$personens_user_level."<br \><br \>";
echo "<a href=\"opret_bruger_check.php?lav_nu=true\">Ja</a>&nbsp;&nbsp; <a href=\"java script:history.back()\">Nej</a>";
exit();
}

Den forårsager den fejl at når brugeren har klikket på ja, så går den videre til det fejltjek, der står nedenunder denne blok. Den udskriver dette fejltjek lige meget om det passer eller ikke gør!
Som koden ser ud nu er det næste fejltjek:
if(is_email_valid($personens_email) == false){
echo "Den angivne emailadresse er ugyldig!<br \>Prøv igen.";
include("opret_bruger.php");
exit();
}

Hvis jeg kommenterer denne validering ud, så tager den bare den næste, som her er:
if($personens_user_level < $denne_brugers_user_level){
echo "Du har valgt et user level der er højere end dit eget!<br \> Dette tillades ikke!";
include("opret_bruger.php");
exit();
}

Det går virkelig over min forstand, så jeg håber, der sidder mindst et klogt hoved derude! :)

Med venlig hilsen

Nicolai
Avatar billede erikjacobsen Ekspert
02. juli 2004 - 18:08 #1
if($lav_nu != "true"){
Avatar billede trajkovski Nybegynder
02. juli 2004 - 23:29 #2
Du har ret i at det er en fejl, men det løser ikke problemet... Den skriver stadig "Den angivne emailadresse er ugyldig!
Prøv igen."

Jeg har ændret i blokken, sådan så at variablerne kommer med. Den ser nu således ud:

if($lav_nu != "true"){
echo "Er oplysningerne korrekte?";
echo "<p>Fornavn:<br \>".$personens_fornavn."<p>Mellemnavn:<br \>".$personens_mellemnavn."<p>Efternavn:<br \>".$personens_efternavn."<p>Email:<br \>".$personens_email."<p>Mobiltelefonnummer:<br \>".$personens_tlfnr."<p>User level:<br \>".$personens_user_level."<br \><br \>";
echo "<form name=\"korrekte\" method=\"post\" action=\"opret_bruger_check.php?lav_nu=true\">
<input type=\"hidden\" name=\"personens_fornavn\" value=\"$personens_fornavn\">
<input type=\"hidden\" name=\"personens_mellemnavn\" value=\"$personens_mellemnavn\">
<input type=\"hidden\" name=\"personens_efternavn\" value=\"$personens_efternavn\">
<input type=\"hidden\" name=\"personens_email\" value=\"$personens_email\">
<input type=\"hidden\" name=\"personens_tlfnr\" value=\"$personens_tlfnr\">
<input type=\"hidden\" name=\"personens_user_level\" value=\"$personens_user_level\">
<input type=\"submit\" name=\"korrekte_oplysninger_send\" value=\"Ja\"></form>&nbsp;&nbsp;
<form action=\"java script:history.back()\" method=\"link\">
<INPUT TYPE=\"submit\" value=\"Nej\">
</form>";
exit();
}

Det har dog ikke hjulpet det store :(
Avatar billede erikjacobsen Ekspert
02. juli 2004 - 23:44 #3
Er det den fejl, der sker nu, eller var det samme reaktion før?
Og den oprindelige <form> - har du stavet "personens_email" korrekt?
Avatar billede trajkovski Nybegynder
03. juli 2004 - 00:05 #4
Ja det er samme reaktion om før.

Ja jeg vil mene jeg har stavet det rigtigt!

Kode til den oprindelige form:

<?
session_start();
header("Cache-control: private"); //IE 6 Fix
if(!$_SESSION['brugernavn']){
$msg = "Log ind nedenfor";
header("Location: logind.php?msg=".$msg);
exit();
}
if($_SESSION['first_login'] == 1){
header("Location: ret_data.php");
exit();
}
if($_SESSION['user_level'] == 4){
echo "Du har været for dum, så du må ikke en skid! Så kan du lære det!!!";
exit();
}
?>
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called.

<p>Indtast følgende:
<form name="opret_bruger" method="post" action="opret_bruger_check.php">
<p>Personens fornavn:<br>
<input type="text" name="personens_fornavn" value="<? echo $personens_fornavn ?>">*
<p>Eventuelle mellemnavne:<br>
<input type="text" name="personens_mellemnavn" value="<? echo $personens_mellemnavn ?>">
<p>Efternavn:<br>
<input type="text" name="personens_efternavn" value="<? echo $personens_efternavn ?>">*
<p>Email:<br>
<input type="text" name="personens_email" value="<? echo $personens_email ?>">*
<p>Mobiltelefonnummer:<br>
<input type="text" name="personens_tlfnr" value="<? echo $personens_tlfnr ?>">*
<p>User level (<a href="#" onclick="java script:window.open('forklaring_user_level.php','forklaring','width=300,height=300,resizeable=yes,scrollbars=yes');">forklaring</a>):<br>
<?
$brugerens_user_level = $_SESSION['user_level'];

switch($brugerens_user_level){
    case "0":
    echo "<select name=\"personens_user_level\">
<option value=\"0\">Administrator
<option value=\"1\">Højere koordinator
<option value=\"2\">Koordinator
<option value=\"3\">Bruger
<option value=\"4\">Kæmpe fjols!
</select>";
    break;
   
    case "1":
    echo "<select name=\"personens_user_level\">
<option value=\"1\">Højere koordinator
<option value=\"2\">Koordinator
<option value=\"3\">Bruger
</select>";
    break;
   
    case "2":
    echo "<select name=\"personens_user_level\">
<option value=\"2\">Koordinator
<option value=\"3\">Bruger
</select>";
    break;
   
    case "3":
    echo "<select name=\"personens_user_level\">
<option value=\"3\">Bruger
</select>";
    break;
}

?>
<br><br>
<input type="submit" name="opret_bruger_send" value="Opret bruger">  <input type="reset" name="slet_alt" value="Slet alt">
</form>
Avatar billede trajkovski Nybegynder
06. juli 2004 - 16:09 #5
Hmmm... Lukker...
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