14. januar 2007 - 13:15Der er
94 kommentarer og 1 løsning
Header i php5
Jeg har et par gange skulle bruge header, men aldrig fået det til virke. Dur det ikke i php5?
Jeg har fundet noget login på nettet, som tilsyneladende virker, hvis jeg laver det på én side, men skal det spille sammen med andre sider, kan jeg ikke få det til at virke.
Se understående, hvis jeg ikke er logget ind, skal jeg smides videre til ny_admin.php - men det sker ikke, siden "dør" - eller den sender mig ikke til ny_admin.php og den viser heller ikke resten af koden.
Hvad gør jeg galt?
<? session_start(); if(!$_SESSION['loget_in'] == 1) {//Hvis brugeren ikke er logget in header("Location: /ny_admin.php");//Sender brugeren videre exit;//Sørger for at resten af koden, ikke bliver udført }
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
<? session_start(); if(!$_SESSION['loget_in'] == 1) {//Hvis brugeren ikke er logget in header("Location: ny_admin.php");//Sender brugeren videre exit;//Sørger for at resten af koden, ikke bliver udført }
Tak for dit svar. Jeg har også prøvet at fjerne "/", men det hjælper lige meget. Jeg har også prøvet at lave hele stien, http://www.domæne.dk/ny_admin.php, det hjælper heller ikke.
Det underlige er, at laver jeg det helt enkelt på en testside, virker det heller ikke... <? header("Location: http://www.et-eller-andet-domæne.dk"); exit; ?>
Det er derfor, jeg tænker, om header ikke skulle virke med php5? Er vi ikke enige om, at at hvis det er det eneste, der er på siden, skal den bare med det samme smide mig videre til et-eller-andet-domæne.dk?
Men den skal lægges i header, ikke? - så dur den ikke, da det skal bruges med noget login - hvis der ikke er logget ind, skal man sendes til login siden, ellers skal resten af koden ses.
Man behøver ikke at lægge den i head, men så kommer den bare i klemme, når siden skal godkendes af W3C, hvis du benytter dig af deres service.
Du skal lægge den sådan ind i koden:
<?php session_start(); if($_SESSION['loget_in'] != 1) { // Hvis brugeren ikke er logget ind echo "<meta http-equiv=\"refresh\" url=\"http://www.bossman.dk\" content=\"0\">"; // Sender brugeren til www.bossman.dk exit; // Sørger for at resten af koden, ikke bliver udført } ?>
Så, nu sker der da noget, bare ikke det rigtige :) Nu står siden og kører i ring, men den kommer ikke til den rigtige side, hvis der ikke er logget ind og den viser ikke resten, hvis jeg er logget ind - men vi er vel på vej :)
Jamen der er jo to ting i det. Dels hvis man ikke er logget på, skal jeg vende tilbage til siden, hvor man kan logge på og dels hvis man er logget på, skal man kunne se siden. Og her dukker begge problemer op, hvis jeg er logget på, viser den ikke min kode og er jeg ikke logget på, bliver jeg ikke sendt videre med header, (eller den kode du gav mig). Skal jeg prøve at smide begge kode-stykker op, så du kan se dem? (jeg er bare bange for, det ikke hjælper, fordi min header får jo siden til at gå i stå)
Okay, så langt så godt :) Jeg har fået syet din kode om med meta-osv, så den kan sende videre - nu er problemet så, så når jeg kommer fra login siden til den siden, jeg skal kunne se, bliver jeg hele tiden smidt tilbage for at logge ind igen.
Denne kode ligger på siden, der skal acceptere min adgangskode: session_start(); if(!$_SESSION['loget_in'] == 1) { //Hvis brugeren ikke er logget in echo "<meta http-equiv='Refresh' content='0;url=ny_admin.php'>"; exit(); //Sørger for at resten af koden, ikke bliver udført } include "connect.php"; *** her kommer resten af koden ***
Her er koden for at logge ind og sende videre til ovenstående side: <?php session_start(); include "connect.php";
if(!isset($_POST['Submit'])) { echo "Tast brugernavn og adgangskode for at logge ind"; }else{ $postbruger = $_POST['brugernavn']; $postpass = $_POST['adgangskode'];
$resultat = mysql_query("SELECT Id FROM login WHERE brugernavn = '$postbruger' AND adgangskode = '$postpass'");
$number = mysql_num_rows($resultat); if($number == 1) { //Hvis der kun er et resultat, bliver brugeren logget in $_SESSION['loget_in'] = 1; $_SESSION['brugernavn'] = $postbruger; $_SESSION['adgangskode'] = $postpass; echo "Du er nu logget ind som " .$postbruger;
}else echo "De indtastede oplysninger er ikke korrekte"; } ?>
Den øverste side der skal tage imod brugernavn og adgangskode hedder links.php og siden man logger sig på med brugernavn og adgangskode, hedder ny_admin.php. Problemet ligger måske i, at ny_admin.php er noget jeg har fundet på nettet, men det var to sider, jeg har forsøgt at strikke sammen til en? :)
Hov, det var en noget mere avanceret udgave :) Det må jo så være siden hvor man logger sig på - men skal "modtager-urlen" så ikke på i action i formen? Eller kan det hele køre på én side - jeg kan ikke helt gennemskue det, du har lavet :)
Jeg har nu prøvt at lave det som en ny admin-side. Med headeren virker det ikke, formen kommer frem, men siden "dør", når jeg prøver at gøre noget. Så har jeg ændret den til den der meta-ting, og så kan den melde ud med fejl, hvis der er tastet forkert, men den kan ikke logge på, når jer bruger de rigtige oplysninger. Nogen bud på det?
Jeg har nu prøvet at smide det ind i toppen af links.php. Dels kan den stadig ikke tage imod de rigtige oplysninger og dels viser den alt resten af koden - kan jeg evt. have gjort noget forkert?
Nej, siden bliver ikke blank. Hvis brugernavn og adgangskode er rigtig, forbliver den ved formen og er de forkerte, kommer teksten, at det er forkert. Taster jeg så rigig, står teksten om, det er forkert der stadig.
$query = mysql_query("SELECT * FROM login WHERE brugernavn = '".$_POST['brugernavn']."' AND adgangskode = '".$_POST['brugernavn']."' ORDER BY Id ASC LIMIT 1") or die(mysql_error());
og
if(!empty($array['Id']))
til
$query = mysql_query("SELECT * FROM login WHERE brugernavn = '".$_POST['brugernavn']."' AND adgangskode = '".$_POST['brugernavn']."' ORDER BY id ASC LIMIT 1") or die(mysql_error());
Nu har jeg prøvet igen. Siden fortæller nu, at der ikke er udfyldt i felterne, meget fint :) Den fortæller også, når der er tastet forkert og den kan så igen fortælle, at der er tastet forkert og at felterne ikke er udfyldt - men når det så er rigtig, melder den stadig ud med, at der er tastet forkert :)
Kl 23:34:13 skrev du, jeg skulle ændre et par ting, men det du skrev, var ens, kan det have noget at sige, at der skulle være ændret noget, som der så ikke blev?
Jeg rettede Id til lille id og nu kan jeg tilsyneladende logge på :) - dog skriver den stadig den fejl-besked der var der inden, jeg loggede på efter, at nu er jeg logget på. Forstår du, hvad jeg mener?
id'et er forskelligt fra bruger til bruger, og må/skal aldrig ændres. id står for identifikation og bruges til at identificere brugeren. Når man er logget ind med brugernavn og adgangskode, så er brugerens id det eneste man behøver for at vide alt om den pågældende bruger. Derefter kan man så begynde at pille de informationer ud fra databasen man så vil vide, om den bruger, der er logget ind.
En god grund til kun at benytte brugerens id er, at det er det eneste, som ikke ændres. Kommer der pludselig en mulighed for brugeren hvor han/hun kan ændre sit brugernavn eller adgangskode, så er de gamle informationer, som er gemt i sessions ikke længere brugbare.
Bør jeg ligefrem omdøbe id til brugerid? - på sigt bliver det et ret omfattende site, hvor der skal bruges mange id'er, til brugere, katogorier, artikler osv.
Ja det kan jeg godt se. Men nu er jeg jo ikke nogen haj til det her, så i det du har lavet, skaber vi så en session til både id, bruger og adgangskode?
Jojo for pokker, det skal laves så rigtig fra starten som muligt! Jeg kunne godt have lagt ud med nogle flade html sider og i den dur fra starten, men det er bevidst, jeg har valgt at prøve at lege lidt med php og mysql fra starten, da jeg ved, jeg får brug for det hele i den anden ende - så tak fordi du er opmærksom på det og fordi du hjælper mig!!
Her kommer der en opdateret kode. Jeg skal nok fortælle dig, hvad jeg har lavet, men det bliver altså først i morgen:
<?php session_start(); include "connect.php";
function getuser($bid, $info) { $query = mysql_query("SELECT * FROM login WHERE id = '".$bid."' LIMIT 1") or die(mysql_error()); $array = mysql_fetch_array($query); return $array['$info']; }
if(!empty($_POST['brugernavn']) && !empty($_POST['adgangskode']) && isset($_POST['Submit'])) { $query = mysql_query("SELECT * FROM login WHERE brugernavn = '".$_POST['brugernavn']."' AND adgangskode = '".$_POST['adgangskode']."' ORDER BY id ASC LIMIT 1") or die(mysql_error()); $array = mysql_fetch_array($query); if(!empty($array['id'])) { $_SESSION['bid'] = $array['id']; } else { echo "<meta http-equiv='Refresh' content='0;url=".$_SERVER['PHP_SELF']."?err=2'>"; exit; } } else if(isset($_POST['Submit'])) { echo "<meta http-equiv='Refresh' content='0;url=".$_SERVER['PHP_SELF']."?err=1'>"; exit; } if(!empty($_SESSION['bid'])) { echo "Du er nu logget ind som <strong>".getuser($_SESSION['bid'], "brugernavn")."</strong>"; }
if($_GET['err'] == 1) { echo "<strong>Du skal udfylde begge login-felter!</strong><br><br>"; } if($_GET['err'] == 2) { echo "<strong>De indtastede oplysninger var ikke korrekte!</strong><br><br>"; } ?>
Jeg har nu ændret: if(!empty($_POST['brugernavn']) && !empty($_POST['adgangskode']) && isset($_POST['submit'])) (submit til lille s) Nu kan den melde ud og sige, noget er forkert, men er felterne tommme, sker der ikke noget.
Tænk en gang at der kan være forskel på om det dur ved s og S :) og nu dur det tilsyneladende :) Dog fortæller den ikke, hvad jeg er logget på som, og jeg kan ikke gennemskue, hvad du laver med "getuser", så jeg ved ikke, om der stadig er en fejl i det? Når man så er logget ind, og trykker på knappen igen, fortæller den ikke, man er logget ind, men at man skal udfylde begge felter, er det en fejl eller?
Men ved du, hvad der er værre? Oprindelig gik denne tråd på, at jeg havde en side a la det, du har lavet til mig, bortset fra, det du har lavet, er mere avanceret og jeg som har sværre ved at forstå. Men lige nu er jeg lige vidt, jeg har stadig ikke koden, der skal bruges på andre sider ;-) Er den nem nok for dig at strikke sammen? (jeg har prøvet, men det lykkes ikke) Jeg håber, du stadig har mod på at hjælpe det sidste, selvom det efterhånden er blevet et større projekt. Indtil nu tusinde tak for hjælpen!
Og ja, der kan lige strikkes en kode sammen, som ser sådan ud:
session_start(); include "connect.php"; if(empty($_SESSION['bid'])) { echo "<strong>Du skal være logget ind, for at se denne side.</strong>"; exit; }
Den kode finder ud af, om man er logger ind, og hvis $_SESSION['bid'] er tom, så udskriver den "Du skal være logget ind..." inden for { og }. Derefter sørger exit; for at resten af koden ikke bliver kørt.
Den kode du der har lavet, minder om min (ja, ja, jeg øver mig :) borset fra et ! men med den kode du har lavet kan jeg ikke se, den side jeg har logget på. Hvis jeg er logget ind, kan jeg så ikke kalde et link i hyperlinks og så stadig være logget ind? (det kan selvfølgelig være min fejl)
Hvor mange point skal du have mere for din store hjælp?
Hov, når jeg ser på vores tekster bagefter, kan det måske godt misforståes. Det med return $array[$info]; virkede, men det under virkede ikke. Selvom jeg er logget ind, siger den, jeg ikke er logget ind (medmindre jeg her gjort noget forkert)
AVVVVVVVVVVVV for pokker shooka... jeg har bøvlet rundt og nok især knoldet rundt i alt det login halløj... og ved du hvad? Det du har lavet til mig virker perfekt!!!
Jeg var ikke klar over, at man skulle åbne sessinen før html, det troede jeg bare man skulle gøre, når man havde brug for det.
Undskyld fordi du har brugt så meget tid på en nybegynder, som ikke var klar over, hvordan det hele hang sammen, og for min bemærkning om, at vi ikke skulle trække pinen mere, undskyld!
Jeg er ikke helt med på din kode, så kunne jeg lokke dig til kort at fortælle kort, hvordan den er skruet sammen?
Uanset hvad skal du have dine point, de er mere end velfortjente!!!
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.