18. december 2010 - 18:23Der 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:
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?
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?
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.
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:
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.
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?
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?
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>
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?
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:
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.
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:
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.
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.