Avatar billede Slettet bruger
05. november 2008 - 17:24 Der er 15 kommentarer og
1 løsning

problemer med headers

hejsa allesammen.

sidder og roder lidt med noget login system. men kan ikke få det til ar virke :-/

se: http://www.bjoler.dk/p/ klik på login
brugernavn: test
kode: test123

hvad kan fejlen være?
login.php
---

Login:<br>
<form action="<?php echo $_PHP_SELF; ?>" method="post">
<input type="text" name="brugernavn" value="brugernavn"><br>
<input type="password" name="password" value="123456"><br>
<input type="submit" name="login" value="Login">
</form>


<?php


if(isset($_POST['login'])) {
  include("*****.php"); // inkludere mysql oplysninger.
$brugernavn = $_POST['brugernavn'];
$password = $_POST['password'];
$query = mysql_query("SELECT * FROM bjolerdk WHERE brugernavn='$brugernavn' AND password='$password'") or die(mysql_error());

if(mysql_num_rows($query) > 0) {
  $SESSION['loggetind'] = 1;
  header("location: index.php?p=tagwall");
}else{
echo "Brugernavn og/eller kodeord passer ikke sammen";
}
}
?>
----

og hvordan får jeg den til at åbne tagwall i samme "box" som login.php også åbner i?

MvH. W :)
Avatar billede w13 Novice
05. november 2008 - 17:28 #1
Du kan ikke bruge header("location: ") når du har udskrevet noget på siden.
Avatar billede Rosenkjaer Novice
05. november 2008 - 18:09 #2
Ved at rykke PHP delen op øverst og kun sende et output hvis der ikke er trykket på knappen burde det virker (Har ikke testet):

<?php

if(isset($_POST['login'])) {
  include("*****.php"); // inkludere mysql oplysninger.
$brugernavn = $_POST['brugernavn'];
$password = $_POST['password'];
$query = mysql_query("SELECT * FROM bjolerdk WHERE brugernavn='$brugernavn' AND password='$password'") or die(mysql_error());

if(mysql_num_rows($query) > 0) {
  $SESSION['loggetind'] = 1;
  header("location: index.php?p=tagwall");
}else{
echo "Brugernavn og/eller kodeord passer ikke sammen";
}
}else{
?>

Login:<br>
<form action="<?php echo $_PHP_SELF; ?>" method="post">
<input type="text" name="brugernavn" value="brugernavn"><br>
<input type="password" name="password" value="123456"><br>
<input type="submit" name="login" value="Login">
</form>

<?php
}
?>
Avatar billede Rosenkjaer Novice
05. november 2008 - 18:16 #3
EDIT: Du bør bruge exit; efter header location, og hvis du vil vise login boksen hvis koden er forkert kan der gøres således:

<?php

if(isset($_POST['login'])) {
  include("*****.php"); // inkludere mysql oplysninger.
$brugernavn = $_POST['brugernavn'];
$password = $_POST['password'];
$query = mysql_query("SELECT * FROM bjolerdk WHERE brugernavn='$brugernavn' AND password='$password'") or die(mysql_error());

if(mysql_num_rows($query) > 0) {
  $SESSION['loggetind'] = 1;
  header("location: index.php?p=tagwall");
  exit;
}else{
  $error = "wrong_info";
}
}else{
?>

Login:<br>
<?php
if($error == "wrong_info"){
  echo "<font color='red'>Forkert brugernavn og/eller kodeord.</font>";
}
?>
<form action="<?php echo $_PHP_SELF; ?>" method="post">
<input type="text" name="brugernavn" value="brugernavn"><br>
<input type="password" name="password" value="123456"><br>
<input type="submit" name="login" value="Login">
</form>

<?php
}
?>

PS: Kiggede lige på din side, så vidt jeg kan se er login.php en fil du includer, og derfor er du nok at lave tjekket på en anden side for at lave din header location, da der ellers vil være udskrevet noget kode allerede inden den når til include af login.php
Avatar billede kjeldsted Novice
05. november 2008 - 19:44 #4
Ellers kan du faktisk også snyde PHP ved at du ØVERST på siden, FØR noget som helst andet (også før <!DOCTYPE....) ved at skrive:

