Avatar billede clausberg Nybegynder
24. juli 2006 - 19:01 Der er 25 kommentarer og
1 løsning

Automatisk kald af brugernavn og sæt som value

Hey
Jeg har et script der uploader billede, titel og kommentar til en database. Jeg vil gerne udvide scriptet, så navnet på personen også uploades.

Jeg har øverst på siden sat en session. Jeg går ud fra, at den session indeholder oplysninger såsom brugernavn, password osv.

Hvis nu jeg gerne vil kalde brugernavnet og indsætte det automatisk i det rigtige felt - hvad skal jeg så skrive.

Jeg har forgæves forsøgt med at sætte en value-værdi ved hjælp af php, som herunder:
$output .= '<div class="row">';
$output .= '<span class="label">design</span>';
$output .= '<span class="formw"><input type="text" name="mydesign" value="<? echo 'Her kalder jeg på brugernavnet' ?>" /></span>';
$output .= '</div>';

Men det virker ikke helt. Hvad gør jeg galt, eller er der en smartere måde.
Avatar billede leif Seniormester
24. juli 2006 - 19:03 #1
Session indeholder kun du har bedt om gemmes i Sessionen
Avatar billede clausberg Nybegynder
24. juli 2006 - 19:11 #2
Aha :-) Jeg smider lige den kode jeg tror er selve session´en. Så vidt jeg kan se, så bliver brugernavn gemt.::::

<?
include("database.php");
include("mailer.php");
include("form.php");

class Session
{
  var $username;    //Username given on sign-up
  var $userid;      //Random value generated on current login
  var $userlevel;    //The level to which the user pertains
  var $time;        //Time user was last active (page loaded)
  var $logged_in;    //True if user is logged in, false otherwise
  var $userinfo = array();  //The array holding all user info
  var $url;          //The page url current being viewed
  var $referrer;    //Last recorded site page viewed


  /* Class constructor */
  function Session(){
      $this->time = time();
      $this->startSession();
  }


  function startSession(){
      global $database;  //The database connection
      session_start();  //Tell PHP to start the session

      /* Determine if user is logged in */
      $this->logged_in = $this->checkLogin();


      if(!$this->logged_in){
        $this->username = $_SESSION['username'] = GUEST_NAME;
        $this->userlevel = GUEST_LEVEL;
        $database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);
      }
      /* Update users last active timestamp */
      else{
        $database->addActiveUser($this->username, $this->time);
      }
     
      /* Remove inactive visitors from database */
      $database->removeInactiveUsers();
      $database->removeInactiveGuests();
     
      /* Set referrer page */
      if(isset($_SESSION['url'])){
        $this->referrer = $_SESSION['url'];
      }else{
        $this->referrer = "/";
      }

