Avatar billede ubog Nybegynder
07. maj 2009 - 14:17 Der er 15 kommentarer

Loginsystem og sletning af rækker i db - hvad gør jeg forkert?

Hejsa,

Jeg er igang med at lave et 'proof-of-concept' website, som led i et projekt og i den forbindelse skal der laves et simpelt loginsystem, hvorfra den pågældende person der er logget ind, skal kunne oprette og slette admins fra en mysql database, rette sit eget kodeord og også slette rækker/entries fra en anden tabel i databasen.

I forbindelse med Loginsystemet så har jeg brugt en gammel guide fra hæftet "Start på PHP5" som også findes på http://g2k.dk/php/kap/?kap=stort, men kan heller ikke helt få det til at fungere som jeg vil have det - når siden er uploadet melder den ingen fejl, men når jeg udfylder mine "opret/slet/ændr" forms bliver jeg smidt tilbage til login formularen, uden at der er sket ændringer i min database.

Mht. sletning af rækkerne, så kan jeg sagtens lave kaldet til databasen for at få mine rækker/entries vist ($visquery i Login.php), men jeg kan ikke få lov til at slette dem med min ($sletquery) og jeg kan ikke se hvad det er der går galt. 

Der gives 60 point for løsning af hvert spørgsmål - på forhånd tak



Login.php
<?
session_start();

include "inc.config.php";
include "bruger.php";
$bruger = new bruger();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>uBogen</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<!-- start header -->
<div id="header">
    <div id="menu">
        <ul>
            <li><a href="index.php">Home</a></li>
            <li><a href="annoncer.php">Annoncer</a></li>
            <li><a href="opretannonce.php">Opret annonce</a></li>
            <li><a href="sletannonce.php">Slet annonce</a></li>
            <li><a href="kontakt.php">FAQ / Kontakt</a></li>
            <li class="current_page_item"><a href="login.php">Admin</a></li>
        </ul>
    </div>
</div>
<div id="logo">
    <h1>uBogen</h1>
    </div>
<!-- end header -->
<hr />
<!-- start page -->
<div id="page">
<!-- start content -->
    <div id="content">
        <div class="post">
            <h1 class="title">Administration</h1>
            <div class="entry">
            <br />
<?
if(isset($_POST["brugernavn"]) &&
  isset($_POST["kodeord"])){
    if(get_magic_quotes_gpc()){
        $brugernavn = stripslashes($_POST["brugernavn"]);
        $kodeord = stripslashes($_POST["kodeord"]);
    } else {
        $brugernavn = $_POST["brugernavn"];
        $kodeord = $_POST["kodeord"];
    }
  if($bruger->log_ind($brugernavn, $kodeord) == false)
    echo "<font color=red>fejl i login</font><br>";
}

if( $bruger->logget_ind() ){
  echo "<p>Du er logget ind som " ;
  echo $bruger->hent_brugernavn();
  echo "<br /><br />";
  echo "<form action='$PHP_SELF'>";
  echo 'Skriv ID på den annonce du vil slette og tryk på "Slet"</p>';
  echo "<input type='text' name='id' value='AnnonceID' /> <input type='submit' name='slet' value='Slet' />";
  echo "</form><br />";
  $slet = $_POST['slet'];
  $id = $_POST['id'];
    if($slet) {
        $sletquery = mysql_query("delete from ubogen where id='$id'") or die(mysql_error());
    }
  $visquery = mysql_query("SELECT id, titel, forfatter, DATE_format(dato, '%d/%m - %Y') as dato_formatteret, bruger FROM ubogen ORDER BY id");
  while($row = mysql_fetch_array($visquery)) {
    $titel = $row["titel"];
    $forfatter = $row["forfatter"];
    $dato= $row['dato_formatteret'];
    $id = $row["id"];
    $user = $row["bruger"];
    echo "<b>ID nr. $id</b> - $titel, $forfatter blev tilføjet af $user ($dato)<br /><br />";
  }
  echo "<br /><br />";
} else {
  echo "<form method = post action = $PHP_SELF>";
  echo "brugernavn: <input name=brugernavn /><br />";
  echo "kodeord: <input type=password name=kodeord /><br />";
  echo "<input type=submit value=' log ind ' />";
  echo "</form><br />";
}
?>
            </div>
        </div>
    </div>
    <!-- end content -->
    <!-- start sidebar -->
    <div id="sidebar" class="sidebar">
