18. december 2010 - 18:23 Der er 12 kommentarer og
1 løsning

Kalde en side fra en anden side.

Jeg ved at man i en html form saetter action='[en anden side]' hvorved denne anden side kaldes naar formen submittes.  Jeg kender ogsaa header('Location: [en anden side]') hvorved der redirrigeres til denne anden side hvis koden placeres foer noget andet output.  Men jeg har et behov som ikke kan kodes (eller som jeg ikke har fundet ud af at kode) i en form eller en header.  Her er situationen:

Jeg har en serie sider, area.php, country.php, district.php, o.s.v. hvor man trinvis kan soege paa objekter.  Paa hvert trin i soegningen vises en tabel med detaljer af de objekter der falder indenfor soegningen.  Hvis man for eksempel har valgt area = Europa, country = Danmark, district = Fyn faar man alle fynske og kun fynske objekter.  Paa hvert objekt kan man foretage handlinger, for eksempel slette objektet.  Naar et objekt er slettet skal det ikke laengere vises.  Hvis man sletter det sidste fynske objekt skal siden forsvinde og man skal igen se country siden. 

Tabellen der viser objekter har for hvert objekt en form til at slette objektet saaledes:

<form action='?slette=TRUE'>....<input type='submit' name='stock'></form>

Ved submit forbliver man paa samme side hvor man indfanges af denne kode:

if($_GET['slette'])
{
  ....
  include('delete.php');
}

hvor delete.php saa indeholder koden der sletter objektet i databasen.

For at gaa tilbage til country.php hvis man har slettet det sidste fynske objekt har jeg proevet dette:

if($_GET['slette'])
{
  ....
  include('delete.php');
  if([test for ikke flere objekter]) header('Location: country.php');
}

men det virker ikke.  Aabenbart betragtes include som output som blokkerer for header.  Hvis jeg ud-kommenterer //include('delete.php') eller toemmer delete.php helt for kode saa kommer jeg uden problemer tilbage, men saa bliver objektet jo ikke slettet.  Jeg har ogsaa proevet at placere slette koden direkte i if($_GET..) i stedet for include, men med samme negative resultat.

Hvordan skal jeg gribe det an at kalde country.php fra district.php og andre side-til-side kald udenfor html forms og headers?
Avatar billede claes57 Ekspert
18. december 2010 - 18:46 #1
kan du ikke kalde country.php med en parameter, så den selv finder ud af at include delete af de relevante data.
18. december 2010 - 19:20 #2
claes57, det har jeg selv spekuleret paa, og hvis det er det sidste fynske objekt man sletter saa vil man befinde sig i country=danmark som man skal.  Men der er flere fynske objekter faar man saa det omvendte problem automatisk at komme til distrikt=fyn siden og vise resten af de fynske objekter.

Det jeg haaber paa er hjaelp direkte til det spoergsmaal jeg stillede, altsaa situationen hvor man befinder sig paa distrikt=fyn, tester om der er flere fynske objekter, og hvis svaret er nej saa flytte sig til Country.  Kender du eller kan du forestille dig en loesning paa det?
Avatar billede claes57 Ekspert
18. december 2010 - 21:04 #3
havde det været en mindre datamængde, så ville jeg have trukket alt ud på en gang, og lavet det i skjulte/viste <div>'er.
Jeg har oplevet sites, hvor de har hele postnummer-tabellen i dk liggende - men det er ikke det optimale.

Men det må ligge i din opbygning af databasen om du kan gå et trin tilbage og se, om der er tilsvarende. Postnumre fra post.dk er opbygget med gade/by/provins/land - de har så provins som 'alt udenfor valby bakke' og land er 1 for dk, derudover færørerne og grønland. Hvis du får lavet en opdeling, så den passer med (land=1, region=5 => fyn) så kan det køres.
18. december 2010 - 21:36 #4
Jeg har nok vaeret for omstaendelig i at forklare hvad mit spoergsmaal gaar ud paa.  Det beklager jeg.  Jeg proever forfra:

Det jeg soeger er en kommando/funktion i html/php/javascript der fra en side vil kalde en anden side.  Jeg kender header ("Location: [en side]") og <form action="[en side]"> der hver har deres brug.  Jeg leder efter et eller andet hvorved jeg kan kalde en side i tilfaelde hvor ingen af ovennaevnte er mulige.  For eksempel paa en side districts.php implementere denne pseudokode:

if($a > 5) [kald country.php]

Findes der saadanne muligheder?
Avatar billede tjens Nybegynder
18. december 2010 - 22:32 #5
Din Header sidst i spørgsmålet burde virke, hvis bare du sørger for at der ikke er nogen form for html output inden linien.

Prøv at flytte det til toppen af scriptet, og sørg for at delete.php heller ikke outputter noget html.
Avatar billede webweaver Praktikant
19. december 2010 - 02:45 #6
Som tjens er inde på, burde det slet ikke være et problem at få det til at virke med header! Det vil typisk være måden at gøre det på. Som sagt intet output før headeren. Ryk koden op i toppen af filen.

