[PHP] header() probleem

Status
Niet open voor verdere reacties.

MaartehhM

Gebruiker
Lid geworden
27 sep 2005
Berichten
928
Hallo,

Ik heb voor een bepaald script de header() functie nodig om naar een pagina door te verwijzen. Maar dat lukt niet helemaal.

In een heel simpel scriptje had ik de functie uitgeprobeerd (omdat de functie nieuw was voor mij), waarbij je dan op een knop drukt en naar een pagina verwijst. Simpel, werkt.
'Hij' verwees naar een bestandje wat in dezelfde map stond.

Nu in m'n echte script, staat het volgende:

PHP:
session_register("$name");
session_register("$pass");
header("location:login_succes.php");

Het is dus een login script, en zodra je op de knop login drukt, checkt 'ie een paar dingen en verwijst 'ie door naar de volgende pagina.
Waar we aankomen bij mijn probleem.

Ik krijg een HTTP 404 fout, die zegt dat de pagina niet kan worden gevonden. De URL blijft staat op http://localhost/xxxxxxxxxxxxxxxxxxxx/login.php.

Als ik login_succes.php met http://www.google.com vervang, werkt het wel.

Iemand enig idee?

alvast bedankt :)

~Maartehh<
 
Header vereist een volledige URL :)
HTTP/1.1 requires an absolute URI as argument to » Location: including the scheme, hostname and absolute path, but some clients accept relative URIs.
 
Hmm, werkt toch nog niet helemaal.
Ik heb verschillende dingen geprobeerd:

Alleen het bestandje (zoals het ook bij dat hele simpele script werkte? zonder volledige url)
PHP:
header("location:login_success.php");

De volledige url. Krijg nog steeds HTTP-404 fout.
PHP:
header("location:http://localhost/PHP/MySQL/login/login_success.php");

De volledige url tussen aanhalingstekens ( ' ). Dan krijg ik een foutmelding dat ik geen persmission heb. De url wordt dan ook
htt p://localhost/PHP/loginsql/'http://localhost/PHP/MySQL/login/login_success.php'
PHP:
header("location:'http://localhost/PHP/MySQL/login/login_success.php'");

Niet de volledige url tussen aanhalingstekens.
PHP:
header("location:'login_success.php'")

Tja mijn ideeen zijn op.. :/
 
Location geprobeerd? (Dus met hoofdletter)
PHP:
header('Location: http://www.example.com/');
 
Niet geprobeerd, maar dat werkt ook niet helaas.

Ik gebruik overigens USB Webserver, PHP versie 5.2.4, voor het geval dat iets uitmaakt.

Ik heb ook beschikking tot een ftp server, maar daar werkt de functie mysql_fetch_row() niet, dus ik kan daar niet eens mezelf registreren, laat staan inloggen.
 
Laatst bewerkt:
PHP:
session_register("$name");
session_register("$pass");
header("location:login_succes.php");

Om hem door te verwijzen moet je rekening houden dat de headers helemaal aan het begin van het script moeten komen, dus voor enige html. Je kan het zo doen:
PHP:
<?php
$link = 'www.blablabla.nl/login_succes.php';
if(headers_sent()){
  echo'<meta http-equiv="refresh" content="0;URL='.$link.'" />';
} else{
  header('Location: '.$link);
}
?>

In de functie session_register heb je een fout staan, namelijk de $ om een variable aan te duiden.
Je maakt een variable aan die in dit geval $naam heet, dan gebruik je session_register('naam'); en dan wordt er een session variable aangemaakt met als naam naam en als inhoud de inhoud van de variable naam. Het wordt dus:
PHP:
<?php
session_register('naam');
session_register('pass');
?>
[PHP]

Hier zit alleen een nadeel aan: als in de server instellingen register_globals uit staat dan werkt de functie session_register niet! Vanaf PHP versie 4.2 staat hij standaart uit, en aangezien jij PHP 5 gebruikt werkt dit niet. Je kunt nu twee dingen doen: in de php config register_globals aan zetten of de sessie op een andere manier starten, namelijk zo:
zet boven aan je bestand session_start();
[PHP]
<?php
session_start();
?>
ipv session_register('naam') en session_register('pass') doe je:
PHP:
<?php
$_SESSION['naam'] = $naam;
$_SESSION['pass'] = $pass;
?>



hopelijk heb je hier iets aan ;)
 
Bedankt voor je antwoord :)

Toch volg ik het niet helemaal. In het begin van m'n login.php, moet ik dus voor de <html> etc. dit zetten:

PHP:
session_start();	
$link = "http://localhost/PHP/loginsql/login_success.php"; 
if(headers_sent())
  { 
  echo'<meta http-equiv="refresh" content="0;URL='.$link.'" />'; 
  }
else
	{ 
  header('Location: '.$link); 
  }

Maar dat doet 'ie dus al voordat uberhaubt op de submit knop is gedrukt?
Of moet ik dan een soort send.php maken?
 
De functie session_start() is nodig om een sessie te starten, als je dit niet doet kan je later niets in de sessie stoppen/lezen, dit moet je dus eigenlijk op elke pagina zetten... (session_register() opent automatisch een session als die nog niet bestaat)
Het klopt dat je dit helemaal bovenaan moet plaatsen, dus nog boven de <html> tag.

PHP:
<?php
$link = 'http://localhost/PHP/loginsql/login_success.php';
if(headers_sent()){
  echo'<meta http-equiv="refresh" content="0;URL='.$link.'" />';
} else{
  header('Location: '.$link);
}
?>
Dat stukje zet je neer op de plek waar je hem moet laten doorsturen naar de andere pagina, dus nadat je gecontroleerd hebt of de gegevens goed zijn en je de variabelen in de sessie gezet hebt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan