[ Kerim O @ 25.10.2011. 21:23 ] @
Pozdrav.Imam jedan neobičan problem koji mi se nikada nije desio.Naime imam login formu za koju mislim da je kod ispravan ali mi je problem što mi kada pokušam da submitujem redirektuje me na login.php ne postojeći.
Ne znam zašto bi me tamo redirektovao a trebao bi na onu stranicu koju stavim u header pa da me redirektuje ako je ispravan login.

Isto kao i ovo,desilo mi se da imam potpuno ispravan kod koji mi je radio ali odjednom prilikom logina kada mi se forma prebaci na stranicu nakon uspjesnog logina piše da je header već poslan a nije mi se dešavalo..
Evo koda..

Code:
<?php
session_start();

include'db.php';
include'funkcija.php';
$nesto="news";
odabirbaze($nesto);

if(isset($_POST['logse']))
{
    $user=$_POST['ime'];
    $lozinka=$_POST['lozinka'];
    
    
    
    
 $upit=mysql_query("SELECT * FROM login WHERE username='$user' AND password='$lozinka'");
 $num=mysql_num_rows($upit);
 
 if($num!=0)
 {
      $_SESSION['user']=$user;
     header('Location:clanovi.php');
    
 }
 else
{
    echo "Nemoguće se logovati";
}
}
else
{
?>


<form method="post" action="login.php">
Ime:<input type="text" name="ime" ><br>
Lozinka:<input type="password" name="lozinka" ><br>
<input type="submit" name="logse" value="Loguj se">
</form>
<?php    
}
?>



















[ VladaSu @ 26.10.2011. 00:34 ] @
Mora da ti postoji login.php jer imas action="login.php"
Takodje posle header('Location:clanovi.php'); treba da imas exit;
jer si sa ovim redom postavio header na redirekciju ali nisi prestao sa ucitavanjem skripte.
A header moze da poslat i u 'db.php' ili 'funkcija.php' ako recimo pre ili posle <?php ?> imas prazan red, tj. enter.
Ako hoces da lakse nadjes gde ti je header poslat stavi na par mesta echo headers_sent() i tamo gde ti je ispisao 1 znaci da je pre njega poslat header pa onda pomeraj
ovu funkciju blize pocetku koda sve dok ti nista ne ispise pa je izmedju nista i poslednjeg ispisa 1 negde poslat header.
Pozeljno je stavis i error_reporting(E_ALL) za lokal verziju sajta.
[ Kerim O @ 26.10.2011. 01:44 ] @
Hvala na jako brzom i iscrpnom odgovoru :) Grešku osnovnu sam napravio i slučajno sam previdio kad sam pokušavao da otkrijem grešku. Ovo je riješeno.
Sada mi radi ovo uredu sve,medjutim kada pokušam da ubacim html kod u ovo ne radi mi kako treba.Odnosno forma se radi i tada se učita css kako treba, medjutim kada pokušam da se logujem dobijem eror
"Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\lala.php:13) in D:\xampp\htdocs\lala.php on line 36".
Predpostavljam da je do mog html koda medjutim nisam se baš susretao sa ovakvim stvarima. Namjestio sam u css fajlu da mi se u divu wrapper pojavi forma za login a u slućaju da je login nepravilan da se u tom divu ispiše poruka sa <h5>tagom?

Ovo je jedan od kodova koji sam pokušavao iskoristiti za ovo gore.
Code:

<?php
session_start();
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="adminstil.css" />
</head>
<body>
<div class="wrapper">


<?php

include'db.php';
include'funkcija.php';
$nesto="news";
odabirbaze($nesto);


if(isset($_POST['logse']))
{
    $user=$_POST['ime'];
    $lozinka=$_POST['lozinka'];
    
    
    
    
    
 $upit=mysql_query("SELECT * FROM login WHERE username='$user' AND password='$lozinka'");
 $num=mysql_num_rows($upit);
 
 if($num!=0)
 {
      $_SESSION['user']=$user;
     header('Location:clanovi.php');
    
 }
 else
{
    echo "Nemoguće se logovati";
}
}
else
{
?>


<form method="post" action="lala.php">
Ime:<input type="text" name="ime" ><br>
Lozinka:<input type="password" name="lozinka" ><br>
<input type="submit" name="logse" value="Loguj se">
</form>
<?php    
}
?>
</div>
</body>
</html>















[ VladaSu @ 26.10.2011. 21:35 ] @
Postavio si pitanje i u pitanju odgovorio.

Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\lala.php:13) in D:\xampp\htdocs\lala.php on line 36
[ VladaSu @ 26.10.2011. 22:33 ] @
http://php.net/manual/en/function.header.php
*
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

Sto znaci ako ti pre header imas bilo kakav echo, print, output u smislu html-a, teksta, praznih linija ili space.. onda ti header naredba nece raditi.
A tebi je ovo pre header naredbe.

Code (html):

<html>
<head>
<link rel="stylesheet" type="text/css" href="adminstil.css" />
</head>
<body>
<div class="wrapper">



 


Treba prvo da radis obradu podataka i tek posle obrade da iskljucivo radis samo ispis html-a i podataka.
Ti radis prvo malo ispis, pa obradu, pa opet ispis i onda ti prilikom obrade ne radi redirekcija zbog prvog ispisa.
[ HelloCode @ 29.10.2011. 22:15 ] @
"Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\lala.php:13) in D:\xampp\htdocs\lala.php on line 36".

Ovo mi je veoma poznato i jako me je zivciralo, u tolikoj meri da sam hteo da polupam ceo kompjuter, probao sam da ga stavim gore i nekako sam uspeo ali onda mi nije lepo donji deo koda izgleda, i uvek neke muke oko tog headera, i onda sam lepo nasao zamenu, koristi <META http-equiv="refresh" content="5;URL=http://www.url.com"> gde je content="5 ustvari 5 sekundi do refresha, ili stavi 1 za instant refresh, i to bi trebalo da ti reshi sve muke.
[ dakipro @ 30.10.2011. 09:56 ] @
ova redirekcija je zaobilazenje problema, ne resavanje istog. Lakse moze da uradi tako sto ce da iskljuci error reporting ili ukljuci output_buffering, sto i dalje ne resava problem vec je samo princip rada "ako se ne vidi = ne postoji". Prava stvar za resavanje ovakvih problema je upotreba nekog template engina kao npr smarty ili bilo koji drugi, pa cak i neki custom, ili barem skupiti html na dnu php fajla u nekoj promenjivoj i odstampati gotov html na samom kraju koda.