Avatar billede budwieser Nybegynder
07. april 2010 - 11:41 Der er 12 kommentarer og
1 løsning

Good old problem: headers already sent

Jeg er ramlet ind i dette velkendte problem, og jeg står hjælpeløs. Jeg har virkelig prøvet at tjekke alle linier for mellemrum eller unødvendige tegn. Men jeg synes ikke at kunne finde det der skaber problemet.

(output started at /usr/local/www/elmerdahl.dk/httpdocs/booking/login/inde_x.php:1) in /usr/local/www/elmerdahl.dk/httpdocs/booking/login/inc/auth.php on line 2
Dette er min auth.php
<?php
session_start();
if($_POST){
  $_SESSION['username']=$_POST["username"];
  $_SESSION['password']=$_POST["password"]; 
}

$result=mysql_query("select * from users 
  where username='" . $_SESSION['username'] . "' and password='" . $_SESSION['password'] . "'");
$num=mysql_num_rows($result); 
if($num < 1){
  echo "You are not authenticated.  Please login.<br><br>
  <form method=POST action=inde_x.php>
  username: <input type=text name=\"username\">
  password: <input type=password name=\"password\">
  <input type=submit>
  </form>";
 
  exit;
}
?>

Og i index har jeg kun følgende koder php i de første 4 linjer:
1:<?php
2:include("inc/connect.php");
3:include("inc/auth.php");
4:?>

Hvor er det min fejl af, det er næmt tjente points, jeg har bare set mig blind på dette.

På forhånd tak (;
Avatar billede showsource Seniormester
07. april 2010 - 12:20 #1
Der må ikke være nogen linieskift eller space før startende php tag.
Avatar billede showsource Seniormester
07. april 2010 - 12:23 #2
Og jeg ville bruge:

if($_SERVER["REQUEST_METHOD"] == "POST") ......

samt som min. bruge mysql_real_escape_string() til post værdier
Avatar billede budwieser Nybegynder
07. april 2010 - 13:08 #3
Problemet kommer stadig.

Jeg har sørget for at der ingen tegn er før php koderne, jeg har prøvet at ændre charset til ASNI men intet virker.

Kan man ikke bruge ob_start(); ?
Avatar billede showsource Seniormester
07. april 2010 - 14:33 #4
Lyder som om at du får gemt dit dokument med "bom" ?

D.v.s. der er output til browser.
Avatar billede showsource Seniormester
07. april 2010 - 14:34 #5
Hvilken editor bruger du ?
Avatar billede budwieser Nybegynder
08. april 2010 - 10:44 #6
Jeg bruger dreamweaver til at kode i. Hmm..
Avatar billede budwieser Nybegynder
08. april 2010 - 12:12 #7
Hvordan kan det være at et php script kan køre så ganske fint på ens localhost også bare
falde fra hinanden når det bliver rykket over på net host side??

Så jeg har kørt en error report for at se om jeg får samme fejl begge steder, men det gør
jeg ikke. På localhost logger den ind og gør som den skal, hvor den på internet hosten
kommer med error:
Error: [8] Undefined index: logged_in

Lad os se hvad den brokker sig over.

if ($_SESSION['logged_in'] == true) {
    // If user is already logged in, redirect to main page
    redirect('../index.php');

Det er da underligt da logged_in bliver defineret i min funktion:
function check_login_status() {
    // If $_SESSION['logged_in'] is set, return the status
    if (isset($_SESSION['logged_in'])) {
        return $_SESSION['logged_in'];
    }
    return false;
}

Hvis der er mere i vil undersøge kan i se tutorial'en her:
http://dev.thatspoppycock.com/index.php/Creating_a_Simple_PHP_and_MySQL-Based_Login_System
Avatar billede showsource Seniormester
09. april 2010 - 07:19 #8
Den linie her:
if ($_SESSION['logged_in'] == true) {
vil gi' den omtalte NOTICE hvis session'en ikke er sat.

I funktionen bruges isset() så her fejler den ikke.

Kan også gøres som :

function check_login_status() {

return (isset($_SESSION['logged_in']) ? $_SESSION['logged_in'] : false);

}
Avatar billede budwieser Nybegynder
09. april 2010 - 09:49 #9
Det ser ikke ud til at virke- Jeg har fået tip om at:
if (array_key_exists('logged_in', $_SESSION) && $_SESSION['logged_in'] == true) {

skulle hjælpe men det er ikke tilfældet. Jeg har fundet ud af at hosten køre med 4.4.4 og jeg køre 5.3.4 versionen
Avatar billede showsource Seniormester
09. april 2010 - 10:34 #10
Nu er jeg ikke helt med længere.

1. hvis du gemmer docs som utf8, skal du sørge for at de gemmes uden BOM ( Laver nogle tegn i starten af doc )

2. Mellemrum, linieskift FØR php tag, er også output til browser.

3. Er det stadig header problem du har ?
Avatar billede budwieser Nybegynder
09. april 2010 - 11:03 #11
Nej header problemet er løst, sorry jeg var lidt uklar i det andet indlæg, jeg skulle til møde.

Mit problem er nu følgende:
Når jeg logger ind skal den tjekke om jeg allerede er logget ind ved at tjekke en session. Men hvis denne session ikke er sat så kommer der en error der stopper resten af koderne.

Jeg har en funktion der skal tjekke om jeg er logget ind:
function check_login_status() {
    // If $_SESSION['logged_in'] is set, return the status
    if (isset($_SESSION['logged_in'])) {
        return $_SESSION['logged_in'];
    }
    return false;
}

I mit login kode har jeg:
if ($_SESSION['logged_in'] == true) {
//videre til den beskyttede side
}
else {
tjek om brugernavn og kode er korrekt.

En anden gut kom med forslaget om at ændre:
if ($_SESSION['logged_in'] == true) {

til:
if (array_key_exists('logged_in', $_SESSION) && $_SESSION['logged_in'] == true) {

Dette fjernede min session error men jeg bliver ikke sendt videre til min beskyttede side.

Mit login system kommer fra denne tutorial:
http://dev.thatspoppycock.com/index.php/Creating_a_Simple_PHP_and_MySQL-Based_Login_System
Avatar billede showsource Seniormester
09. april 2010 - 11:19 #12
hmm, er din login kode, må du som det første kunne bruge:

<?php
if(check_login_status()) {
// vidersend
exit;
}

// resten af loginkode

?>
Avatar billede budwieser Nybegynder
27. april 2010 - 11:37 #13
Jeg fandt en løsning efter længere tid
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
Kurser inden for grundlæggende programmering

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