Avatar billede cmau Nybegynder
29. august 2006 - 17:20 Der er 53 kommentarer og
1 løsning

tjekke at siden hentes ud af index og ikke vises alene

Hejsa

Jeg har en kode som henter mine siderr ud i index, som indeholder designet.

Hvordan tjekker jeg så på fx search.php, at den skal kaldes som index.php?page=search.php(Med evt &keyword=, altså man kan srkive mere efter) og hvis den bare kaldes /search.php skal den smutte til index.php?page=search.php
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:26 #1
Nu programmerer jeg ikke i PHP, men jegmener at du kan bruge:

if ($page=="") {
header("Location: index.php?page=search.php");
exit;
}
Avatar billede zurekk Nybegynder
29. august 2006 - 17:34 #2
"og hvis den bare kaldes /search.php skal den smutte til index.php?page=search.php"
Hvis hvad kaldes /search.php?
Avatar billede shooka Nybegynder
29. august 2006 - 17:40 #3
<?php
$self = $_SERVER['PHP_SELF'];
if($self != "/index.php")
{
// Vises hvis siden ses uden index.php
}
?>
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:40 #4
Avatar billede cmau Nybegynder
29. august 2006 - 17:42 #5
shooka >

Den skal tage selve filens navn og sende til index.php?page=filnavn.php
Avatar billede cmau Nybegynder
29. august 2006 - 17:43 #6
thesurfer > Præcis, men din er slet ikke sikker, folk kan blot skrive ?page efter search.php
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:43 #7
<?php
$self = $_SERVER['PHP_SELF'];
if($self != "/index.php")
{
  header("Location: /index.php?page=" . $_SERVER['PHP_SELF']);
}
?>

bygget videre på shookas kode..
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:46 #8
Ahh.. man skal bruge $_SERVER['SCRIPT_NAME'] anden gang..

<?php
$self = $_SERVER['PHP_SELF'];
if($self != "/index.php")
{
  header("Location: /index.php?page=" . $_SERVER['PHP_NAME']);
}
?>

Man skal muligvis erstatt "/" med "" (ingenting) for at fjerne "/" i "/search.php"..
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:48 #9
Eksempel:

<?php
$self = $_SERVER['PHP_SELF'];
if($self != "/index.php")
{
  header("Location: /index.php?page=" . str_replace("/", "", $_SERVER['PHP_NAME']));
}
?>
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:49 #10
Man skal huske "exit":

<?php
$self = $_SERVER['PHP_SELF'];
if($self != "/index.php")
{
  header( "Location: /index.php?page=" . str_replace("/", "", $_SERVER['PHP_NAME']) );
  exit;
}
?>
Avatar billede cmau Nybegynder
29. august 2006 - 17:50 #11
Hehe :)

Den virker desværre ikke

Notice: Undefined index: PHP_NAME in c:\programmer\php\www\asdasd\asdsd.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at c:\programmer\php\www\asdasd\asdsd.php:5) in c:\programmer\php\www\asdasd\asdsd.php on line 5
Avatar billede coderdk Praktikant
29. august 2006 - 17:53 #12
En anden måde... I index.php:

<?php

    define( "IN_INDEX", 1 );

    // Først tager vi den fulde sti til den folder hvor dette script er
    $root = dirname( __FILE__ );
    // Her sætter vi en default side, hvis ingen page er angivet
    $page = ( !empty( $_GET['page'] ) ? $_GET['page'] : 'defaultpage.php' );
    // Denne oversætter vi til en "rigtig" sti i filsystemet med realpath()
    // Findes filen ikke returnerer realpath() en tom streng
    $page = realpath( $page );
    // Her checker vi om filen starter med det samme som den fulde sti til den
    // folder hvor scriptet ligger i - med andre ord, den gør at du kun kan include
    // filer der er i samme folder eller dybere end den aktuelle folder - aldrig
    // under - altså ikke ../../osv - Desuden vil vi ikke tillade at man angiver
    // include scriptet som page
    if ( substr( $page, 0, strlen( $root ) ) != $root && $page != __FILE__ )
    {
        $page = '404error.php';
    }
    include( $page );

?>