<ul>
<?
if( $bruger->logget_ind() ){
  echo "<li>";
  echo "<h2>Quick Links</h2>";
  echo "<table border=0>";
  $bruger->opret($brugernavn, $kodeord);
  echo "<form method = post action = $PHP_SELF>";
  echo "<tr><td>  </td><td>brugernavn:</td><td><input name=brugernavn></td></tr>";
  echo "<tr><td>  </td><td>kodeord:</td><td><input type=password name=kodeord></td></tr>";
  echo "<tr><td>  </td><td></td><td><input type=submit value=\" opret admin \"></td></tr>";
  echo "</form>";
  $bruger->fjern($brugernavn);
  echo "<form method = post action = $PHP_SELF>";
  echo "<tr><td>  </td><td>brugernavn:</td><td><input name=brugernavn></td></tr>";
  echo "<tr><td>  </td><td></td><td><input type=submit value=\" slet admin \"></td></tr>";
  echo "</form>";
  $bruger->log_ud();
  echo "<form method = post action = $PHP_SELF>";
  echo "<tr><td>  </td><td></td><td><input type=submit value=\" log ud \"></td></tr>";
  echo "</table><br />";
  } else {
  echo "<li>";
  echo "<h2>Quick Links</h2>";
  echo "<li>Log ind for se menuen</li>";
  echo "</li>";
}
?>   
</ul>
    </div>
    <!-- end sidebar -->
    <div style="clear: both;"> </div>
</div>
<!-- end page -->
<hr />
<!-- start footer -->
<div id="footer">
    <p>© 2009 <b>uBogen</b>  •  <i>et Bachelor-projekt fra SDU Kolding</i></p>
</div>
<!-- end footer -->
</body>
</html>


Bruger.php

<?
class bruger{
    var $brugernavn, $kodeord;

    function bruger(){
    if(isset($_SESSION["brugernavn"]) &&
        isset($_SESSION["kodeord"]))
      $this->log_ind($_SESSION["brugernavn"], $_SESSION["kodeord"]);
  }

  function log_ind($brugernavn, $kodeord){
    $bruger_slash = addslashes($brugernavn);
    $kode_slash = addslashes($kodeord);
    $foresp =
      mysql_query("SELECT * FROM Admin ".
          "WHERE username = '$bruger_slash' AND ".
          "password = '$kode_slash'");
    if(mysql_num_rows($foresp) == 1){
      $this->brugernavn = $brugernavn;
      $this->kodeord = $kodeord;
      $_SESSION["brugernavn"] = $this->brugernavn;
      $_SESSION["kodeord"] = $this->kodeord;
      return true;
    } else {
        $this->log_ud();
      return false;
    }
  }

  function log_ud(){
    if($this->logget_ind()){
              unset($this->brugernavn);
              unset($_SESSION["brugernavn"]);
              unset($this->kodeord);
              unset($_SESSION["kodeord"]);
              return true;
    } else
              return false;
  }

  function logget_ind(){
    if(isset($this->brugernavn) && isset($this->kodeord))
      return true;
    else
      return false;
  }

  function opret($brugernavn, $kodeord){
    $bruger_slash = addslashes($brugernavn);
    $kode_slash = addslashes($kodeord);
    $foresp = mysql_query("SELECT * FROM Admin ".
              "WHERE username = '$bruger_slash'");
    if(mysql_num_rows($foresp) != 0)
      return false;
    else{
      mysql_query("INSERT INTO Admin (username, password) ".
          "VALUES ('$bruger_slash', '$kode_slash')");
      return true;
    }
  }

  function fjern($brugernavn){
    $bruger_slash = addslashes($brugernavn);
    $foresp = mysql_query("SELECT * FROM Admin ".
              "WHERE username = '$bruger_slash'");
    if(mysql_num_rows($foresp) != 1)
      return false;
    else{
      mysql_query("DELETE FROM Admin ".
          "WHERE username = '$bruger_slash");
      return true;
    }
  }

