Avatar billede sbmoller Nybegynder
07. december 2007 - 23:13 Der er 3 kommentarer og
1 løsning

sessions, register user

Hej! Jeg har hentet et login script og er igang med at modificere det lidt.
Som det er nu er der et "Sign in" link på forsiden der bringer en til register.php. Er man logget ind i forvejen kan man ikke oprette en ny bruger hvilket virker logisk nok.
Problemet er at det skal være sådan at kun en admin skal kunne oprette brugere. Så er spørgsmålet, hvordan ændre jeg dette?

Flg. er min register.php:

<?
if($session->logged_in){
  echo "<h1>Registered</h1>";
  echo "<p>We're sorry <b>$session->username</b>, but you've already registered. "
      ."<a href=\"main.php\">Main</a>.</p>";
}
/**
* The user has submitted the registration form and the
* results have been processed.
*/
else if(isset($_SESSION['regsuccess'])){
  /* Registration was successful */
  if($_SESSION['regsuccess']){
      echo "<h1>Registered!</h1>";
      echo "<p>Thank you <b>".$_SESSION['reguname']."</b>, your information has been added to the database, "
          ."you may now <a href=\"main.php\">log in</a>.</p>";
  }
  /* Registration failed */
  else{
      echo "<h1>Registration Failed</h1>";
      echo "<p>We're sorry, but an error has occurred and your registration for the username <b>".$_SESSION['reguname']."</b>, "
          ."could not be completed.<br>Please try again at a later time.</p>";
  }
  unset($_SESSION['regsuccess']);
  unset($_SESSION['reguname']);
}
/**
* The user has not filled out the registration form yet.
* Below is the page with the sign-up form, the names
* of the input fields are important and should not
* be changed.
*/
else{
?>


<?
if($form->num_errors > 0){
  echo "<td><font size=\"2\" color=\"#ff0000\">".$form->num_errors." error(s) found</font></td>";
}
?>
<form action="process.php" method="POST">
<table align="left" border="0" cellspacing="0" cellpadding="3">
<tr><td>Username:</td><td><input class="input" type="text" name="user" maxlength="30" value="<? echo $form->value("user"); ?>"></td><td><? echo $form->error("user"); ?></td></tr>
<tr><td>Password:</td><td><input class="input" type="password" name="pass" maxlength="30" value="<? echo $form->value("pass"); ?>"></td><td><? echo $form->error("pass"); ?></td></tr>
<tr><td>Email:</td><td><input class="input" type="text" name="email" maxlength="50" value="<? echo $form->value("email"); ?>"></td><td><? echo $form->error("email"); ?></td></tr>
<tr><td></td><td>
<input type="hidden" name="subjoin" value="1">
<input class="submitlink" type="submit" value="Join!"></td></tr>
<tr><td colspan="2" align="left"><a href="main.php">Back to Main</a></td></tr>
</table>
</form>

<?
}
?>

</body>
</html>
**************************************************************

Min process.php ser således ud (dog kun register-delen):

  function procRegister(){
      global $session, $form;
      /* Convert username to all lowercase (by option) */
      if(ALL_LOWERCASE){
        $_POST['user'] = strtolower($_POST['user']);
      }
      /* Registration attempt */
      $retval = $session->register($_POST['user'], $_POST['pass'], $_POST['email']);
     
      /* Registration Successful */
      if($retval == 0){
        $_SESSION['reguname'] = $_POST['user'];
        $_SESSION['regsuccess'] = true;
        header("Location: ".$session->referrer);
      }
      /* Error found with form */
      else if($retval == 1){
        $_SESSION['value_array'] = $_POST;
        $_SESSION['error_array'] = $form->getErrorArray();
        header("Location: ".$session->referrer);
      }
      /* Registration attempt failed */
      else if($retval == 2){
        $_SESSION['reguname'] = $_POST['user'];
        $_SESSION['regsuccess'] = false;
        header("Location: ".$session->referrer);
      }
  }


******************************************************************

Jeg glæder mig til at høre jeres forslag.
Avatar billede onkel_satan Nybegynder
07. december 2007 - 23:36 #1
//register.php:
<?
if($session->logged_in && strcomp($session->username, "admin") == 0){
if($form->num_errors > 0){
  echo "<td><font size=\"2\" color=\"#ff0000\">".$form->num_errors." error(s) found</font></td>";
}
?>
<form action="process.php" method="POST">
<table align="left" border="0" cellspacing="0" cellpadding="3">
<tr><td>Username:</td><td><input class="input" type="text" name="user" maxlength="30" value="<? echo $form->value("user"); ?>"></td><td><? echo $form->error("user"); ?></td></tr>
<tr><td>Password:</td><td><input class="input" type="password" name="pass" maxlength="30" value="<? echo $form->value("pass"); ?>"></td><td><? echo $form->error("pass"); ?></td></tr>
<tr><td>Email:</td><td><input class="input" type="text" name="email" maxlength="50" value="<? echo $form->value("email"); ?>"></td><td><? echo $form->error("email"); ?></td></tr>
<tr><td></td><td>
<input type="hidden" name="subjoin" value="1">
<input class="submitlink" type="submit" value="Join!"></td></tr>
<tr><td colspan="2" align="left"><a href="main.php">Back to Main</a></td></tr>
</table>
</form>

<?
}
}
?>

// process.php:
if($session->logged_in && strcomp($session->username, "admin") == 0){
procRegister();
}

Har bare indkapslet din form og register delen i en if statement der kontroller om det er admin der er logget ind. Nu gik jeg bare ud fra at administratoren hedder 'admin' kunne også være 'administrator', det på du lige undersøge. Der kan endda være at han har en unikt id tildelt som du kan kontrollere på.
Avatar billede sbmoller Nybegynder
08. december 2007 - 01:08 #2
Hvis jeg gør det du siger vil den ikke gemme noget i databasen ?
Avatar billede onkel_satan Nybegynder
08. december 2007 - 01:46 #3
Jeg kan ikke umiddelbart se hvor den skriver til databasen i den kode ud har angivet. Men det er bare at finde det og indkapsle i samme if statement. Eneste vi gør at bare at udføre et eksra check for at se om det er admin som er logget ind. Så der skulle ikke være noget problem med at gemme i databasen.
Avatar billede sbmoller Nybegynder
23. september 2008 - 19:28 #4
...
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