I toppen af dine andre sider, som search.php:

  if ( !defined( "IN_INDEX" ) )
  {
      header( "location: index.php?page=" . basename( $_SERVER['SCRIPT_NAME'] ) . "&" . $_SERVER['REQUEST_QUERYSTRING'] );
  }
Avatar billede cmau Nybegynder
29. august 2006 - 17:54 #13
Du sagde selv det hed script_name :)


Warning: Cannot modify header information - headers already sent by (output started at c:\programmer\php\www\asdasd\index.php:1) in c:\programmer\php\www\asdasd\asdsd.php on line 5
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:57 #14
cmau> Ang 29/08-2006 17:54:21:
IF-sætningen SKAL være det første i filen! Og Der må ikke være mellemrum/tomme linier før det først "<?"..
Avatar billede cmau Nybegynder
29. august 2006 - 17:57 #15
coderdk:

Får denne fejl, det kan godt være fordi min sql bliver includet i indexfilen.


Notice: Undefined index: REQUEST_QUERYSTRING in c:\programmer\php\www\party\top.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at c:\programmer\php\www\party\top.php:3) in c:\programmer\php\www\party\top.php on line 3

Warning: mysql_query(): Access denied for user 'ODBC'@'localhost' (using password: NO) in c:\programmer\php\www\party\articles.php on line 4

Warning: mysql_query(): A link to the server could not be established in c:\programmer\php\www\party\articles.php on line 4
Access denied for user 'ODBC'@'localhost' (using password: NO)
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:57 #16
Så skal det nok være: $_SERVER['SCRIPT_FILENAME']
Avatar billede thesurfer Nybegynder
29. august 2006 - 17:58 #17
Hmm...:

"'SCRIPT_NAME'

Contains the current script's path. This is useful for pages which need to point to themselves."

kilde: http://dk2.php.net/reserved.variables
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:00 #18
Ang "Warning: Cannot modify header information - headers already sent by (output started at c:\programmer\php\www\party\top.php:3) in c:\programmer\php\www\party\top.php on line 3":

Det er fordi du bruger "header" EFTER at noget er sent afsted til browseren..

Det kan være "nylinie", tom linie, mellemrum, eller "echo" før "header".
Avatar billede cmau Nybegynder
29. august 2006 - 18:03 #19
thesurfer > Jamen top.php starter sådan her uden mellemrum eller linjeskift:
<?
if ( !defined( "IN_INDEX" ) ) {
    header( "location: index.php?page=" . basename( $_SERVER['SCRIPT_NAME'] ) . "&" . $_SERVER['REQUEST_QUERYSTRING'] );
}
?>

Øvrige filer starter sådan her uden mellemrum eller linjeskift:
<?
include('top.php');
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:06 #20
Hvis det er sandt (hvilket jeg går ud fra at det er), så kan du ikke få header-fejlen..
Avatar billede cmau Nybegynder
29. august 2006 - 18:13 #21
Bruger endda ob_start(); og ob_end_start(); som beskrevet her: http://webmaster.hephey.dk/guide/40/
Avatar billede cmau Nybegynder
29. august 2006 - 18:15 #22
Ob_end_flush(); sorry.
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:17 #23
"ob_start();" skal være i "top.php", da dens indhold kommer først..
"Ob_end_flush();" skal være i den fil, der er sidst/nederest..
Avatar billede cmau Nybegynder
29. august 2006 - 18:20 #24
Nej ob_start(); skal være i toppen af index.php det er den først og først midt på denne bliver search.php udskrevet og i toppen af denne top.php.
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:25 #25
Ahh, ja..

<?
ob_start();
include('top.php');
...
?>

Men du burde ikke kunne få header-fejlen.. Er du sikker på at du tester med de rigtige filer, og ikke en kopi/anden placering?
Avatar billede cmau Nybegynder
29. august 2006 - 18:36 #26
Hvis jeg åbner index.php?page=articles.php kommer der ingen fejl, kun ved articles.php der får jeg:

Notice: Undefined index: REQUEST_QUERYSTRING in c:\programmer\php\www\party\top.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at c:\programmer\php\www\party\top.php:3) in c:\programmer\php\www\party\top.php on line 3

Warning: mysql_query(): Access denied for user 'ODBC'@'localhost' (using password: NO) in c:\programmer\php\www\party\articles.php on line 4

Warning: mysql_query(): A link to the server could not be established in c:\programmer\php\www\party\articles.php on line 4
Access denied for user 'ODBC'@'localhost' (using password: NO)
Avatar billede shooka Nybegynder
29. august 2006 - 18:41 #27
Skal videresendelsen ske i PHP, eller må den ske i meta... I så fald:

<?php
$self = $_SERVER['PHP_SELF'];
if($self != "/index.php")
{
$self1 = str_replace("/","", $_SERVER['PHP_SELF']));
echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=/index.php?page=".$self1."\">";
}
?>
Avatar billede shooka Nybegynder
29. august 2006 - 18:42 #28
Som skal være:

<?php
$self = $_SERVER['PHP_SELF'];
if($self != "/index.php")
{
$self1 = str_replace("/","", $_SERVER['PHP_SELF']);
echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=/index.php?page=".$self1."\">";
}
?>
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:44 #29
Jeg vil ikke anbefale meta-redirect, da det kan deaktiveres (i visse browsere eller software).

Ang "Notice: Undefined index: REQUEST_QUERYSTRING in c:\programmer\php\www\party\top.php on line 3":

Du skal muligvis først sikre dig, at der står noget i $_SERVER['REQUEST_QUERYSTRING'] før du bruger det
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:45 #30
Gad vide om fejlmeldingen "Notice: Undefined index: REQUEST_QUERYSTRING..." er skyld i fejlen "Warning: Cannot modify header information - headers already sent..."

Jeg tror at den fortæller dig, at udskriftsfejlen start på linie 3:

Warning: Cannot modify header information - headers already sent by (output started at c:\programmer\php\www\party\top.php:3) in c:\programmer\php\www\party\top.php on line 3
Avatar billede cmau Nybegynder
29. august 2006 - 18:45 #31
thesurfer hvordan gøres dette, det var jo noget coderdk skrev i koden.
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:47 #32
Noget i stil med:

<?
if ( !defined( "IN_INDEX" ) ) {
$q = "";
$q = $_SERVER['REQUEST_QUERYSTRING'];

    header( "location: index.php?page=" . basename( $_SERVER['SCRIPT_NAME'] ) . "&" . $q );
}
?>
Avatar billede shooka Nybegynder
29. august 2006 - 18:48 #33
Ja thesurfer, det kan deaktiveres, men hvem gider kigge på en blank side?
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:49 #34
Eller:

<?
if ( !defined( "IN_INDEX" ) ) {

$q = "";
if (isset($_SERVER['REQUEST_QUERYSTRING'])) { $q = $_SERVER['REQUEST_QUERYSTRING']; }

    header( "location: index.php?page=" . basename( $_SERVER['SCRIPT_NAME'] ) . "&" . $q );
}
?>
Avatar billede shooka Nybegynder
29. august 2006 - 18:49 #35
Mystisk, du skriver, at du ikke koder PHP, og alligevel lader det til, du er god til det?
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:50 #36
shooka> Det er heller ikke en blank side.. Det er jo search.php.

Men det er ikke det der er pointen.
Pointen er:
Man skal aldrig overlade vigtige ting til brugeren, eller klientsiden, hvis man kan undgå det.
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:51 #37
shooka> Jeg koder i HTML, JavaScript, ASP, C#.. så er der ikke så langt til PHP.. :-)
Avatar billede thesurfer Nybegynder
29. august 2006 - 18:51 #38
ASP / VBScript / VB.. det er jo det samme.. sådan nogenlunde.. :-)
Avatar billede shooka Nybegynder
29. august 2006 - 18:53 #39
Hvordan er du så havnet i denne kategori? :)
Avatar billede thesurfer Nybegynder
29. august 2006 - 19:00 #40
shooka> Fordi jeg nærmest kunne genkende problemet ud fra titlen.

JavaScript-løsningen på dette problem, kan man finde her: http://roenving.users.whitehat.dk/Kode/FramingKode.html

Jeg kigger ind i alle mulige kategorier, og udvidere min horisont..


