Avatar billede Slettet bruger
30. december 2013 - 00:43 Der er 11 kommentarer og
1 løsning

header efter echo..

Jeg har et problem med at min header ikke vil fungere fordi jeg har lavet et echo før min header kom frem. (Fulgt en guide hvor dette blev gjort og gjorde det samme) Men min side vil ikke acceptere det, og jeg har virklig prøvet mig frem på hvordan jeg ellers kan sætte det op så det vil fungere men intet held. Så jeg håber at i kunne hjælpe mig med hvordan jeg ellers kan sætte det op så det vil fungere.


Koden:

<?php session_start(); ?>
<?php include_once("connect.php"); ?>
<?php include_once("functions.php"); ?>
<?php include_once("title_bar.php"); ?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Register - Admin Panel</title>
</head>

<body>

<h3>Log ind</h3>

<form method="POST">
<?php
if(isset($_POST['submit'])){
        $username = $_POST['username'];
        $password = md5($_POST['password']);
        if(empty($username) or empty($password)){
            echo "<p>Felterne er tomme!</p>";
           
        } else {
            $check_login = mysql_query("SELECT id, type FROM users WHERE username='$username' AND password='$password'") or die(mysql_error());
            if(mysql_num_rows($check_login) == 1){
                $run = mysql_fetch_array($check_login);
                $user_id = $run['id'];
                $type = $run['type'];
                if($type == 'd'){
                    echo "<p>Din konto er deaktiveret!</p>";
                   
                } else {
                    $_SESSION['user_id'] = $user_id;
                    header('location: index.php'); <----------------------------Problemet
                }
            } else {
                echo "<p>Brugernavn eller kodeordet er forkert!</p>";
            }
        }
}
?>

Brugernavn: <br/>
<input type="text" name="username" />
<br/><br/>
Kodeord: <br/>
<input type="password" name="password" />
<input type="submit" name="submit" value="Log ind" />

</form>

</body>
</html>




Håber der er nogle som kunne hjælpe mig med hvordan jeg ellers skal sætte det op så det vil fungere.
Avatar billede MadsHaupt Juniormester
30. december 2013 - 12:25 #1
Jeg har læst din kode igennem og har fundet ud af at den på ingen måde kan echo noget ud før header'en, kun hvis du echo'er noget ud i en af dine includes.
Avatar billede MadsHaupt Juniormester
30. december 2013 - 12:41 #2
Har du prøvet at slå fejlmedelser til og se om der opstår en fejl?.
Hvis der ikke er nogen fejl så har jeg har faktisk også haft det samme problem og jeg tror at jeg brugte javascript i stedet for en header i php.

Eksempel på hvordan man kan lave det med java script:

function goto(path) {
echo '<script type="text/javascript">document.location.href = "'.path.'";</script>';
}
goto("index.php");


Du skal bare huske at funktionen kun kan bruges inde i body taget.
Avatar billede repox Seniormester
30. december 2013 - 13:17 #3
Det er ikke muligt at sætte en header efter output er genereret. Så simpelt er det.

Du bør kigge lidt på at optimere din kode i stedet - og stop med at bruge den gamle MySQL udvidelse og begynd at bruge PDO eller MySQLi i stedet. Jeg har tilføjet escaping af det input du har lagt i din forespørgsel og fjernet din 'or die()' da den desværre ofte afslører meget om din applikation som den ikke skal.

Denne kode er mere optimeret til dit behov:

<?php
session_start();
include_once("connect.php");
include_once("functions.php");
include_once("title_bar.php");

if(isset($_POST['submit']))
{

        if(empty($_POST['username']) or empty($_POST['password']))
        {
            $error = "Felterne er tomme!";           
        }
        else
        {
            $check_login = mysql_query("SELECT id, type FROM users WHERE username='".mysql_real_escape_string($_POST['username'])."' AND password=MD5('".$_POST['password']."') LIMIT 1");           
            if(mysql_num_rows($check_login) == 1)
            {
                $run = mysql_fetch_array($check_login);
                $user_id = $run['id'];
                $type = $run['type'];
                if($type == 'd')
                {
                    $error = "Din konto er deaktiveret!";
                   
                }
                else
                {
                    $_SESSION['user_id'] = $user_id;
                    header('location: index.php');
                    exit; // For at forhindre at scriptet unødvendigt kører videre
                }
            } else {
                $error = "Brugernavn eller kodeordet er forkert!";
            }
        }
}

