09. november 2006 - 15:07Der er
164 kommentarer og 2 løsninger
Loginsystem for flere brugere
Har prøvet at spørge et par gange, men ingen har endnu kunnet løse dette spørgsmål. Så der er ikke andet end at prøve igen om der skulle være en som forstår at løse dette.
Spørgsmålet drejer sig om at der er flere brugere som hver især har adgang til sin egen admin side, som de er blevet tildelt af administratoren. ( hvordan får jeg det til at virke )
Som det er nu, kan login systemet kun åbne den side som er forudbestemt i koden.
For at forstå det noget bedre ligger der en beskrivelse og forklaring på dette link.
duhar en side hvor der indtastes brugernavn og adgangskode. når brugeren så trykker login bliver de sendt til en anden side. på denne side tjekker du hvem der er logget ind
når det er tjekket skal du tjekke i databasen hvilket adgangs nr. personen har derefter laver du en række if sætninger som f.eks kan se sådan ud
if ($adgang == 1) { header("Location: index.php"); }
så bliver alle der logger ind og som har adgang nr. 1 sendt til index.php
==================================================================================== zynzz: Det er fint at du ligger en kode, skal den erstattes med min login kode eller hvad. SÆT DINE SESSIONS HER Hvad med at vide dette så jeg kan se hvad du mener.
{ header("Location: index.php"); }
if ($adgang == 2) { header("Location: forside.php"); }
if ($adgang == 2) { header("Location: menu_2.php"); } ?>
du mangler at tjekke hvilken adgangs nr. den bruger der logger ind har. lav en forspørgsel i din tabel hvor du henter adgang ud for den bruger der er logget ind. prøv dette.
$get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
if ($adgang == 1) { header("Location: index.php"); }
if ($adgang == 2) { header("Location: forside.php"); }
if ($adgang == 3) { header("Location: menu_2.php"); }
$get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
if ($adgang == 1) { header("Location: index.php"); }
if ($adgang == 2) { header("Location: forside.php"); }
if ($adgang == 3) { header("Location: menu_2.php"); }
efter du har indtastet brugernavn og password og trykker login bliver du så sendt til siden med denne kode som er i forrige indlæg. Hvis du ikke gør det skal du sikre dig du gør det og hvis/når du gør det så prøv at indsætte denne kode på siden i stedet så tager vi den derfra
$get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
echo"adgang = $adgang";
når du så logger ind skulle du gerne få en side hvor der står
adgang = (her skal så stå det nr. for den bruger der er logget ind)
$get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
$get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
$get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
$get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
he he jeg tror jeg er træt men tror jeg har fundet fejlen nu prøv dette <? $postbruger = $_POST['brugernavn']; $postadgang = $_POST['adgangskode']; $_SESSION['brugernavn'] = $postbruger; $_SESSION['adgangskode'] = $postadgang;
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
$resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang'");//Spørger efter ID $number = mysql_num_rows($resultat);//Tæller antaller af resultater
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
if ($adgang == 1) { header("Location: index.php"); }
if ($adgang == 2) { header("Location: forside.php"); }
if ($adgang == 3) { header("Location: menu_2.php"); } } else { echo"Du er ikke logget ind"; } ?>
derefter indsætter du dette øverst på alle sider du vil beskytte
<? session_start(); if(!$_SESSION['inde'] == 1) {//Hvis brugeren ikke er logget ind header("Location: ../index.html");//Sender brugeren videre til login siden exit;//Sørger for at resten af koden, ikke bliver udført } include"../connect.php"; //herunder sætter du alt din kode ?>
$resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang'");//Spørger efter ID $number = mysql_num_rows($resultat);//Tæller antaller af resultater
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
if ($adgang == 1) { header("Location: index.php"); }
if ($adgang == 2) { header("Location: forside.php"); }
if ($adgang == 3) { header("Location: menu_2.php"); } } else { echo"Du er ikke logget ind"; } ?>
og på alle sider du vil beskytte skal dette stå øverst i koden (husk at stien til connect filen skal rettes til alt efter hvor filen med denne kode ligger i)
<? session_start();
if(!$_SESSION['inde'] == 1) {//Hvis brugeren ikke er logget ind header("Location: ../index.html");//Sender brugeren videre til login siden exit;//Sørger for at resten af koden, ikke bliver udført } include("../Connections/cms.php"); //herunder sætter du alt din kode ?>
det er fordi du mangler at logge ind til databasen. //Connection til databasen $link = mysql_connect("localhost", "BRUGERNAVN", "PASSWORD") or die("Could not connect"); mysql_select_db("DATABASE") or die("Could not select database");
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
prøv det her: $get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '".$_SESSION['brugernavn']."' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT adgang FROM brugere WHERE brugernavn = '".$_SESSION['brugernavn']."' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); $adgang = $show[adgang];
<? $get = mysql_query("SELECT * FROM brugere") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); { $brugernavn = $show[brugernavn]; $adgang = $show[adgang];
echo"$brugernavn - $adgang<br>"; } ?> så skulle du gerne få en liste med alle brugernavnene i databsen og efter hvert navn skal deres adgangs nr. stå
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT * FROM brugere") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); { $brugernavn = $show[brugernavn]; $adgang = $show[adgang];
glem et øjblik login systemet og bare lav en ny side som du kan kalde f.eks test.php. i denne fil indsætter du kun dette
<? include("../Connections/cms.php"); $get = mysql_query("SELECT * FROM brugere") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); { $brugernavn = $show[brugernavn]; $adgang = $show[adgang];
echo"$brugernavn - $adgang<br>"; } ?>
upload den og åben den i din browser så skulle du gerne få en liste med alle brugernavnene i databsen og efter hvert navn skal deres adgangs nr. stå
Vise dette uanset hvilken admin_1 eller admin_2 eller admin_3 jeg logger ind med det samme hele tiden: admin_1 - 1
<?php session_start(); include("../Connections/cms.php"); $get = mysql_query("SELECT * FROM brugere") or die(mysql_error()); // henter adgang for bruger der er logget ind $show = mysql_fetch_array($get); { $brugernavn = $show[brugernavn]; $adgang = $show[adgang];
heh prøv at bruge det her i stedet for: <?php session_start(); include("../Connections/cms.php"); $get = mysql_query("SELECT * FROM brugere") or die(mysql_error()); // henter adgang for bruger der er logget ind while ($show = mysql_fetch_array($get)) { $brugernavn = $show[brugernavn]; $adgang = $show[adgang];
$resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang' $number = mysql_num_rows($resultat);//Tæller antaller af resultater
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind while ($show = mysql_fetch_array($get)) {
$adgang = $show[adgang];
if ($adgang == 1) { header("Location: index.php"); }
if ($adgang == 2) { header("Location: forside.php"); }
if ($adgang == 3) { header("Location: menu_2.php"); } } else { echo"Du er ikke logget ind"; } ?>
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\admin_sider.php on line 11
$resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang' $number = mysql_num_rows($resultat);//Tæller antaller af resultater
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind while ($show = mysql_fetch_array($get)) {
$adgang = $show[adgang];
if ($adgang == 1) { header("Location: index.php"); }
if ($adgang == 2) { header("Location: forside.php"); }
if ($adgang == 3) { header("Location: menu_2.php"); } } } else { echo"Du er ikke logget ind"; } ?>
nej du kan godt slette test.php nu nu skal du gå tilbage og tænke på login systemet igen. den side du taster login oplysningerne ind på og derefter trykker login den side sender til en side og den side den sender til skal indeholde den kode jeg har skrevt her michaeltryl 10/11-2006 13:47:13
Mit login sender mig til denne side: admin_sider.php I admin_sider.php har jeg lagt koden ind: 10/11-2006 13:47:13
Får så denne linje fejl:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\admin_sider.php on line 11
$resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang' $number = mysql_num_rows($resultat);//Tæller antaller af resultater
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind while ($show = mysql_fetch_array($get)) {
Får samme fejl ved at prøve dem begge: $_SESSION['inde'] = "1"; $_SESSION['inde'] = '1';
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\admin_sider.php on line 12
tror jeg har fundet fejlen nu der er en fejl i denne linie $resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang'
$resultat = mysql_query("SELECT Id FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang'"); $number = mysql_num_rows($resultat);//Tæller antaller af resultater
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind while ($show = mysql_fetch_array($get)) {
prøv lige at uploade filen til dit websted da stien C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\admin_sider.php ikke er en webadresse men stien til en fil på din computer
$tael = mysql_query("SELECT COUNT(*) AS antal FROM brugere WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang'") or die(mysql_error()); while ($a = mysql_fetch_array($tael)) {
$bruger = $_SESSION['brugernavn']; $get = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter adgang for bruger der er logget ind while ($show = mysql_fetch_array($get)) {
nu har jeg tjekket det hele igennem igen og fandt endnu en lille fejl som jeg havde glemt at tjekke for før. det er vist for sent at sige 3. gang er lykkens gang, men prøv nu lige det her jeg vil næsten tro den er der nu
switch ($adgang) { case 1: header("Location: index.php"); break; case 2: header("Location: forside.php"); break; case 3: header("Location: menu_2.php"); break; case else: echo "Du er ikke logget ind"; break; } ?> der er rigtig mange variable i spil. Jeg har ryddet en del op i dem, lavet nogle lidt mere begrænsede udtræk, og så ellers valgt det rette element fra det array der bliver hentet i recordsettet....
switch ($adgang) { case 1: header("Location: index.php"); break; case 2: header("Location: forside.php"); break; case 3: header("Location: menu_2.php"); break; case else: echo "Du er ikke logget ind"; break; } ?>
michaeltryl: Vedr. svar: 11/11-2006 00:30:50 > Stadig det samme: Du er ikke logget ind ************************************************************************************ ellebaek: Vedr. svar: 11/11-2006 00:38:35 > Får denne line fejl.
Parse error: parse error in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\admin_sider.php on line 30
$query = "SELECT adgang FROM `brugere` WHERE brugernavn = '$postbruger' AND adgangskode = '$postadgang'"; echo $query . "<br>"; $resultat = mysql_query($query);
$number = mysql_num_rows($resultat);//Tæller antaller af resultater if($number == 1) { echo "Der er fundet en række<br>"; $_SESSION['inde'] = 1; $_SESSION['brugernavn'] = $postbruger; $_SESSION['adgangskode'] = $postadgang;
$row = mysql_fetch_array($resultat); $adgang = $row[0]; echo "Adgang på følgende niveau: " . $adgang . "<br>"; } else { echo "Der er dette antal records: " . $number; }
switch ($adgang) { case 1: header("Location: index.php"); break; case 2: header("Location: forside.php"); break; case 3: header("Location: menu_2.php"); break; case else: echo "Du er ikke logget ind"; break; } ?>
Jeg tror muligvis det er fordi det er en forkert fil der er ændret i, har ikke rigtig styr på hvad der er hvad... men prøv lige denne kode engang... istedet for det du postede før...
<?php require_once('../Connections/cms.php'); ?> <?php // *** Validate request to login to this site. session_start();
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_POST['brugernavn'])) { $postbruger = $_POST['brugernavn']; $postadgang = $_POST['adgangskode'];
$query = "SELECT adgang FROM `brugere` WHERE brugernavn = '".$postbruger."' AND adgangskode = '".$postadgang."'"; echo $query . "<br>"; $resultat = mysql_query($query);
$number = mysql_num_rows($resultat);//Tæller antaller af resultater if($number == 1) { echo "Der er fundet en række<br>"; $_SESSION['inde'] = 1; $_SESSION['brugernavn'] = $postbruger; $_SESSION['adgangskode'] = $postadgang;
$row = mysql_fetch_array($resultat); $adgang = $row[0]; echo "Adgang på følgende niveau: " . $adgang . "<br>"; } else { echo "Der er dette antal records: " . $number; }
switch ($adgang) { case 1: header("Location: index.php"); break; case 2: header("Location: forside.php"); break; case 3: header("Location: menu_2.php"); break; default: echo "Du er ikke logget ind"; break; } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Login</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> <!-- .style2 {color: #FFFFFF} --> </style> </head>
SELECT adgang FROM `brugere` WHERE brugernavn = 'admin_2' AND adgangskode = '1234' Der er fundet en række Adgang på følgende niveau: 2
Warning: Cannot modify header information - headers already sent by (output started at C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php:13) in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 36
okay...nu er jeg ved at være med i hvad det er der skal ske...
det kan ikke betale sig at gøre det med login delen, med en switch eller if eller tilsvarende.. i stedet vil jeg anbefale dig at du laver et felt mere i databasen, som indeholder oplysning om hvilken side brugeren skal sendes til når han er logget ind, altså index.php, forside.php, menu_2.php etc...
kald dette felt fx: loginside.
så skal du rette login siden til dette:
<?php require_once('../Connections/cms.php'); ?> <?php // *** Validate request to login to this site. session_start();
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_POST['brugernavn'])) { $postbruger = $_POST['brugernavn']; $postadgang = $_POST['adgangskode'];
$query = "SELECT adgang, loginside FROM `brugere` WHERE brugernavn = '".$postbruger."' AND adgangskode = '".$postadgang."'"; $resultat = mysql_query($query);
Nu bliver du så sendt til den side som ligger i databasen...
herefter skal du rette disse linier: if ($row['adgang'] != "2") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit;
til: if ($row['adgang'] != 2) { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit;
dette da der er forskel på om $row['adgang'] er en streng eller et tal, og i dit tilfælde er det et tal... Så er vi vidst ved at være ved målet tror jeg:-)
Nej det dur ikke som du foreslå. Det skal være som det er i myadmin med feltet adgang for hver bruger. Det er så tallet i feltet der bestemmer hvilken administrationsside vedkommen må få adgang til.
Jeg har en fil lavet hvor topadministrator kan se brugernavn, password, adgangs nr. På denne side kan administratoren skifte adgangsnr. ud for oprettet bruger.
Hver bruger kan også på sin admin side selv skifte password.
Så det skal være sådan at når brugeren logger sig på med tildelt adgangs nr. kommer bruger kun til den side som indeholder det rette adgangs nr.
okay... men det er et dynamisk antal sider der er eller hvad..?
hvis det er tilfældet, så ville jeg vælge at lave en tabel mere der hedder fx: side_adgang
denne tabel indeholder: - sidenavn - adgang
så får du altså en tabel der har fx. disse oplysninger: index.php 1 loggetind.php 2 menu_2.php 3
og sådan... hvis du gør det, så bliver det stadig til at arbejde med.. så skal du rette disse linier kode her fra det kode jeg gav dig før: if (isset($_POST['brugernavn'])) { $postbruger = $_POST['brugernavn']; $postadgang = $_POST['adgangskode'];
$query = "SELECT adgang, loginside FROM `brugere` WHERE brugernavn = '".$postbruger."' AND adgangskode = '".$postadgang."'"; $resultat = mysql_query($query);
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 27
Får denne fejlmeddelse vedr. koden:12/11-2006 13:05:31 PS: Kan ikke se hvor i koden du bruger den nye oprettet tabel i phpmyadmin som du selv foreslog > side_adgang
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 15 Login failed Log på Brugernavn: Adgangskode:
SELECT sidenavn FROM side_adgang WHERE adgang = 2 Warning: Cannot modify header information - headers already sent by (output started at C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php:25) in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 30
hmm... mystisk... for den fejl du får nu, den betyder at den godt kunne finde ud af det... prøv at slette echo $query; igen.. og så kør siden en gang mere, og så post fejlen her..
Så er den samme fejl igen der, det kører ikke rigtig.
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 15 Login failed
jeg bliver nødt til at se hele koden for dit logincheck på admin siderne..
Og den fejl du fik der til sidst det er altså denne linie den har problemer med: $query = "SELECT adgang FROM `brugere` WHERE brugernavn = '".$postbruger."' AND adgangskode = '".$postadgang."'";
så prøv her at smide en echo $query; med og så se hvad den skriver ud til dig...!
$query = "SELECT sidenavn FROM side_adgang WHERE adgang = " . $adgang; echo $query; $result = mysql_query($query);
Denne meddelse kommer på siden login
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 15 Login failed ************************************************************************************* Koden vedr. admin siden for bruger med adgang 1
<?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['MM_Username']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); $row=mysql_fetch_array($query);
if ($row['adgang'] != "1") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
samtidig skal du rette starten af de beskyttede sider fra det her: <?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['MM_Username']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); $row=mysql_fetch_array($query);
if ($row['adgang'] != "1") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
til:
<?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['brugernavn']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); if (mysql_num_rows($query) != 1) { echo "Du har ikke adgang"; die(); } $row=mysql_fetch_array($query);
if ($row['adgang'] != "1") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
//*************************************************************** herefter skal du rette det der står på de beskyttede sider, altså det her: ****
<?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['MM_Username']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); $row=mysql_fetch_array($query);
if ($row['adgang'] != "1") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
//************************************************' Det skal rettes til det her: <?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['brugernavn']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); if (mysql_num_rows($query) != 1) { echo "Du har ikke adgang"; die(); } $row=mysql_fetch_array($query);
if ($row['adgang'] != "1") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
Har nu rettet begge dele. Får nu denne meddelse på login siden.
SELECT adgang FROM `brugere` WHERE brugernavn = 'admin_1' AND adgangskode = '1234' Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 16
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 17 Login failed
sidste forsøg for i aften... forstår simpelt hen ikk at du får en fejl i linie 16... det giver ingen mening, linie 17 kan jeg godt se problemet med som sådan, og så alligevel ikke... Dog kan det måske være noget med feltet adgang. jeg læser at dette felt er af typen LEVEL? den datatype kender jeg ikke.. men det kan måske være det der gør det... prøv eventuelt at lave den om til Integer. men prøv at rette login.php til: <?php require_once('../Connections/cms.php'); ?> <?php // *** Validate request to login to this site. session_start();
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_POST['brugernavn'])) { $postbruger = $_POST['brugernavn']; $postadgang = $_POST['adgangskode'];
$query = "SELECT adgang FROM brugere WHERE brugernavn = '".$postbruger."' AND adgangskode = '".$postadgang."'"; $resultat = mysql_query($query);
$number = mysql_num_rows($resultat);//Tæller antaller af resultater
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 15 Login failed
med udgangspunkt i seneste kode fra ellebaek: <?php require_once('../Connections/cms.php'); ?> <?php // *** Validate request to login to this site. session_start();
$query = "SELECT adgang FROM brugere WHERE brugernavn = '".$postbruger."' AND adgangskode = '".$postadgang."'"; $resultat = mysql_query($query) or die($query."<br>".mysql_error());//tilføjet or die()
$number = mysql_num_rows($resultat);//Tæller antaller af resultater
har du en mappe der hedder "Connections" og er der en fil i den mappe der hedder "cms.php"? Hvor ligger mappen "Connections" i forhold til mappen "admin"? Har du tjekket at der står nøjagtig det samme i mappenavn og filnavn, som der står i "login.php", mht. store og små bogstaver mm? Hvordan ser "cms.php" ud, hvis du har den?
Siden jeg kalder ser det første stykke kode sådan ud.
<?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['MM_Username']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); $row=mysql_fetch_array($query);
if ($row['adgang'] != "1") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
den side du kalder skal det første stykke kode altså se ud som:
<?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['brugernavn']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); $row=mysql_fetch_array($query);
if ($row['adgang'] != 1) { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
Ligger dine filer ikke i roden, eller ligger de i en undermappe?
ellebaek: Den kode som du lige har forelagt og også her, hvor jeg skulle rette koden til: 12/11-2006 22:22:57
Dette er afprøvet og ved at indsætte din kode kan jeg ikke kalde siden: Du har ikke adgang
Ved min kode virker det. Derved kan man se bort fra din kode vedr. admin sider ikke kan bruges.
Fejlen ligger i koden login og den kan man ikke finde ud af.
Det bedste ville være hvis en selv havde install. en local server med MySQL, Apache og phpMyAdmin og derved kunne afprøve den forespurgte løsning, inden den blev sendt ud.
men! det der fanger min opmærksomhed lige nu er at du åbenbart ikke har rettet filerne som vi beder dig om! $user = $_SESSION['MM_Username']; denne linie vil ikke give dig noget resultat med de linier vi arbejder med.. Henviser her til: 12/11-2006 22:39:05 da der ingen steder bliver sat sessionen MM_Username hvilke filer arbejder du med? Lægger du dem et sted så de kan downloades, så kan det rettes!
men jeg henviser igen til min kommentar: 12/11-2006 22:39:05 Dog kan det måske være noget med feltet adgang. jeg læser at dette felt er af typen LEVEL? den datatype kender jeg ikke.. men det kan måske være det der gør det... prøv eventuelt at lave den om til Integer.
$query = "SELECT adgang FROM brugere WHERE brugernavn = '".$postbruger."' AND adgangskode = '".$postadgang."'"; $resultat = mysql_query($query) or die($query."<br>".mysql_error());//tilføjet or die()
$number = mysql_num_rows($resultat);//Tæller antaller af resultater
Den virker ikke =============== ************************************************************************************* Her er dig kode til admin sider:
<?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['brugernavn']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); $row=mysql_fetch_array($query);
if ($row['adgang'] != 1) { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
Den virker heller ikke. ======================= ************************************************************************************* Begge koder er afprøvet sammen for at være sikker. ************************************************************************************* Prøv om du kan kalde en side med koden fra login på din lokal server, hvor en side er tildelt en adgangs nr.
ellebaek: Med afprøvvelse af denne kode vedr. login.php, indlæg: 13/11-2006 09:03:35 ************************************************************************************ Og denne kode på admin siden:
<?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['MM_Username']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); $row=mysql_fetch_array($query);
if ($row['adgang'] != "1") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{ ************************************************************************************* Så har jeg prøvet at logge mig på med admin_1, admin_2, admin_3 Ved admin_1 får jeg denne meddelse: =============================================================================== SELECT adgang FROM brugere WHERE brugernavn = 'admin_1' AND adgangskode = '1234' No Database Selected ==================== Samme besked ved admin_2, admin_3 bortset fra at der så står hvilken admin som logger på. =============================================================================== Så den har kontakt med databasen, men på en eller anden måden fanger den ikke side_adgang i databasen som fortæller hvilken side der skal logges ind på. ===============================================================================
Efter dette får jeg denne meddelse på login siden.
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 29
godt så... nu er der en fejl i den ene sql-sætning. Altså det er en syntax fejl hvilket vil sige at enten findes et felt ikke, eller også er det forkerte variabel-typer der er sat i sql-en!
$query = "SELECT sidenavn FROM side_adgang WHERE adgang = " . $row[0]; $result = mysql_query($result);
//Det er denne linie der giver fejlen. Altså er fejlen i sql-en oven for. if (mysql_num_rows($result) == 1) {
Nu skal du tjekke i mySQL-admin, og jeg skal have de rigtige oplysninger. dette på alle spørgsmål. 1. Er du sikker på at der er en tabel der hedder side_adgang? 2. I denne tabel, er der et felt der hedder sidenavn? 3. hvilken variabel-type er dette felt? 4. Er der i samme tabel et felt der hedder adgang? 5. hvilken type er dette felt? 6. hvilken type har feltet adgang i tabellen brugere ?
side_adgang.adgang's type skal være den samme som brugere.adgang.
Det skal siges at jeg har testet på min egen server herhjemme, og har ingen problemer med at få det til at virke.!
ville det ikke være bedre at ændre: $query = "SELECT sidenavn FROM side_adgang WHERE adgang = " . $row[0]; til: $query = "SELECT sidenavn FROM side_adgang WHERE adgang = '$adgang'";
du lægger jo row[0] over i $adgang lige før du opretter din session. Der er sat ' ' om fordi typen i databasen er sat til varchar(255), hvilket måske ikke ville være det rigtige hvis det skal være tal der skal bruges til adgang..
bare for sjov og narrestreger så tag og ændre den her: $result = mysql_query($result); til det her: $result = mysql_query($result) or die($query."<br>".mysql_error());
Det gør det en hel del nemmere at finde fejl i din sql-sætning, hvis det er der den er gal.
godt så... dette giver egentlig sig selv at det så giver fejl. også derfor mit system virkede og dit ikke gjorde. Jeg har arbejdet med at adgang var af typen Int, hvilket i hvert fald i min verden giver noget mere mening. det var også det jeg bad dig om her: 12/11-2006 22:39:05...
men det du skal gøre nu for at få det til at fungere er: ret denne linie: $query = "SELECT sidenavn FROM side_adgang WHERE adgang = " . $row[0]; til: $query = "SELECT sidenavn FROM side_adgang WHERE adgang = '" . $row[0] . "'";
dette da du arbejder med varchar(255) som datatype, i stedet for int's...
det var da mystisk... nu har jeg så igen ikke bedt den om at smide et svar... ved ikke helt hvad der sker for min computer... men det var i hvert fald ikke meningen...
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 30
PS: Er det bedre at rette varchar(255) som datatype, til int's... Hvis ja, hvilke tabeller og felter skal så rettes.
alle de steder hvor du kun bruger tal, kan du uden problemer ændre til int. Hvis du skal bruge tekst så er det varchar, men det er måske ikke nødvendigt at bruge 255 tegn alle steder..
Har nu også rettet tabellen brugere og side_adgang >adgang til INT i phpmyadmin.
Får igen denne meddelse på login siden.
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmer\Apache Group\Apache2\htdocs\websted\admin\login.php on line 30
PS: Måske er der så noget som skal rettes tilbage efter at phpmyadmin er blevet rettet.
/** * @version $Id: index.php 8701 2006-10-01 19:10:07Z stingrey $ * @package * @copyright Copyright (C) 2006 All rights reserved. */ // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); }
if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles session_unregister('MM_Username'); session_unregister('MM_UserGroup');
Prøv lige at ændre den her: $result = mysql_query($result); til det her: $result = mysql_query($query) or die($query."<br>".mysql_error()); det vil sikkert hjælpe en del hvis du bruger den rigtige variabel i mysql_query() ;o)
dete r ikke så lang tid siden jeg hjalp enmed faktisk samme problem så det kan lade sig gøre. jeg har fulgt lidt med på sidelinien den sidste tid og har set at sw_red_6 og ellebaek har gjort et stort forsøg på at hjælpe uden held. jeg har på fornemmelsen der er en meget lille fejl som ingen af os kan se et eller andet sted selvom vi har været det hele igennem flere gange. mit forslag vil være nu at starte helt fra bunden igen evt. efter følgende opskrift. 1. lave sådan alle brugere og deres adgangs nr. bliver hentet ud.(test.php) 2. lade login siden (den hvor brugernavn og password skrives i inden login), sende til test.php 3. lave test.php om sådan den henter brugeren der logges ind.
når det virker kan test.php laves om til at tjekke om der må logges ind og session kan sættes
Jeg synes selv det lyder som en god ide, men er ikke helt med på om i har været igennem det, da jeg ikke har fået læst alle indlæg.
ok den, efter at jeg havde rettet det til efter din henvisning d. 15/11-2006 11:06:41 kom det til at stå i min browser efter at jeg prøvede at logge ind, men blev stadig på login siden.
har du nogen steder på login siden hvor du tjekker "accesscheck"? Det ser nemlig ud til at du i stedet for at gå til siden /admin/index.php, bliver på login.php
$query = "SELECT adgang FROM brugere WHERE brugernavn = '".$postbruger."' AND adgangskode = '".$postadgang."'"; $resultat = mysql_query($query) or die($query."<br>".mysql_error());//tilføjet or die()
$number = mysql_num_rows($resultat);//Tæller antaller af resultater
hmm... jeg er ret sikker på at der hvor fejlen er nu ligger i den side du bliver sendt til. altså i admin.php osv...
du skriver tidligere at du her denne kode i toppen af denne side: ?php session_start();
require_once('../Connections/cms.php');
$user = $_SESSION['MM_Username']; $query = mysql_query("select * from brugere WHERE brugernavn = '$user'") or die (mysql_error()); $row=mysql_fetch_array($query);
if ($row['adgang'] != "1") { echo "<p style=\"color: #ff0000; margin: 0px; font-weight: bold;\">Du har ikke adgang hertil</p>"; exit; }else{
du benytter ikke længere sessionen ved navn MM_Username.
derfor skal du alle steder rette: $_SESSION['MM_Username'] til: $_SESSION['brugernavn']
Hejsa: Vi stopper her, for nu bliver det blandet for meget sammen. Har heller ikke en fil som hedder admin.php. Desværre er den blevet grebet forkert an fra starten med for mange løse skud.
Takker for alle kommentar i denne tråd.
Synes godt om
Ny brugerNybegynder
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.