PDA

Volledige versie bekijken : header() stuurt niet naar andere pagina


jeverink
%Europe/Berlin %569 %2011, 13:39
hallo iedereen,

Ik ben bezig met een inlog systeem en wil voor het doorsturen de header() functie gebruiken.
Hier is het script:
<?php
$fouttekstcon = "geen verbinding";
$fouttekstacc = "account bestaat niet";
$fouttekstbes = "account bestaat";
$sqlerror = "";
$name = $_POST["user"];
$pass = $_POST["pass"];

$con = mysql_connect("secret","secret","secret");
if (!$con)
{
$sqlerror = mysql_error();
echo "&vari=" .$sqlerror;
}

mysql_select_db("secret", $con);

$checkuser = mysql_query("SELECT * FROM id WHERE username ='$name' AND password ='$pass'");

$username_exist = mysql_num_rows($checkuser);

if($username_exist >= 1){
echo "&vari=" .$fouttekstbes;
setcookie('username', '$name');
setcookie('password', '$pass');

header("Location: http://www.secret.nl/");
mysql_close($con);
exit();
}else{
echo "&vari=" .$fouttekstacc;
mysql_close($con);
exit();
}
mysql_close($con);
?>
Hij stuurt hem niet door en ik weet niet wat er niet aan klopt.
Wat klopt er niet?

mvg,
Jeverink

Koen!
%Europe/Berlin %590 %2011, 14:10
Krijg je een PHP-error? Zo ja, dan is het waarschijnlijk omdat je een header probeert te versturen nadat je al iets ge-echo'd hebt.

jeverink
%Europe/Berlin %595 %2011, 14:16
Hoe zou ik dat geecho probleem dan kunnen oplossen?

Koen!
%Europe/Berlin %615 %2011, 14:46
Niet echo'en voordat je een HTTP header stuurt.

jeverink
%Europe/Berlin %641 %2011, 15:24
ik moet dus:
if($username_exist >= 1){
echo "&vari=" .$fouttekstbes;
setcookie('username', '$name');
setcookie('password', '$pass');

header("Location: http://www.secret.nl/");
mysql_close($con);
exit();
}else{
echo "&vari=" .$fouttekstacc;
mysql_close($con);
exit();
}
veranderen in:
if($username_exist >= 1){
header("Location: http://www.secret.nl/");
echo "&vari=" .$fouttekstbes;
setcookie('username', '$name');
setcookie('password', '$pass');

mysql_close($con);
exit();
}else{
echo "&vari=" .$fouttekstacc;
mysql_close($con);
exit();
}

Tom.
%Europe/Berlin %412 %2011, 09:53
Hoe wil je iets echo'en na een redirect? :)

Als dit trouwens nog fout gaat: kijk even of er geen witregels boven de PHP staan. Komt wel eens voor :)

jeverink
%Europe/Berlin %694 %2011, 16:39
de code is nu:
<?php
$fouttekstcon = "geen verbinding";
$fouttekstacc = "account bestaat niet";
$fouttekstbes = "account bestaat";
$sqlerror = "";
$name = $_POST["user"];
$pass = $_POST["pass"];

$con = mysql_connect("secret","secret","secret");
if (!$con)
{
$sqlerror = mysql_error();
echo "&vari=" .$sqlerror;
}

mysql_select_db("secret", $con);

$checkuser = mysql_query("SELECT * FROM id WHERE username ='$name' AND password ='$pass'");

$username_exist = mysql_num_rows($checkuser);

if($username_exist >= 1){
setcookie('username', '$name');
setcookie('password', '$pass');
mysql_close($con);
header("Location: http://www.secret.nl/");
exit;
}else{
echo "&vari=" .$fouttekstacc;
mysql_close($con);
exit;
}
mysql_close($con);
?>

ik heb het getest met google chrome en mozilla firefox
bij chrome merk ik niks en bij firefox krijg ik onder in het scherm eerst:
.... wordt geladen
en daarne
...... gelezen

op de ....... komt dan de locatie te staan

wat klopt er nu niet?

renegeuze
%Europe/Berlin %941 %2011, 22:35
echo "&vari=" .$sqlerror;
moet een die() zijn ipv echo. Anders gaat je script toch nog proberen functies uit te voeren die dus al niet mogelijk zijn. oa mysql_select_db("secret", $con); zal dan dus vastlopen lijkt me.

Dan:
setcookie('username', '$name');
setcookie('password', '$pass');

Tussen single quotes werken variabelen dus niet als variabelen maar als string. Dus de username in jouw cookie is $name ipv de variabele.
Je kan gewoon de quotes weghalen daar.

jeverink
%Europe/Berlin %510 %2011, 12:15
Dat klopt ja.
Ik heb het zelf verbeterd.(Niet hier op de pagina.)
Toch wordt je nog niet duurgestuurd.
Wat kopt er niet???

Tom.
%Europe/Berlin %524 %2011, 12:34
En als je alleen die header-toestand in een script zet, werkt de redirect dan wel?

jeverink
%Europe/Berlin %559 %2011, 13:25
Ik heb het geprobeerd met de code:

<?php
header("Location: http://www.secret.nl");
?>

Ik wordt noch niet doorgestuurd.
zit er een spelfout in of wat?
Ik test hem wel op een betaalde webhost.

*update*:
Na een beetje onderzoek ben ik erachter gekomen dat je niet doorgestuurd wordt omdat ...........
Er al iets naar de header gestuurd is????
Mijn theorie is dat het kan komen door de "sendAndLoad" functie in mijn as2 script.
Is er een manier m dit op te lossen.

Tom.
%Europe/Berlin %402 %2011, 09:40
Geen witregels of spaties of wat dan ook boven de PHP code staan?

jeverink
%Europe/Berlin %701 %2011, 16:50
nee, geen witregels.

Maar ik heb het zonder problemen simpeler opgelost.
Ik heb de header functie veranderd door een echo.
De flash applicatie stuurt ontvangt nu de echo en veranderd de pagina.

(En dit werkt eindelijk.)

jaspermuts
%Europe/Berlin %043 %2011, 01:03
Een header stuurt de request door, niet de actieve pagina. Als je een php bestand bekijkt, dan word je doorgestuurd naar een andere pagina, maar als je deze inlaadt, gaat het request door en ontvang je in Flash dus de output van de header()-locatie. Je blijft dus altijd op de Flash-pagina, ongeacht wat PHP doet.

Ik vermoed dat jij wilde dat je na het inloggen via Flash direct doorgestuurd wilde worden mbv header, en dat de mensen die je hier hielpen dat niet doorhadden, omdat Flash niet werd genoemd in je beschrijving (alleen adhv '&vari' had men dat kunnen vermoeden).

Je probleem is al opgelost en ik denk dat je daarvoor ook de beste oplossing hebt gevonden, maar ik hoop dat ik je toch nog wat verduidelijking heb gegeven mbt header().

jeverink
%Europe/Berlin %483 %2011, 11:35
Aaaah....

Nu begrijp ik het.
Erg bedankt voor je uitleg.