<?
ob_start();
?>
Avatar billede Slettet bruger
05. november 2008 - 19:46 #5
xylene_free-> den melder samme fejl som før. men hvordan kan man ellers lave det så det hele forgår vha. index.php/?p=side.php ?

eller er der en smartere måde at gøre det på? :)

w13 -> hvordan ville du lave det? :)

MvH. W.
Avatar billede w13 Novice
05. november 2008 - 20:18 #6
Som xylene_free, men kan ikke se, hvad der går galt i den kode. Formodentlig er der noget HTML / tekst før koden eller i *****.php..
Avatar billede w13 Novice
05. november 2008 - 20:18 #7
Eller måske er du et offer for BOM (Byte Order Mark), hvis du bruger UTF-8. =)
Avatar billede Slettet bruger
05. november 2008 - 21:00 #8
hvor bruger jeg UTF-8 hvis det er tilfældet?:)
Avatar billede Slettet bruger
05. november 2008 - 21:06 #9
har lavet copy paste på wylene_free's kode nu, så jeg var sikker på jeg ikke havde tastet forkert. men får stadig beskeden:
---
Warning: Cannot modify header information - headers already sent by (output started at /customers/bjoler.dk/bjoler.dk/httpd.www/p/index.php:13) in /customers/bjoler.dk/bjoler.dk/httpd.www/p/login.php on line 11
---
line 11 er der hvor header: location ... står :-/

men fejlen er nu inde i den box hvor jeg gerne vil have tagwall til at åbne hvis man logger ind rigtigt,

hvordan kan det være den ligger inde i boxen nu og ikke neden under som da jeg brugte min egen kode?
Avatar billede Slettet bruger
05. november 2008 - 21:14 #10
kan man gøre sådan får at blive sendt videre til tagwall når man er logget ind:

kode stump:
---
if(mysql_num_rows($query) > 0) {
  $SESSION['loggetind'] = 1;
  header("location: index.php?p=tagwall");
  switch($_GET['p']) {
case "tagwall": include('tagwall.php');break;

}
  exit;
}
----
eller er jeg galt på den der? :)
Avatar billede dkfire Nybegynder
05. november 2008 - 21:26 #11
Som fejlbeskeden tydelig gør opmærksom på, så har du noget output, dvs skrevet noget til browseren, allerede på linje 13 i index.php og du prøver at ændre headeren i linje 11 i login.php.
Jeg vil skyde på at den fejl du ser kommer af en forkert opbygning af dine sider. Du har sikkert blandet php ind mellem html. Dette er en meget dårlig måde at lave sider på. Søg for at alt php kode bliver kørt inden du viser noget html overhoved, derved undgår du disse fejl.

Du kan dog lappe på problemet, og læg mærke til at det kun er at lappe, ved at indsætte:
<?php
ob_start();
?>
øverst i din index.php fil.
Avatar billede dkfire Nybegynder
05. november 2008 - 21:30 #12
exit skal du kun bruge der hvor du vil have php til helt at stoppe og lukke ned.
Det vil man som regel gerne efter brug af header(), da exit går at alt kode som kommer efter ikke bliver udført.
Det kunne i dit tilfælde være:

if(mysql_num_rows($query) > 0) {
  $SESSION['loggetind'] = 1;
  header("location: index.php?p=tagwall");
  exit;
  switch($_GET['p']) {
    case "tagwall":
              include('tagwall.php');
              break;
  }

Men så tror jeg heller ikke det vil virke helt som du gerne vil.
Avatar billede Slettet bruger
05. november 2008 - 21:46 #13
dkfire ->Den der ob_start() virker som den skal. har fundet en måde at lave det på :) laver bare links fra login.php og videre til de sider som man skal kunne arbejde med.

tak for jeres hjælp. smider i et svar?:)

MvH. W.
Avatar billede w13 Novice
06. november 2008 - 09:32 #14
Ikke til mig. =)
Avatar billede dkfire Nybegynder
06. november 2008 - 15:55 #15
Synes nu heller ikke jeg har lavet så meget, så det er helt op til dig.
Avatar billede Slettet bruger
06. november 2008 - 20:14 #16
tak for jeres hjælp i hvertfald :)
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