  function hent_brugernavn(){
    if($this->logget_ind())
          return $this->brugernavn;
    else
        return "";
  }

  function hent_kodeord(){
    if($this->logget_ind())
        return $this->kodeord;
    else
        return "";
  }

  function ret_kodeord($kodeord){
    if($this->logget_ind()){   
    $bruger_slash = addslashes($this->brugernavn);
    $kode_slash = addslashes($kodeord);
    mysql_query("UPDATE Admin ".
        "SET password = '$kode_slash' ".
        "WHERE username = '" . $bruger_slash . "'");
    $this->kodeord = $kodeord;
    $_SESSION["kodeord"] = $kodeord;
    return true;
      } else
    return false;
  }
}
?>

inc.config.php
<?php
/* Indstillinger : database */
$cfg['mysql']['host'] = 'localhost'; // Host til database
$cfg['mysql']['username'] = 'xxx'; // Brugernavn til database
$cfg['mysql']['password'] = 'yyy'; // Kodeord til database
$cfg['mysql']['database'] = 'zzz'; // Database

/* Redigering ikke nødvendig herunder */
mysql_connect($cfg['mysql']['host'],$cfg['mysql']['username'],$cfg['mysql']['password']) or die(mysql_error());
mysql_select_db($cfg['mysql']['database']) or die(mysql_error());

?>
Avatar billede moddi100 Seniormester
07. maj 2009 - 16:06 #1
Kan du reloade siden uden at se login formen? F.eks. ved at klikke på adresselinjen og trykke 'Enter'
Avatar billede ubog Nybegynder
07. maj 2009 - 16:50 #2
Du mener når jeg er logget ind og reloader? Ja, så bliver jeg promtet om jeg vil sende oplysningerne igen og hvis jeg vælger "ja", så ryger jeg tilbage til siden, uden at skulle logge ind igen først.
Avatar billede moddi100 Seniormester
07. maj 2009 - 19:13 #3
Prøv at gør som jeg skrev. Klik i adresselinjen og tryk enter. Så gensender du ikke passwords.
Avatar billede ubog Nybegynder
07. maj 2009 - 19:20 #4
Ahh misforstod dig lige. Nej, så ryger jeg tilbage til login formen (bruger ikke logget ind)
Avatar billede moddi100 Seniormester
07. maj 2009 - 19:23 #5
Okay, prøv at skrive

print_r($_SESSION);

Øverst i din fil.
Avatar billede moddi100 Seniormester
07. maj 2009 - 19:24 #6
Så skriver du om der kommer noget output fra funktionen. Både før og efter du har logget på
Avatar billede moddi100 Seniormester
07. maj 2009 - 19:27 #7
Kiggede lige i din kode igen, og kan se at fejlen ligger i at du i funktionen logget_ind kun tjekker om brugernavnet (der sættes i log_ind() ) findes lokalt. Det vil sige du tjekker ikke om det findes som en session, hvilket er det korrekte.

function logget_ind(){
  if(isset($_SESSION['brugernavn']) && isset($_SESSION['kodeord']))
    return true;
  else
    return false;
}
Avatar billede ubog Nybegynder
07. maj 2009 - 19:41 #8
Nu har jeg ændret min logget_ind funktion i filen bruger.php - og øverst i login.php står der nu:

<?
session_start();
print_r($_SESSION);
include "inc.config.php";
include "bruger.php";
$bruger = new bruger();
?>

Og både før jeg har logget ind og efter jeg har logget ind står der: Array ( )

som det eneste...
Avatar billede moddi100 Seniormester
07. maj 2009 - 20:14 #9
det er funktionen du skal ændre, da det er der sessions sættes
Avatar billede mysli Nybegynder
13. maj 2009 - 00:49 #10
Problemet er at du ved hver pageload søger POST variabler. Hvis de ikke findes kan brugeren ikke logges ind, og de findes ikke når du prøver at lave noget andet på siden.

