PHP, header() finns det nåt liknande?

Permalänk

PHP, header() finns det nåt liknande?

Har ett litet php-problem här igen.
Jag har en liten kodsnutt som ser ut så här:

if(mssql_num_rows($res)==1)
{
session_start();
$_SESSION['logged_in'] = true;
header("Location: blaha.php");
}
else
{
echo "thou hath failed";
}

Problemet är, att den inte alls ligger i längst upp i min php-fil, vilket är kravet för "header()-funktionen". Så det jag undrar är helt enkelt, finns det nån annan liknande funktion som man kan ha var man vill? Det jag vill åstadkomma är alltså att man ska flyttas från min index.php till blaha.php ifall man har lyckats logga in.

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk
Medlem

varför kan du inte lägga det högst upp i filen då? tror header ska ligga innan något, men minns inte vad, var flera år sen jg höll på med php

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Medlem

header("Location: blaha.php");

Kommer fungera där den ligger nu. Jag har liknade filer där jag använder header(Location) i if-satser och det fungerar utmärkt

Permalänk
Medlem

Du ska inte ha något annat som skriver något i källkoden till sidan som visas bara, annars kan man ju alltid köra @header och hoppas på det bästa

Permalänk
Medlem

Användning av header() ställer krav på att du inte skriver något till output innan du göra detta anrop.

Citat:

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.

Det finns dock en annan lösning, användning av ob_start(). Åsikterna för om man bör eller inte bör använda ob_start() går dock isär.

Permalänk
Medlem

Vad är egentligen det bästa sättet att kolla ett värde och beroende av värdet gå till en viss sida? Jag använder själv ofta header() i if-satser och ibland JavaScript om sidan ska hållas kvar om värdet tar lite längre tid att sättas.

Visa signatur

i7 920 | 12GB DDR3 | GTX 480 | GA-X58A-UD7 | 160GB SSD X25-M G2 | 1TB F3 HD103SJ | W7 64-bit | Mac Mini
Webb: bluekitestudios.com

Permalänk
Medlem

Jag brukar också använda header, men först:
1. finns det ett värde?
2. är värdet av rätt typ?
3. har det rätt värde?
4. och sist header

Visa signatur

citera!

Permalänk

@Garret: Tack, det var ob_start() jag sökte efter. Bryr mig inte så starkt om det rekommenderas eller inte Det ska inte va nån supersida. Dock märkte jag att den klagade lika mkt på att session_start() inte låg i headern. Så jag tror att jag får fixa om sidan så att allt bli en enda fet php-fläck
@civ1: Nej, det kommer inte att funka eftersom den lilla kodsnutten låg längst ner i php-filen

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk

session-start skickar väl en header vilket gör att den inte kan ligga före? Om det inte är en supersida kan du väl bara skicka ut en meta-redirect om användaren ska dirigeras om?

Visa signatur

/Mvh Stefan

Permalänk

Jo, jag antar att det är en header, annars borde det väl inte klagat Men, vad är en meta-redirect och hur använder man det..? Länk till tutorial? Eller förklaring här å nu funkar ju också

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk

Google är din vän

http://webdesign.about.com/od/metataglibraries/a/aa080300a.ht...

Du lägger metatagen i head-elementet på sidan:

Redirecting to a New Page with the Meta Refresh Tag

To redirect to a new page, the syntax is nearly the same:

<meta http-equiv="refresh" content="2;url=http://webdesign.about.com">

content="2;url=http://webdesign.about.com/" - The number is the time, in seconds, until the page should be redirected. Then, separated by a semi-colon (;) is the URL that should be loaded.

Visa signatur

/Mvh Stefan

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Guru Meditation
Google är din vän

http://webdesign.about.com/od/metataglibraries/a/aa080300a.ht...

Du lägger metatagen i head-elementet på sidan:

Redirecting to a New Page with the Meta Refresh Tag

To redirect to a new page, the syntax is nearly the same:

<meta http-equiv="refresh" content="2;url=http://webdesign.about.com">

content="2;url=http://webdesign.about.com/" - The number is the time, in seconds, until the page should be redirected. Then, separated by a semi-colon (;) is the URL that should be loaded.

Japp, bästa lösningen enligt mig. Nackdelen är att det inte valideras mot xhtml (då man skriver ut det i body) så se till att det är 0 sekunders fördröjning innan redirection så inte användare börjar klaga på validering.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Leedow
användare börjar klaga på validering.

Användare bryr sig inte om validering – det är i princip bara andra webbutvecklare som tycker om att sätta dit folk som klagar på det.
Sen bör man ju givetvis skriva validerande kod, men valideringen är ett verktyg, ingen kvalitetskontroll.

Permalänk

Google och Guru Meditation är mina vänner Tack! Men jag har fortf. lite problem.
Session_start() klagar fortfarande på att den inte är i headern, och jag börjar fundera, vad räknas som headern? Den liggar nämligen i det absolut första php-blocket (och det första blocket i hela filen). Det enda jag gör innan är att koppla upp mig till en databas för att hämta lite info.
Och har ni nåt förslag på nåt som kan va bättre att använda än session_start()?
Vill om möjligt gärna ha kvar login-kontrollen.

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You
Användare bryr sig inte om validering – det är i princip bara andra webbutvecklare som tycker om att sätta dit folk som klagar på det.
Sen bör man ju givetvis skriva validerande kod, men valideringen är ett verktyg, ingen kvalitetskontroll.

Stämmer bra det, jag generaliserade lite för hårt.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk

Du skriver inte ut något mellanslag eller så. Ligger <?-taggen absolut först i textfilen? Använder du utf-8 utan BOM eller med BOM? Det sistnämnda brukar ge skräptecken i början av filen.

Visa signatur

/Mvh Stefan

Permalänk

<?php
$userid = intval($_GET['UserID']);
$pincode = intval($_GET['Pincode']);

if(!empty($userid))
{

$conn = mssql_connect(FUNGERANDE SÖKVÄG)
or die("Could not connect !");
echo "<p>Connected successfully</p>";

$query = "SELECT * FROM PROJ_Account_Holder WHERE UserID = '{$userid}' AND PinCode = '{$pincode}'";

$res = mssql_query($query)
or die("Could not query database");

mssql_close($conn);

if(mssql_num_rows($res)==1)
{
session_start();
$_SESSION['logged_in'] = true;
header("Location: blaha.php");
}
else
{
echo "Thou hath failed thyne login good sir.";
}

}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<p>
UserID:
<input type="int" name="UserID"/>
<br />
Pincode:
<input type="password" name="Pincode"/>
<br />
<button type="submit" name="Login">Login</button>
</p>

</form>

Så ser min kod ut för tillfället, har hoppat fram å tillbaka mellan massa olika.

EDIT: Och jag vet förresten inte vad utf-8 med eller utan BOM är Sitter å skriver i SciTe om det nu är nån info.

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk

UTF-8 är encodingen på textfilen som du jobbar med. Kör man encoding UTF-8 Med BOM (Byte Order Mark) kan man få lite lustiga skräptecken som hamnar överst i filen, bra då att byta till UTF-8 utan BOM. Brukar finnas något fint val i någon meny nånstans.

Visa signatur

/Mvh Stefan

Permalänk

Hittade UTF:en nu. Standard var tydligen "Code Page Property", men det gjorde ingen skillnad när jag bytte till UTF-8 (utan BOM). Men som sagt, kanske finns nåt enklare sätt att lösa det..?
Det jag vill ha är alltså:
a) Formulär där man fyller i ID och pinkod.
b) Connection till databas där det kontrolleras om den kombinationen av ID å kod finns.
c) Redirect till en ny sida
d) Nånting som "$_SESSION['logged_in']" som kollar om man loggat in ordentligt.