Hvis det slet ikke virker, så drop din include med delete.php og så link via formen til filen. altså action="delete.php?id=etTal" og så hav din header derinde. Det vil virke.
Avatar billede webweaver Praktikant
19. december 2010 - 02:49 #7
I øvrigt kan det siges, at det vel slet ikke burde være nødvendigt med en form til at slette data, men bare et simpelt link. Er der nogen speciel grund til at du ikke har dette?
19. december 2010 - 06:01 #8
Tak for den viste interesse.  Ja, der er altid, eller ofte, flere maader at goere tingene paa, og jeg er da ogsaa i gang med at lede efter alternativer.  Men jeg vil gerne udvide min 'redskabs-kiste,' og jeg leder som sagt efter en maade hvor man fra midten af en side kan hoppe til en anden side, saa som:

if($a > 5) [kald country.php] 

Det kommer ovenstaaende indlaeg ikke ind paa.  Er grunden at saadanne muligheder slet ikke findes?
Avatar billede tjens Nybegynder
19. december 2010 - 11:51 #9
Det kunne måske ordnes med java script:

i HEAD tilføjes:
<script type="text/javascript">
  var newHREF = "this"; // udføres før onload();

  // funktion onload udføres først når script tags i HEAD og BODY er udført
  window.onload = function () {
    if (newHREF != "this") {
        window.location.replace(newHREF);
    }
  }
</script>
Hvis du allerede har en onload funktion skal ovenstående if, bare sættes ind i den.

i BODY, fra din nuværende delete funktion, outputter du et nyt script afsnit, som overskriver værdien af newHREF ovenfor, hvis der ikke er flere records i districts:

<script type="text/javascript">
  newHREF = "country.php"; // udføres før onload() men efter HEAD;
</script>
Avatar billede webweaver Praktikant
19. december 2010 - 11:51 #10
Det gør det også - headeren som du selv har nævnt.

Din if sætning med din header der sender dig videre inde i, skulle virke ganske fint. Så længe man holder det i toppen af filen, før andet output. Det har jeg ihvertfald personligt brugt tit, så kan ikke se hvorfor det ikke skulle virke for dig :)

Du har så en include med inde i billedet, men du kan også sagtens have din if sætning med header inde i din include. Det bør også virke!

Er det ikke muligt at fjerne det output som der er før din include?
19. december 2010 - 12:38 #11
tjens, lad mig lige forstaa det trin for trin.  Altsaa hvis er i district.php og jeg vil kalde country.php hvis $a>5 saa skal koden i BODY vaere saaledes:

if($a>5)
{
  <script type="text/javascript">
    newHREF="country.php"
  </script>
}

Naar district.php oprindelig dannes saa dannes foerst HEAD med undtagelse af onload funktionen, derefter dannes BODY, og til slut dannes i HEAD onload funktionen.  Saa naar HEAD dannes faar variabelen newHREF vaerdien "this". Mens BODY dannes konstateres det at $a > 5 og newHREF faar tilkendt vaerdien "country.php".  Til slut naar onload funktionen dannes konstateres det at variabelen newHREF er forskellig fra "this" og window.location.replace(newHREF) sparker ind og kalder siden country.php.

Har jeg, i store linier, forstaaet det nogenlunde rigtigt?  Hvis ja, er svaret paa mit spoergsmaal saa ikke: "Ja, man kan fra en side kalde en anden uden gennem en form og uden gennem header, nemlig ved hjaelp af javascript funktionen window.location.replace([den nye side])!"

Hvis det ogsaa er rigtigt saa maa det tredje spoergsmaal (man har altid tre spoergsmaal til sin gode fe) vaere: vil du oprette et svar for points?

webweaver, ogsaa tak, men du svarer rent faktisk paa noget andet end det jeg spoerger om.  Og claes57, jeg fik dig vist ledt paa vildspor med den min omstaendelige beskrivelse i mit oprindelige spoergsmaal.

En fortsat god soendag til alle oenskes fra Belgien.  Her sner det kraftigt.
Avatar billede tjens Nybegynder
19. december 2010 - 20:49 #12
Jo, din beskrivelse passer helt med ideen.

Dog skal du også tænke på, hvad der kører på serveren og hvad der kører på klienten.
Derfor skal du bryde ud af php, så det javascript-tag bliver normal html output:
if($a>5)
{ ?>
  <script type="text/javascript">
    newHREF="country.php";
  </script>
<?php
}
eller sende de 3 linier afsted til klienten med echo.

Plus, hvis du allerede har en onload-funktion, skal der ikke defineres en ny.
I stedet skal if'en med location.replace placeres i starten af den eksisterende.
19. december 2010 - 21:32 #13
Tak for yderligere udlaeg.
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