?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Register - Admin Panel</title>
</head>

<body>

<h3>Log ind</h3>

<?php if(isset($error)): ?>
<p><?php echo $error; ?>
<?php endif; ?>

<form method="POST">
Brugernavn: <br/>
<input type="text" name="username" />
<br/><br/>
Kodeord: <br/>
<input type="password" name="password" />
<input type="submit" name="submit" value="Log ind" />

</form>

</body>
</html>
Avatar billede Slettet bruger
30. december 2013 - 14:03 #4
#1
Ja jeg ved at den ikke kan header efter en echo. Og det er mit problem :/

#2
Har ikke rodet med Java før. Så jeg ved ikke helt hvordan det fungere.

#3
Tak jeg har prøvet at bruge din kode. og jeg ser at den kommer lidt videre med nogle ting, min login form forsvinder men den kan ikke finde ud af at stille mig videre til index.php Også melder den fejl endnu

Warning: Cannot modify header information - headers already sent by (output started at title_bar.php:10) in /login.php on line 30

Title_bar Ser sådan her ud

<?php if(loggedin()){ ?>
<a href='index.php'>Hjem</a> |
<a href='profile.php'>Profil</a> |
<a href='messege.php'>Beskeder</a> |
<a href='logout.php'>Log ud</a> 
<?php } else {  ?>
<a href='index.php'>Hjem</a> |
<a href='login.php'>Log ind</a> |
<a href='register.php'>Register</a> 
<?php } ?>

Og i login er det stadig den samme fejl med header versionen som den ikke kan finde ud af at videre stille når man logger ind.
Avatar billede MadsHaupt Juniormester
30. december 2013 - 16:18 #5
#2 det er ikke java, det er php, du skal lave den funktion som øverst i mit eksempel
function goto(path) {
echo '<script type="text/javascript">document.location.href = "'.path.'";</script>';
}
øverst i dit php script, og bruge funktionen i stedet for den header du har problemer med, sådan bruger du funktionen.
goto("index.php");
Avatar billede repox Seniormester
30. december 2013 - 16:43 #6
#5
Det er faktisk en kombination af PHP og JavaScript - og det er en dårlig løsning i stedet for at lave det ordentligt.

#4
Hvis du nu læser dine fejlmeddelelser og prøver at forstå dem, så står der faktisk at du har output i den inkluderede fil title_bar.php.

Da reglen jo stadig er at du ikke må have output før du sætter headers, må du jo flytte din inkludering af dit output ned til efter eventuelle headers.

Med andre ord - flyt include_once("title_bar.php"); ned til den plads hvor den bør være i stedet for hvor den er nu.
Avatar billede Slettet bruger
30. december 2013 - 19:04 #7
#6 Tak! Flyttet den ned til Body åbningen også løste det hele sig. Men har et andet problem.

Fejl besked.

Warning: Cannot modify header information - headers already sent by (output started at conversations.php:3) in conversations.php on line 45

Conversations filen

<?php session_start(); ?>

<?php include_once("connect.php"); ?>
<?php include_once("functions.php"); ?>
<?php include_once("title_bar.php"); ?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Conversations - Privat beskeder</title>
</head>

<body>


<h3>Privat message system</h3>

<?php include 'message_title_bar.php'; ?>
<?php $my_id = $_SESSION['user_id']; ?>
<br/>