if(isset($_POST["brugernavn"]) &&
  isset($_POST["kodeord"])){
    if(get_magic_quotes_gpc()){
        $brugernavn = stripslashes($_POST["brugernavn"]);
        $kodeord = stripslashes($_POST["kodeord"]);
    } else {
        $brugernavn = $_POST["brugernavn"];
        $kodeord = $_POST["kodeord"];
    }
Avatar billede mysli Nybegynder
13. maj 2009 - 11:21 #11
Du kunne rette det ved først at søge postvariabler, og dernæst søge om sessionvariablerne er sat med følgende kode:

if(isset($_POST["brugernavn"]) &&
  isset($_POST["kodeord"])){
    if(get_magic_quotes_gpc()){
        $brugernavn = stripslashes($_POST["brugernavn"]);
        $kodeord = stripslashes($_POST["kodeord"]);
    } else {
        $brugernavn = $_POST["brugernavn"];
        $kodeord = $_POST["kodeord"];
    } elseif (isset($_SESSION['brugernavn']) && isset($_SESSION['brugernavn'])){
$brugernavn = $_SESSION["brugernavn"];
        $kodeord = $_SESSION["kodeord"];
}

Altså tilføjes:
elseif (isset($_SESSION['brugernavn']) && isset($_SESSION['brugernavn'])){
$brugernavn = $_SESSION["brugernavn"];
        $kodeord = $_SESSION["kodeord"];
}
Avatar billede ubog Nybegynder
13. maj 2009 - 12:45 #12
Jeg takker for kommentarerne, men det virker desværre stadig ikke.

Desuden er der vist en syntaksfejl i din foreslåede kode - skal elseif-statementet ikke være før else-statementet?

Altså sådan her:

if(isset($_POST["brugernavn"]) &&
  isset($_POST["kodeord"])){
    if(get_magic_quotes_gpc()){
        $brugernavn = stripslashes($_POST["brugernavn"]);
        $kodeord = stripslashes($_POST["kodeord"]);
    } elseif(isset($_SESSION['brugernavn']) && isset($_SESSION['brugernavn'])){
        $brugernavn = $_SESSION['brugernavn'];
        $kodeord = $_SESSION['kodeord'];
    } else {
        $brugernavn = $_POST["brugernavn"];
        $kodeord = $_POST["kodeord"];
    }

Anyway, så er jeg ved at komme i tidsnød og kunne virkelig godt bruge et simpelt login-system der virker - hvis der er en af jer der kan klar det for mig, ryger alle pointene jeres vej... :)
Avatar billede moddi100 Seniormester
13. maj 2009 - 14:11 #13
Har du prøvet mit forslag?? Det skulle da meget gerne virke.

function logget_ind(){
  if(isset($_SESSION['brugernavn']) && isset($_SESSION['kodeord']))
    return true;
  else
    return false;
}
Avatar billede ubog Nybegynder
13. maj 2009 - 14:37 #14
ja - og det er det samme der sker hver gang...
Avatar billede moddi100 Seniormester
13. maj 2009 - 17:02 #15
Så skal du måske rette lidt i koden:

  echo "<form method = post action = $PHP_SELF>";
  echo "<tr><td>  </td><td>brugernavn:</td><td><input name=brugernavn></td></tr>";
  echo "<tr><td>  </td><td></td><td><input type=submit value=\" slet admin \"></td></tr>";
  echo "</form>";

  $bruger->log_ud();

  echo "<form method = post action = $PHP_SELF>";
  echo "<tr><td>  </td><td></td><td><input type=submit value=\" log ud \"></td></tr>";
  echo "</table><br />";

skal ændres til:

  echo "<form method = post action = $PHP_SELF>";
  echo "<tr><td>  </td><td>brugernavn:</td><td><input name=brugernavn></td></tr>";
  echo "<tr><td>  </td><td></td><td><input type=submit value=\" slet admin \"></td></tr>";
  echo "</form>";
  echo "<form method = post action = $PHP_SELF>";
  echo "<tr><td>  </td><td></td><td><input type=submit value=\" log ud \"></td></tr>";
  echo "</table><br />";
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



IT-JOB

A/S Bryggeriet Vestfyen

IT-Architect /Administrator

AURA A/S

Data Engineer

Capgemini Danmark A/S

Salesforce CTO - Nordics

Socialpædagogernes Landsforbund

IT-forretningskonsulent