Är tacksam för alla förslag!

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk
Relik 📜

session_start ska ligga allra, allra överst om jag minns rätt.. Alltså över din $userid-tilldelning.

Visa signatur

För övrigt anser jag att Karthago bör förstöras.
▪ Nöje #1 -> i5-11400F - B560M-ITX/ac - RTX 3070 - 16 GB DDR4
▪ Nöje #2 -> R5 5600 - Prime B450-Plus - RX 6750 XT - 16 GB DDR4
▪ Mobilt -> HP Pavilion Aero - R5 5625U - 16 GB DDR4
▪ Konsol -> Steam Deck, Xbox Series S

Permalänk

<?php
session_start();
$userid = intval($_GET['UserID']);
$pincode = intval($_GET['Pincode']);

(...)

if(mssql_num_rows($res)==1)
{
//session_start();
$_SESSION['logged_in'] = true;
ob_start("Location: blaha.php");
}

(...)

Har nu prövat att ändra till det här. session_start() klagar den inte på längre, men header_start() var ju fortf. ett problem, så jag prövade att byta till ob_start() som tydligen ska funka. Men då händer istället ingenting. Why oh why..?

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk

Du skulle ju hoppa över at sätta location i en header och skriv ut en meta redirect i head-element istället kom vi väl överens om?

Visa signatur

/Mvh Stefan

Permalänk

Haha, just ja, glömde, men då kom ju ett nytt problem istället. Jag vill ju ha det i en if-sats, men if-satsen är ju php och meta-taggen verkar ju va html. Eller den funkar inte i php:et iaf.
Jag kan ju inte heller bara avbryta php:et så här:

<?php
blablablabl

if(balsfasfa)
{
?>
META REDIRECT
<?php
}
abtaelta
?>

Då körs ju redirecten hela tiden oberoende av min if-sats.

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk

Jodå, du kan avbryta den precis så. PHP håller sig till if-satsen ändå. En annan variant är att köra:

<?php if(blabla) { echo '<META BLABLA>'; }

Visa signatur

/Mvh Stefan

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av PigPillow
Haha, just ja, glömde, men då kom ju ett nytt problem istället. Jag vill ju ha det i en if-sats, men if-satsen är ju php och meta-taggen verkar ju va html. Eller den funkar inte i php:et iaf.
Jag kan ju inte heller bara avbryta php:et så här:

<?php
blablablabl

if(balsfasfa)
{
?>
META REDIRECT
<?php
}
abtaelta
?>

Då körs ju redirecten hela tiden oberoende av min if-sats.

Kör: echo 'din metadata här';

Visa signatur

i7 920 | 12GB DDR3 | GTX 480 | GA-X58A-UD7 | 160GB SSD X25-M G2 | 1TB F3 HD103SJ | W7 64-bit | Mac Mini
Webb: bluekitestudios.com

Permalänk

Haha, ok, det här är ju nästan pinsamt. Jag som tyckte att jag hade prövat just det. Ajja, hade väl nåt annat fel som spökade samtidigt då antar jag.

Tack så jättemkt för hjälpen! Jag lär väl återkomma om jag fastnar med nåt nytt mystiskt problem

Visa signatur

Nöken - A Pet Dragon for Bold Princesses

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av PigPillow
Haha, ok, det här är ju nästan pinsamt. Jag som tyckte att jag hade prövat just det. Ajja, hade väl nåt annat fel som spökade samtidigt då antar jag.

Tack så jättemkt för hjälpen! Jag lär väl återkomma om jag fastnar med nåt nytt mystiskt problem

Pinsamt är det inte på långa vägar, är ju en hel del att hålla koll på med php -> sessioner -> html.

Visa signatur

i7 920 | 12GB DDR3 | GTX 480 | GA-X58A-UD7 | 160GB SSD X25-M G2 | 1TB F3 HD103SJ | W7 64-bit | Mac Mini
Webb: bluekitestudios.com