      /* Set current url */
      $this->url = $_SESSION['url'] = $_SERVER['PHP_SELF'];
  }


  function checkLogin(){
      global $database;  //The database connection
      /* Check if user has been remembered */
      if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){
        $this->username = $_SESSION['username'] = $_COOKIE['cookname'];
        $this->userid  = $_SESSION['userid']  = $_COOKIE['cookid'];
      }

      /* Username and userid have been set and not guest */
      if(isset($_SESSION['username']) && isset($_SESSION['userid']) &&
        $_SESSION['username'] != GUEST_NAME){
        /* Confirm that username and userid are valid */
        if($database->confirmUserID($_SESSION['username'], $_SESSION['userid']) != 0){
            /* Variables are incorrect, user not logged in */
            unset($_SESSION['username']);
            unset($_SESSION['userid']);
            return false;
        }

        /* User is logged in, set class variables */
        $this->userinfo  = $database->getUserInfo($_SESSION['username']);
        $this->username  = $this->userinfo['username'];
        $this->userid    = $this->userinfo['userid'];
        $this->userlevel = $this->userinfo['userlevel'];
        return true;
      }
      /* User not logged in */
      else{
        return false;
      }
  }


  function login($subuser, $subpass, $subremember){
      global $database, $form;  //The database and form object

      /* Username error checking */
      $field = "user";  //Use field name for username
      if(!$subuser || strlen($subuser = trim($subuser)) == 0){
        $form->setError($field, "* Username not entered");
      }
      else{
        /* Check if username is not alphanumeric */
        if(!eregi("^([0-9a-z])*$", $subuser)){
            $form->setError($field, "* Username not alphanumeric");
        }
      }

      /* Password error checking */
      $field = "pass";  //Use field name for password
      if(!$subpass){
        $form->setError($field, "* Password not entered");
      }
     
      /* Return if form errors exist */
      if($form->num_errors > 0){
        return false;
      }

      /* Checks that username is in database and password is correct */
      $subuser = stripslashes($subuser);
      $result = $database->confirmUserPass($subuser, md5($subpass));

      /* Check error codes */
      if($result == 1){
        $field = "user";
        $form->setError($field, "* Username not found");
      }
      else if($result == 2){
        $field = "pass";
        $form->setError($field, "* Invalid password");
      }
     
      /* Return if form errors exist */
      if($form->num_errors > 0){
        return false;
      }

      /* Username and password correct, register session variables */
      $this->userinfo  = $database->getUserInfo($subuser);
      $this->username  = $_SESSION['username'] = $this->userinfo['username'];
      $this->userid    = $_SESSION['userid']  = $this->generateRandID();
      $this->userlevel = $this->userinfo['userlevel'];
     
      /* Insert userid into database and update active users table */
      $database->updateUserField($this->username, "userid", $this->userid);
      $database->addActiveUser($this->username, $this->time);
      $database->removeActiveGuest($_SERVER['REMOTE_ADDR']);


      if($subremember){
        setcookie("cookname", $this->username, time()+COOKIE_EXPIRE, COOKIE_PATH);
        setcookie("cookid",  $this->userid,  time()+COOKIE_EXPIRE, COOKIE_PATH);
      }

      /* Login completed successfully */
      return true;
  }


  function logout(){
      global $database;  //The database connection
      /**
      * Delete cookies - the time must be in the past,
      * so just negate what you added when creating the
      * cookie.
      */
      if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){
        setcookie("cookname", "", time()-COOKIE_EXPIRE, COOKIE_PATH);
        setcookie("cookid",  "", time()-COOKIE_EXPIRE, COOKIE_PATH);
      }

      /* Unset PHP session variables */
      unset($_SESSION['username']);
      unset($_SESSION['userid']);

      /* Reflect fact that user has logged out */
      $this->logged_in = false;
     

      $database->removeActiveUser($this->username);
      $database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);
     
      /* Set user level to guest */
      $this->username  = GUEST_NAME;
      $this->userlevel = GUEST_LEVEL;
  }


  function register($subuser, $subpass, $subemail){
      global $database, $form, $mailer;  //The database, form and mailer object
     
      /* Username error checking */
      $field = "user";  //Use field name for username
      if(!$subuser || strlen($subuser = trim($subuser)) == 0){
        $form->setError($field, "* Username not entered");
      }
      else{
        /* Spruce up username, check length */
        $subuser = stripslashes($subuser);
        if(strlen($subuser) < 5){
            $form->setError($field, "* Username below 5 characters");
        }
        else if(strlen($subuser) > 30){
            $form->setError($field, "* Username above 30 characters");
        }
        /* Check if username is not alphanumeric */
        else if(!eregi("^([0-9a-z])+$", $subuser)){
            $form->setError($field, "* Username not alphanumeric");
        }
        /* Check if username is reserved */
        else if(strcasecmp($subuser, GUEST_NAME) == 0){
            $form->setError($field, "* Username reserved word");
        }
        /* Check if username is already in use */
        else if($database->usernameTaken($subuser)){
            $form->setError($field, "* Username already in use");
        }
        /* Check if username is banned */
        else if($database->usernameBanned($subuser)){
            $form->setError($field, "* Username banned");
        }
      }

      /* Password error checking */
      $field = "pass";  //Use field name for password
      if(!$subpass){
        $form->setError($field, "* Password not entered");
      }
      else{
        /* Spruce up password and check length*/
        $subpass = stripslashes($subpass);
        if(strlen($subpass) < 4){
            $form->setError($field, "* Password too short");
        }
        /* Check if password is not alphanumeric */
        else if(!eregi("^([0-9a-z])+$", ($subpass = trim($subpass)))){
            $form->setError($field, "* Password not alphanumeric");
        }

      }
     
      /* Email error checking */
      $field = "email";  //Use field name for email
      if(!$subemail || strlen($subemail = trim($subemail)) == 0){
        $form->setError($field, "* Email not entered");
      }
      else{
        /* Check if valid email address */
        $regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
                ."@[a-z0-9-]+(\.[a-z0-9-]{1,})*"
                ."\.([a-z]{2,}){1}$";
        if(!eregi($regex,$subemail)){
            $form->setError($field, "* Email invalid");
        }
        $subemail = stripslashes($subemail);
      }

      /* Errors exist, have user correct them */
      if($form->num_errors > 0){
        return 1;  //Errors with form
      }
      /* No errors, add the new account to the */
      else{
        if($database->addNewUser($subuser, md5($subpass), $subemail)){
            if(EMAIL_WELCOME){
              $mailer->sendWelcome($subuser,$subemail,$subpass);
            }
            return 0;  //New user added succesfully
        }else{
            return 2;  //Registration attempt failed
        }
      }
  }
 

  function editAccount($subcurpass, $subnewpass, $subemail){
      global $database, $form;  //The database and form object
      /* New password entered */
      if($subnewpass){
        /* Current Password error checking */
        $field = "curpass";  //Use field name for current password
        if(!$subcurpass){
            $form->setError($field, "* Current Password not entered");
        }
        else{
            /* Check if password too short or is not alphanumeric */
            $subcurpass = stripslashes($subcurpass);
            if(strlen($subcurpass) < 4 ||
              !eregi("^([0-9a-z])+$", ($subcurpass = trim($subcurpass)))){
              $form->setError($field, "* Current Password incorrect");
            }
            /* Password entered is incorrect */
            if($database->confirmUserPass($this->username,md5($subcurpass)) != 0){
              $form->setError($field, "* Current Password incorrect");
            }
        }
       
        /* New Password error checking */
        $field = "newpass";  //Use field name for new password
        /* Spruce up password and check length*/
        $subpass = stripslashes($subnewpass);
        if(strlen($subnewpass) < 4){
            $form->setError($field, "* New Password too short");
        }
        /* Check if password is not alphanumeric */
        else if(!eregi("^([0-9a-z])+$", ($subnewpass = trim($subnewpass)))){
            $form->setError($field, "* New Password not alphanumeric");
        }
      }
      /* Change password attempted */
      else if($subcurpass){
        /* New Password error reporting */
        $field = "newpass";  //Use field name for new password
        $form->setError($field, "* New Password not entered");
      }
     
      /* Email error checking */
      $field = "email";  //Use field name for email
      if($subemail && strlen($subemail = trim($subemail)) > 0){
        /* Check if valid email address */
        $regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
                ."@[a-z0-9-]+(\.[a-z0-9-]{1,})*"
                ."\.([a-z]{2,}){1}$";
        if(!eregi($regex,$subemail)){
            $form->setError($field, "* Email invalid");
        }
        $subemail = stripslashes($subemail);
      }
     
      /* Errors exist, have user correct them */
      if($form->num_errors > 0){
        return false;  //Errors with form
      }
     
      /* Update password since there were no errors */
      if($subcurpass && $subnewpass){
        $database->updateUserField($this->username,"password",md5($subnewpass));
      }
     
      /* Change Email */
      if($subemail){
        $database->updateUserField($this->username,"email",$subemail);
      }
     
      /* Success! */
      return true;
  }
 

  function isAdmin(){
      return ($this->userlevel == ADMIN_LEVEL ||
              $this->username  == ADMIN_NAME);
  }
 

  function generateRandID(){
      return md5($this->generateRandStr(16));
  }
 

  function generateRandStr($length){
      $randstr = "";
      for($i=0; $i<$length; $i++){
        $randnum = mt_rand(0,61);
        if($randnum < 10){
            $randstr .= chr($randnum+48);
        }else if($randnum < 36){
            $randstr .= chr($randnum+55);
        }else{
            $randstr .= chr($randnum+61);
        }
      }
      return $randstr;
  }
};