Man skulle også gerne kunne bruge !empty:

<?
if ( !defined( "IN_INDEX" ) ) {

$q = "";
if (!empty($_SERVER['REQUEST_QUERYSTRING'])) { $q = $_SERVER['REQUEST_QUERYSTRING']; }

    header( "location: index.php?page=" . basename( $_SERVER['SCRIPT_NAME'] ) . "&" . $q );
}
?>
Avatar billede thesurfer Nybegynder
29. august 2006 - 19:00 #41
shooka> PS: Der er heldigvis søgemaskiner.. det man ikke ved, kan man finde.. :-)
Avatar billede shooka Nybegynder
29. august 2006 - 19:10 #42
Er det ikke en lidt stor mundfuld at kunne alle programmeringssprogene?
Avatar billede thesurfer Nybegynder
29. august 2006 - 19:24 #43
Jo, det går da også galt nogen gange.. :-)
Man skriver syntax'en til sprog A inde i sprog B, og undre sig over hvorfor det ikke virker.. så går det op for en, at syntax'en faktisk tilhører sprog B.. :-)

Man kan nemt komme til at blande dem..
Avatar billede shooka Nybegynder
29. august 2006 - 19:37 #44
Ligesom tysk og engelsk i skolerne
Avatar billede thesurfer Nybegynder
29. august 2006 - 19:45 #45
Jeg synes at tysk ligger langt fra engelsk.. men ja, det kan man vel godt sige.. :-)

Gad vide hvor cmau blev af..? Han svarer ikke rigtigt på forslag osv..
Avatar billede shooka Nybegynder
29. august 2006 - 19:49 #46
Der er altså også en forskel på ASP og PHP

Tjaah, hvor mon han blev af.
Avatar billede coderdk Praktikant
29. august 2006 - 22:47 #47
Sorry var lige lidt væk, prøv med:

  if ( !defined( "IN_INDEX" ) )
  {
      $qs = ( !empty( $_SERVER['REQUEST_QUERYSTRING'] ) ? '&' . $_SERVER['REQUEST_QUERYSTRING'] : '' );
      header( "location: index.php?page=" . basename( $_SERVER['SCRIPT_NAME'] ) . $qs );
      exit;
  }
Avatar billede coderdk Praktikant
29. august 2006 - 22:49 #48
Programmeringssprog er nemme at lære når du først kender ét eller to :) Koder selv i php/c#/python/delphi/c og nogle få andre hvor jeg ikke har så meget træning - Problemet er ikke at lære sprogene, men hvert sprogs værktøjskasse (her har C#/.NET en formidabel en)... :)
Avatar billede shooka Nybegynder
29. august 2006 - 22:58 #49
Jeg har kun kendskab til PHP, men det lyder åbenbart som om, jeg burde lære nogle flere :-)
Avatar billede shooka Nybegynder
29. august 2006 - 23:21 #50
Jeg har faktisk tænkt en del på C#, jeg var da også startet. Så var det bare, jeg fandt ud af hvor mange ting det kunne, og så gik det galt.
Avatar billede coderdk Praktikant
30. august 2006 - 00:51 #51
Kiggede lige efter, den løsning jeg kom med sidst, er faktisk det samme som den thesurfer kom med tidligere (kun syntax er forskellig)
Avatar billede cmau Nybegynder
30. august 2006 - 22:47 #52
Hehe jeg forsvandt lige da jeg fik en ide om at jeg ville starte en blog :)Nå men thesurfers 29/08-2006 19:00:11 virkede fint.

Smider du svar thesurfer?
Avatar billede thesurfer Nybegynder
30. august 2006 - 23:34 #53
Yep.. :-)
Avatar billede thesurfer Nybegynder
30. august 2006 - 23:36 #54
Husk lige at tilføje "exit;", som stopper afvikling af resten af koden:

<?
if ( !defined( "IN_INDEX" ) ) {

$q = "";
if (!empty($_SERVER['REQUEST_QUERYSTRING'])) { $q = $_SERVER['REQUEST_QUERYSTRING']; }

    header( "location: index.php?page=" . basename( $_SERVER['SCRIPT_NAME'] ) . "&" . $q );
    exit;
}
?>
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