Avatar billede Leoking Nybegynder
16. juni 2011 - 10:25 Der er 11 kommentarer

Function problem

Hvad mangler jeg i denne function?
Notice: Undefined variable: session in **URL** on line 68 Fatal error: Call to a member function Admin() on a non-object in ** line 68

63 function Admin(){
64    return ($this->status == 2)? TRUE : FALSE;
65
66} 
67
68 if(!$session->Admin()){
69
70 header("Location: brugerside.php");
71 exit();
72
73}

På forhånd tak :)
Avatar billede Slettet bruger
16. juni 2011 - 15:32 #1
Prøv smid følgende linje ind imellem linje 63 og 64:[code]
  global $session;[/code]
Når du arbejder inde i en funktion, befinder du dig ikke længere det globale scope, og derfor bliver du nød til at "globaliserer" de variabler du vil bruge fra det globale scope, inde i din funktion.

Den ene metode er ovenstående, hvor man anvender keywordet global.
Den anden metode er at bruge arrayet $GLOBALS.

Evt. tag et kig på følgende side: http://php.net/manual/en/language.variables.scope.php
Avatar billede Leoking Nybegynder
16. juni 2011 - 15:53 #2
Har kigget på siden har ikke lige fundet noget der kunne hjælpe :/ desværre.

får stadig
Notice: Undefined variable: session in ****URL**** on line 66 Fatal error: Call to a member function Admin() on a non-object in ****URL**** on line 66
Avatar billede Leoking Nybegynder
16. juni 2011 - 15:54 #3
function Admin(){
    global $session;
  return ($this->status == 2)? TRUE : FALSE;

}

if(!$session->Admin()){

header("Location: brugerside.php");
exit();

}


her er koden .
Avatar billede Slettet bruger
16. juni 2011 - 16:22 #4
Okay den kode i #3 giver mere mening..
Med den kode, ligger problemet ikke inde i funktionen og du kan derfor fjerne linjen "global $session" igen.

I stedet tyder det på at din variable $session er tom.
Kan dog ikke fortælle hvad der præcist går galt, før jeg får mere kode.
Avatar billede Slettet bruger
16. juni 2011 - 16:24 #5
Må være lidt træt.. den første kode og koden i #3 er jo identiske pånær "global"-delen...

Vil ud og få mig lidt koldt vand i hovedet nu!
Avatar billede Leoking Nybegynder
16. juni 2011 - 16:29 #6
:D som du vil hehe .. Hehe .. kender det sku godt ;)

Her er koden så.
på admin.php

<?php

/*ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);*/

session_start();
if(!session_is_registered("myusername")){
header("location:index.php");
exit();
}
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Golfen - Brugerside</title>
<link href="../layout/golfen.css" rel="stylesheet" type="text/css" />
<script src="../Scripts/swfobject_modified.js" type="text/javascript"></script>
</head>

<body>
<div class="wrapper">
<div id="container">




<div id="top">
</div>

<?php
/*
function Admin(){
    global $session;
  return ($this->status == 2)? TRUE : FALSE;

}

if(!$session->Admin()){

header("Location: brugerside.php");
exit();

}*/

$conn = mysqli_connect() or die (mysqli_error($conn));

?>
<div id="indhold">
<?php

    //logout
echo '<form method="post" action="logout.php">';
echo '<input type="submit" value="Logout" /><br /><br /><br />';


//Forbindelse til databasen

$conn = mysqli_connect() or die (mysqli_error($conn));


?>
<table width="100%" border="0" cellpadding="3">
  <tr>
    <td>
    </td>
    <td>
   
   
    <?php
echo "Adminstrator";
//logout
echo '<form method="post" action="logout.php">';
echo '<input type="submit" value="logout" /><br /><br /><br />';
echo "<h3>Siderne (Forside + Baner)</h3>";


   
    //Database informationer til forsiden.
$conn = mysqli_connect() or die (mysqli_error($conn));