$session = new Session;
$form = new Form;
?>
Avatar billede leif Seniormester
24. juli 2006 - 19:14 #3
$output .= '<div class="row">';
$output .= '<span class="label">design</span>';
$output .= '<span class="formw"><input type="text" name="mydesign" value="<? echo $_SESSON['username']; ?>" /></span>';
$output .= '</div>';
Avatar billede clausberg Nybegynder
24. juli 2006 - 19:19 #4
Så får jeg fejlen:
Parse error: parse error, unexpected T_STRING in /customers/bilfri12.dk/bilfri12.dk/httpd.www/b-insert2.php on line 101
Avatar billede clausberg Nybegynder
24. juli 2006 - 19:20 #5
Der manglede et i, i session, men efter den rettelse, får jeg samme fejl ???
Avatar billede nielle Nybegynder
24. juli 2006 - 19:28 #6
Brug de funktioner som Session klassen definere til formålet:

echo $session->username;
Avatar billede leif Seniormester
24. juli 2006 - 19:33 #7
$output .= '<span class="formw"><input type="text" name="mydesign" value="'.$_SESSON['username'].'"/></span>';
Avatar billede clausberg Nybegynder
24. juli 2006 - 19:37 #8
Konge!!!! Det virker.

Der er blot en svaghed - det er at man rent faktisk kan rette i sit username, og skrive noget helt andet. Og det må man ikke kunne. Kan man på nogen måde skrivebeskytte det "username" der bliver kaldt?
Avatar billede nielle Nybegynder
24. juli 2006 - 19:39 #9
Tricket må vel være at lade være med at indsætte den i en <input> :^)
Avatar billede clausberg Nybegynder
24. juli 2006 - 19:40 #10
Ja... eller kan man sætte feltet til "hidden"?
Avatar billede nielle Nybegynder
24. juli 2006 - 19:41 #11
Så er der jo slet ingen grund til at have det med overhovedet? Det er jo gemt pænt af vejen i din session.
Avatar billede clausberg Nybegynder
24. juli 2006 - 19:42 #12
Nielle>>> Nu ved jeg hvad du mener :-) (jeg var vist lidt langsom)... Hvis username blot skal kaldes, skal jeg så bare slette: input type="text"
Avatar billede nielle Nybegynder
24. juli 2006 - 19:42 #13
Men ellers kan du sætte readonly på den:

$output .= '<span class="formw"><input type="text" name="mydesign" readonly value="'.$_SESSON['username'].'"/></span>';



PS: Jeg holder nu stadig på at du skal bruge $session->username i stedet for $_SESSON['username']. Ellers bruger du jo slet ikke den nydelige Sesseion-klasse til ret meget.
Avatar billede nielle Nybegynder
24. juli 2006 - 19:44 #14
$output .= '<div class="row">';
$output .= '<span class="label">design</span>';
$output .= '<span class="formw"><? echo $session->username; ?>" /></span>';
$output .= '</div>';
Avatar billede nielle Nybegynder
24. juli 2006 - 19:44 #15
$output .= '<div class="row">';
$output .= '<span class="label">design</span>';
$output .= '<span class="formw"><? echo $session->username; ?></span>';
$output .= '</div>';
Avatar billede clausberg Nybegynder
24. juli 2006 - 19:51 #16
jeg tester lige
Avatar billede clausberg Nybegynder
24. juli 2006 - 20:27 #17
Nielle>>> Virker ikke. Fejlen består i, at den nu blot skriver:

username; ?> 

...der hvor feltet oprindeligt var. Er det fordi der mangler lidt " eller '
Avatar billede clausberg Nybegynder
24. juli 2006 - 20:28 #18
readonly funktionen virker dog fint. Men jeg bruger jo ikke den nydelige session-klasse. Hvorfor er det godt at bruge præcis den?
Avatar billede nielle Nybegynder
24. juli 2006 - 20:32 #19
Ok, det skal nok være:

$output .= '<div class="row">';
$output .= '<span class="label">design</span>';
$output .= '<span class="formw">' . $session->username . '</span>';
$output .= '</div>';
Avatar billede clausberg Nybegynder
24. juli 2006 - 20:36 #20
Yes :-) Der var den... og det ser super fedt ud. Så har jeg sør´me lært noget igen.

For at være fair, vil jeg bede jer begge om at smide et svar.
Avatar billede nielle Nybegynder
24. juli 2006 - 20:42 #21
Rent faktisk var det nu leif som kom først på denne her. Det var ikke min mening at hijacke spørgsmålet. :^)

Jeg synes bare at - siden du nu har includet session.php ... og den indehollder alle de funktioner du skal bruge i forbindelse med en session - ja, så er det da en skam ikke at bruge dem.
Avatar billede leif Seniormester
24. juli 2006 - 20:42 #22
Jeg springer over
Avatar billede leif Seniormester
24. juli 2006 - 20:43 #23
Synes nielle skal have da han har lavet den mest optimalle udnyttelse af siden og de funktioner der ligger.
Avatar billede nielle Nybegynder
24. juli 2006 - 20:47 #24
Ok så :^)
Avatar billede clausberg Nybegynder
24. juli 2006 - 20:52 #25
Tak for en stor hjælp - til jer begge!!! :-)
Avatar billede nielle Nybegynder
24. juli 2006 - 21:00 #26
Tak for point :^)
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