<div>
<?php
if(isset($_GET['hash']) && !empty($_GET['hash'])){
    $hash = $_GET['hash'];
    $message_query = mysql_query("SELECT from_id, message FROM messages WHERE group_hash='$hash'");
    while($run_message = mysql_fetch_array($message_query)){
        $from_id = $run_message['from_id'];
        $message = $run_message['message'];
       
        $user_query = mysql_query("SELECT username FROM users WHERE id='$from_id'");
        $run_user = mysql_fetch_array($user_query);
        $from_username = $run_user['username'];
       
        echo "<p><b>$from_username</b><br/>$message</p>";
       
    }
    ?>
    <br/>
    <form method='post'>
    <?php
    if(isset($_POST['message']) && !empty($_POST['message'])){
        $new_message = $_POST['message'];
            mysql_query("INSERT INTO messages VALUES('', '$hash', '$my_id', '$new_message')");   
            header('location: conversations.php?hash='.$hash);
    }
    ?>
    Skriv besked: <br/>
    <textarea name='message' rows='6' cols='50'></textarea>
    <br/><br/>
    <input type='submit' value="Send besked" />
    </form>
    <?php
   
   
} else {
    echo "Vælg conversation";
    $get_con = mysql_query("SELECT `hash`, `user_one`, `user_two` FROM message_group WHERE user_one='$my_id' OR user_two='$my_id'");
    while($run_cron = mysql_fetch_array($get_con)){
        $hash = $run_cron['hash'];
        $user_one = $run_cron['user_one'];
        $user_two = $run_cron['user_two'];
       
        if($user_one == $my_id){
            $select_id = $user_two;
        }else{
            $select_id = $user_one;
        }
       
        $user_get = mysql_query("SELECT username FROM users WHERE id='$select_id'");
        $run_user = mysql_fetch_array($user_get);
        $select_username = $run_user['username'];
       
        echo "<p><a href='conversations.php?hash=$hash'>$select_username</a></p>";
    }
   
}
?>
</div>

</body>
</html>


Her prøvet jeg at flytte rundt på Connect.php men fik mange fejl. osv Så jeg ved ikke rigtig hvor jeg skal placere dette. for at få dette rettet.? En idee? :)
Avatar billede repox Seniormester
30. december 2013 - 19:14 #8
Det er jo fuldstændig og nøjagtigt den samme problematik. Hvis du nu læser din fejlmeddelelse og prøver at forstå den, vil du kunne se den fortæller at du har output på linie tre, men du forsøger at sætte en ny header på linie 45 - og det kan du ikke pga. outputtet på linie tre.
Avatar billede Slettet bruger
30. december 2013 - 19:21 #9
#8 Jeg har forstået beskeden, men jeg har

<?php include_once("connect.php"); ?>
<?php include_once("functions.php"); ?>
<?php include_once("title_bar.php"); ?>
<?php include 'message_title_bar.php'; ?>

Skal alle disse 4 flyttes under header?
Avatar billede repox Seniormester
30. december 2013 - 19:52 #10
I forhold til dit script i #7, så lader det til at du har et linieskift (som også er output):

Conversations filen

<?php session_start(); ?>

<?php include_once("connect.php"); ?>
<?php include_once("functions.php"); ?>
<?php include_once("title_bar.php"); ?>


Hvorfor er det du åbner og lukker dine PHP tags over flere linier?

<?php
session_start();

include_once("connect.php");
include_once("functions.php");
include_once("title_bar.php");
?>


Men når du så har løst det linieskiftsproblem, så har du igen din title_bar.php som bliver kørt inden din header funktion på linie 45. Flyt al logikken op hvor den hører til i stedet for at smide det ind midt i det hele.
Avatar billede Slettet bruger
30. december 2013 - 20:34 #11
Tror jeg fik fikset fejlen i conversations.php

Så nu brokker den sig over min title_bar.php

Og jeg har prøvet at bakse lidt med den, men jeg kan bare ikke få den til at forstå det.

Jeg forstår ikke rigtig hvad den mener med fejlen her.

fejl besked

Warning: Cannot modify header information - headers already sent by (output started at title_bar.php:7) in conversations.php on line 43



Title_bar.php
<?php if(loggedin()){ ?>
<a href='index.php'>Hjem</a> |
<a href='profile.php'>Profil</a> |
<a href='messages.php'>Beskeder</a> |
<a href='logout.php'>Log ud</a>
<?php } else { ?>  <------------------------Dette
<a href='index.php'>Hjem</a> |
<a href='login.php'>Log ind</a> |
<a href='register.php'>Register</a> 
<?php } ?>
Avatar billede repox Seniormester
30. december 2013 - 20:44 #12
Der står jo det samme i den fejl besked som i alle de andre du har fået hjælp til... Beklager, men hvis problemstillingen ikke er sivet ind endnu, vil løsningsmodellen heller ikke.
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