$query = mysqli_query($conn,"SELECT * FROM golf") or die (mysqli_error($conn));
$result = mysqli_fetch_array($query) or die (mysqli_error($conn)); {


echo "<strong>Forsiden:</strong><br />";
echo            $result['indhold'];
echo            "<br /><br />";
echo "<strong>Baner:</strong><br />";
echo      $result['baner'];
echo      "<br /><br />";
echo "<a href=\"edit1.php?id=".$result['id']."&type=golf\">Ret Siderne</a><br>";

}
mysqli_close($conn);



?>   
<br />
<br />
<br />
<br />
<h3>Udstyr siden:</h3>
<?php

//Forbindelsen til databasen.
$conn = mysqli_connect() or die (mysqli_error($conn));


//henter fra databasen.
$minQuery="SELECT * FROM udstyr";

$resultat=mysqli_query($conn, $minQuery);
while ($row = mysqli_fetch_array($resultat)){ //behander resultatet.


echo "<br /><strong>Navn p&aring; varen:</strong><br />";
echo            $row['navn'];
echo              "<br /><br />";
echo "<strong>Beskrivelsen:</strong><br />";
echo            $row['beskrivelse'];
echo              "<br /><br />";
echo "<strong>Pris:</strong><br />";
echo            $row['pris'];
echo              "<br /><br />";
echo "<a href=\"edit2.php?id=".$row['id']."&type=golf\">Ret varen</a><br>";
echo "<a href=\"edit/delete.php?id=".$row['id']."&type=golf\">Slet varen</a><br>";

echo "<br /><br />";

}
   

include('upload.php');
?>
  </td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>



</div>
</div>
</div>

<script type="text/javascript">
swfobject.registerObject("FlashID");
</script>
body>
</html>
Avatar billede Slettet bruger
16. juni 2011 - 16:39 #7
Okay problemet ligger i at din funktion Admin() er en normal funktion og ikke en funktion i en klasse.
Derfor kan du ikke tilgå funktionen som en "method" ($session->Admin()) og inde i funktionen kan du heller ikke bruge $this
Avatar billede Leoking Nybegynder
17. juni 2011 - 08:32 #8
Hvad gør jeg så?
Avatar billede Slettet bruger
17. juni 2011 - 12:40 #9
Det tyder jo lidt på du har en "Session"-klasse et sted, som du bare ikke får brugt i dette tilfælde.
Hvis du har sådan en, skal den loades og så skal din Admin()-funktion sættes derind, og så skal du kalde klassen med din $session-variable.

Hvis du IKKE har en klasse, selvom alt tyder på du må have en et sted, så skal du bruge $_SESSION-arrayet til at tilgå dine sessions.

F.eks. skal følgende:
$this->status

Være noget lignende:
$_SESSION["status"]
Avatar billede Leoking Nybegynder
17. juni 2011 - 13:54 #10
Vil du skrive et eksempel på hvordan jeg kan skrive det op med det andet jeg har  ??? ..
Avatar billede Slettet bruger
17. juni 2011 - 16:32 #11
Da jeg ikke har noget kode om en evt. Session-klasse, så kan jeg kun lave et passende eksempel uden brug af klasser.

Først sættes nogle sessions når man logger ind:
<?php
session_start();

$_SESSION["user_status"] = 2; // 1=Alm. Bruger; 2=Administrator
$_SESSION["user_id"] = 1; // Brugerens ID nr.
?>

Dernæst funktionen der tjekker om man er logget ind som admin:
<?php
session_start();

function isAdmin() {
  return ($_SESSION["user_status"] == 2) ? true : false;
}
?>

Og sidst, men ikke mindst, hvordan man bruger funktionen:
<?php
session_start();

// Først tjekker vi at man faktisk ER logget ind
if(!isset($_SESSION["user_status"]) || !isset($_SESSION["user_id"])) {
  print "Du er ikke logget ind!;
  exit;
}

// Dernæst tjekker vi om man er alm. bruger eller admin
if(isAdmin()) {
  print "Du er logget ind som admin";
} else {
  print "Du er logget ind som alm. bruger";
}
?>

Håber ovenstående kode eksempler kan bruges :-)
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