Avatar billede Slettet bruger
11. marts 2011 - 11:37 Der er 48 kommentarer og
1 løsning

Gå 2 sider tilbage

Hej.

Jeg har lavet nogle sider i DW og de virker sådan set fint nok :-)

Men der bruges denne kommano:    $insertGoTo = "index.html";

Der er så det problem, at der genereres en lang liste fra databasen, og når man så trykker på ret, så kommer man til en formular med data i og kan rette, og ved gem rettelse farer den så til index.html.

Men da listen er meget lang - flere hundrede poster - ville det jo være meget skønnere hvis den gik tilbage hvor den kom fra.

Jeg synes ikke rigtig jeg kan finde noget om at ændre på $insertGoTo så man kan det, da det åbenbart skal være et filnavn der står deri.

Er her en der har en snedig løsning, hvis altså I forstår hvad jeg mener. Synes det er lidt svært at forklare.

Ole.
Avatar billede majbom Novice
11. marts 2011 - 12:10 #1
og du kan ikke bare give den variabel en anden værdi?

jeg kan ikke lige se hvad dit problem er - kan du forklare det anderledes/bedre?
Avatar billede Slettet bruger
11. marts 2011 - 12:19 #2
Ved ikke lige hvordan jeg ellers skal forklare det.

Man henter en lang liste i databasen.

Der er så et link på hver post, så man kan rette evt. fejl.

Når man så har rettet og gemmer, så skal den gå tilbage til listen hvor den kom fra.

Det er nok ikke bedre, men så har jeg prøvet at forklare igen.

Ole.
Avatar billede olebole Juniormester
11. marts 2011 - 12:39 #3
<ole>

Hvis jeg har forstået spørgsmålet: Send adressen med i et skjult felt, så stedet er muligt at komme til tilbage til. PHP har ikke styr på browserens history. Noget i stil med:

<input type="hidden" name="redirectto" value="<?php print $_SERVER["PHP_SELF"] ?>">


- og når brugeren har rettet, kan vedkommende sendes tilbage til $_POST["redirectto"]

/mvh
</bole>
Avatar billede Slettet bruger
11. marts 2011 - 12:51 #4
Det kan jeg ikke lige se hvordan jeg får ind i systemet.

Lad os sige der er 600 poster i databasen. Der laves så en liste via et udtræk, så der kommer 600 linier under hinanden.

Man scroller så nedad og finder ud af at der i post 301 er en fejl - man har scrollet langt ned - og den vil man så rette.

Pointen er så at komme tilbage til listen på det sted omkring post 301, istedet for i toppen og skal scrolle hele vejen ned igen.

Hjælper det på forklaringen ? Selve virkemåden er ganske almindelig, det er bare det med at komme tilbage til det rigtige sted. Også helst uden at skulle lave det hele om :-)

Ole.
Avatar billede Slettet bruger
11. marts 2011 - 13:26 #5
Nu har jeg så forsøgt lidt, men den bliver bare i retteformularen, og skifter ikke side.

Det er åbenbart ikke lige at lave ? Det er jo en skam, da det er ret praktisk :)

Ole.
Avatar billede olebole Juniormester
11. marts 2011 - 13:49 #6
Jeg har ingen idé om, hvordan din HTML er indrettet, men det lyder som noget med et anker(?) Det lyder ikke som noget, du kan løse med PHP
Avatar billede Slettet bruger
11. marts 2011 - 13:55 #7
Nej, jeg er desværre bange for at du har ret.

Det er jo faktisk et bogmærke (kan man sige) der skal oprettes og kun eksistere til man er kommet tilbage igen :) og det kan man nok ikke.

Jeg takker for tips, og du må gerne smide et svar for interessen og tiden du har brugt. Jeg tror desværre heller ikke det kan løses sådan lige, men jeg håbede. De brugere kan jo også finde på det mest umulige :-)

Ole.
Avatar billede olebole Juniormester
11. marts 2011 - 14:08 #8
Man skal på en eller anden måde kende stedet, brugeren skal tilbage til. Den position kan man gemme med JavaScript, hvis brugeren foretager en handling på det pågældende sted - f.eks. klikker på en knap, inden han scroller. Skal man gætte sig frem til, hvor han stod, er man derimod ude i noget clairvoyance - og der er PHP endnu ikke nået til  =)
Avatar billede olebole Juniormester
11. marts 2011 - 14:17 #9
Du kan prøve at kikke på princippet i dette simple eksempel - men husk det skal være et standardiseret dokument (incl. DTD, osv):


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript">
var nBackTo = 0;
function foo() {
    nBackTo = document.documentElement.scrollTop;
}
function fooBar() {
    window.scrollTo(0, nBackTo);
}
</script>
</head>
<body>

<div style="height:1500px;width:200px;background:red"></div>

<p>Klik på knappen herunder og scroll derefter ned til næste knap</p>
<p><button onclick="foo()">Klik</button></p>

<div style="height:1500px;width:200px;background:blue"></div>

<p><button onclick="fooBar()">Tilbage</button></p>

</body>
</html>

Avatar billede Slettet bruger
11. marts 2011 - 14:23 #10
Tak, det vil jeg studere, men jeg er ikke sikker på det er noget jeg kan finde ud af. Men lige nu tror jeg at jeg vil studere tilløb til at komme hjem og holde fyraften :-)
Avatar billede majbom Novice
11. marts 2011 - 21:09 #11
kunne du ikke lave et anchor for hver linje, som har et unikt navn og selvfølgelig indeholder id'et på den linje det drejer sig om

så har du jo medsendt id'et allerede og skal blot tilføje en havelåge og en variabel i din URI...
Avatar billede olebole Juniormester
11. marts 2011 - 21:23 #12
- og ankeret kunne passende være ID'et fra DB-tabellen. Hvis det er et talfelt med auto iterering, er det unikt - og skal bare have et bogstav foran for at være en valid HTML identifier
Avatar billede Slettet bruger
11. marts 2011 - 21:24 #13
Hmmm, det ved jeg faktisk ikke.

Id'et er med over for at finde den post der skal rettes. Men udtrækket sorteres efter titel, så hvis man laver titel som bogmærke, samtidigt med det er lavet til link for at se alt indhold på den post, men kan man det i php ?

Det lyder lidt spændende, men jeg kan ikke lige gennemskue det, så det kan blive til noget kode.

Har du en idé til hvordan man evt. kan gøre det ?


Ole.
Avatar billede majbom Novice
11. marts 2011 - 21:36 #14
det er lige meget hvordan det er sorteret. så længe du bruger samme id er browseren ligeglad med om de står i nummerorden :)
Avatar billede olebole Juniormester
11. marts 2011 - 21:38 #15
Du skal bare sørge for, dine links ser ud noget i denne stil:

<a id="a_123" href="retbruger.php?id=123">En linktekst A</a>
<a id="a_236" href="retbruger.php?id=236">En linktekst B</a>
<a id="a_345" href="retbruger.php?id=345">En linktekst C</a>
<a id="a_756" href="retbruger.php?id=756">En linktekst D</a>


Så kan du kalde siden med URL'en: side.php#a_345 - og brugeren vil blive scrollet ned til linket med linkteksten En linktekst C

Bemærk, at der er sat et bogstav a foran ID'et, når det bliver skrevet som HTML-id i linket. Det skyldes, at et HTML-id ikke må begynde med et tal
Avatar billede Slettet bruger
11. marts 2011 - 21:44 #16
Det ser interessant ud. Men kan man det, når linket er baseret på ID for at finde posten der skal rettes ? Jeg synes det virker som om der vil være et problem med at finde posten når det ikke er et rent ID der sendes over.

Men det er da helt sikkert noget noget vil se om jeg kan gøre i morgen. Jeg kan desværre ikke i aften, selvom det er ufattelig spændende, hvis det kan kommme til at virke.


Ole.
Avatar billede majbom Novice
11. marts 2011 - 21:49 #17
du skal jo bare fjerne "a_" inden du søger på det i databasen

$rent_id = end(explode($id_fra_link));
Avatar billede olebole Juniormester
11. marts 2011 - 21:49 #18
Jamen, linket står jo rent i query strengen ... i linkets href. Det henter du bare i den anden ende med $_GET["id"]
Avatar billede olebole Juniormester
11. marts 2011 - 21:51 #19
Linkets id - altså "a_345" - bliver ikke sendt med. Det gør derimod "id=345"  ;o)
Avatar billede Slettet bruger
11. marts 2011 - 21:54 #20
Aha :-)

Jeg tester det i morgen, hvis jeg hitter ud af det. Det hele ligger lokalt på en maskine, og kan desværre ikke tilgået ude fra. Derfor har jeg heller ikke kunne vise det her med et link.

TAK intil nu. Jeg melder tilbage når jeg har testet.

Ole.
Avatar billede majbom Novice
11. marts 2011 - 22:02 #21
lol, det gik sq for stærkt dér :D

godnat :)
Avatar billede Slettet bruger
12. marts 2011 - 12:56 #22
Nu har jeg forsøgt at lege lidt med det, men kommer hele tiden tilbage til toppen på siden med listen.

Jeg laver linket sådan her:

      <td bgcolor="<?php echo $color ?>" align="right"><a  href="RetEnRecord.php?nr=<?php echo $row_VisElektro['id']; ?>"><?php echo $row_VisElektro['id']; ?></a></td>


Og har så ændret den til det nye sådan her:

      <td bgcolor="<?php echo $color ?>" align="right"><a id="a_<?php echo $row_VisElektro['id']; ?>" href="RetEnRecord.php?nr=<?php echo $row_VisElektro['id']; ?>"><?php echo $row_VisElektro['id']; ?></a></td>

På rettesiden henter jeg så variablen:

$nr = $_GET['nr'];

Og når den så har opdateret og skal gå tilbage igen har jeg skrevet dette:

$updateGoTo = "VisListe.php#a_$nr";


Men den går bare tilbage til siden og viser fra toppen og går ikke ned på listen.

Men jeg mangler sikkert at få et eller andet med over, men det er ikke lykkedes mig at hitte ud af hvad der mangler.


Ole.
Avatar billede olebole Juniormester
12. marts 2011 - 17:54 #23
Når du kommer tilbage til siden igen - efter rettelsen af posten med DB-ID: "123" - er du så helt sikker på, der står det rette i browserens adressefelt ... altså sluttende med: VisListe.php#a_123? Og er du samtidig helt sikker på, du i kildekoden til denne side (stadig) har en TD med id="a_123" (tjek med View Source i din browser)?

Husk lige på, at hvis du har slettet posteringen med DB-ID: "123", er der jo ikke længere en TD med dette id, når du kommer tilbage. Derfor vil du ikke blive scrollet ned ad siden  ;o)
Avatar billede olebole Juniormester
12. marts 2011 - 18:18 #24
Dette kan du komme ud over, hvis du bruger en JavaScript løsning:


<script type="text/javascript">
function setScrollTop(oLnk) {
  // Føj værdien af sidens scrollTop til query strengen
  // - i det øjeblik, brugeren klikker på linket:
    oLnk.href += "&scrlTop=" + document.documentElement.scrollTop;
}

window.onload = function() {
    <?php
      // Hvis en scrollTop-værdi sendes med i URL'en,
      // - så lægges dennes værdi i $numScroll.
      // Ellers sættes $numScroll = 0
        if (empty($_GET["scrlTop"])) $numScroll = 0;
        else  $numScroll = $_GET["scrlTop"];
    ?>
   
  // Scroll ned til stedet ned JavaScript
    var nScrollTop = <?php print $numScroll ?>;
    window.scrollTo(0, nScrollTop);
}
</script>

<a href="RetEnRecord.php?nr=123" onclick="setScrollTop(this)">Linktekst</a>



I dokumentet RetEnRecord.php skriver du:


<?php
// Ret postering i databasen her

// Redirect tilbage til dokumentet med listen
// - og send værdien for scrollTop med
Header("Location: VisListe.php?scrlTop=".$_GET["scrlTop"]);
?>



Så burde det lykkes for dig  =)
Avatar billede Slettet bruger
12. marts 2011 - 19:05 #25
Nu har jeg forsøgt det du har skrevet.

Når jeg ser oppe i adresselinien efter at være kommet tilbage til VisListe.php siden, skiver den dette, som jeg ikke rigtig kan forholde mig til:

VisListe.php#LinkTekst?nr=520&scrlTop=3073


Lige nu kan jeg ikke finde ud af hvor LinkTekst kommer fra (det står jo nok et sted, men har ikke fundet det endnu).

nr er rigtig nok, da jeg har rettet ID 500, men det næste tal ved jeg ikke hvad er. Men det må vel være positionen hvor den kom fra. Den ruller bare ikke derned.

Den går tilbage, men bliver i toppen.

Jeg har nok lavet noget forkert, så det er det jeg forsøger at finde lige nu.

Ole.
Avatar billede olebole Juniormester
12. marts 2011 - 19:21 #26
Næ, det står jo som tekst i selve linket, men hvordan du får sendt det med, er lidt af en gåde  =)
Avatar billede olebole Juniormester
12. marts 2011 - 19:28 #27
3073 er det antal pixels, du havde scrolled ned for at klikke på linket. Derfor burde der, når du kikker i kildekoden (i browseren) stå:


window.onload = function() {
  // Scroll ned til stedet med JavaScript
    var nScrollTop = 3073;
    window.scrollTo(0, nScrollTop);
}



Tallet, der står udfor JS-variablen skulle altså gerne være det samme som, der står i adresselinjen. Er det tilfældet, burde siden også scrolle ned til det korrekte sted
Avatar billede Slettet bruger
12. marts 2011 - 19:31 #28
Sker det ikke med denne:

$updateGoTo = "VisListe.php?scrlTop=".$_GET["scrlTop"]"";


Jeg synes nok jeg er lidt ude hvor jeg ikke kan bunde nu :-)
Avatar billede Slettet bruger
12. marts 2011 - 19:38 #29
Det kommer ikke med i koden, der står:

window.onload = function() {
       
  // Scroll ned til stedet ned JavaScript
    var nScrollTop = 0;
    window.scrollTo(0, nScrollTop);
}


Det er kun i adresselinien der står det.
Avatar billede olebole Juniormester
12. marts 2011 - 19:46 #30
Sært! Prøv lige med denne onload handler i stedet og lad mig høre, hvad der står i View Source:


<script type="text/javascript">
function setScrollTop(oLnk) {
  // Føj værdien af sidens scrollTop til query strengen
  // - i det øjeblik, brugeren klikker på linket:
    oLnk.href += "&scrlTop=" + document.documentElement.scrollTop;
}

window.onload = function() {
    <?php
      // Hvis en scrollTop-værdi sendes med i URL'en,
      // - så lægges dennes værdi i $numScroll.
      // Ellers sættes $numScroll = 0
        if (!isset($_GET["scrlTop"])) $numScroll = 0;
        else  $numScroll = $_GET["scrlTop"];
    ?>
   
  // Scroll ned til stedet ned JavaScript
    var nScrollTop = <?php print $numScroll ?>;
    window.scrollTo(0, nScrollTop);
}
</script>

Avatar billede Slettet bruger
12. marts 2011 - 19:58 #31
Det hjalp desværre ikke noget:

window.onload = function() {
       
  // Scroll ned til stedet ned JavaScript
    var nScrollTop = 0;
    window.scrollTo(0, nScrollTop);
}
Avatar billede olebole Juniormester
12. marts 2011 - 20:16 #32
Så er der noget, der ikke stemmer. Hvis der står VisListe.php#LinkTekst?nr=520&scrlTop=3073 i adresselinjen, så skal der stå: var nScrollTop = 3073; i JS-koden
Avatar billede Slettet bruger
12. marts 2011 - 20:20 #33
Når jeg skal tilbage er det vel dette der sørger for at det hele er med ?

$updateGoTo = "VisListe.php?scrlTop=".$_GET["scrlTop"]"";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $updateGoTo));


Men jeg kan ikke finde den der LinkTekst nogen steder, så det undrer mig lidt det står oppe i adresselinien når jeg kommer tilbage til VisListe.php
Avatar billede olebole Juniormester
12. marts 2011 - 20:23 #34
Du laver med statsgaranti en fejl - men jeg kan nok ikke komme det nærmere uden selv at sidde med filerne og se, hvad der går galt.

Er du 100% sikker på, du staver scrollTop-variablen ens i adresselinjen, og når du prøver at hive den ud med $_GET ved JavaScriptet? Det er den eneste fejl, jeg kan komme i tanker om, skulle kunne give det resultat
Avatar billede Slettet bruger
12. marts 2011 - 20:23 #35
Nå, du havde skrevet mens jeg skrev :)

Men der står nul i koden. Så jeg er faldet af nu. Jeg kender ikke noget til de funktioner, så jeg kan ikke gennemskue det der kode.
Avatar billede Slettet bruger
12. marts 2011 - 20:25 #36
Ok. Jeg kan godt lægge filerne ind her, men er det ikke for meget ?
Avatar billede olebole Juniormester
12. marts 2011 - 20:26 #37
Brug aldrig $_SERVER['QUERY_STRING']. Det giver dig ingen kontrol over, hvor noget kommer fra. Brug i stedet $_GET eller $_POST - alt efter, om du sender get eller post
Avatar billede olebole Juniormester
12. marts 2011 - 20:33 #38
Koden i RetEnRecord.php skal du skrive nøjagtig, som jeg gjorde i #24
Avatar billede Slettet bruger
12. marts 2011 - 20:38 #39
Når jeg gør det får jeg:

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

Der er et " for meget, eller et for lidt. Det leder jeg efter.
Avatar billede Slettet bruger
12. marts 2011 - 20:42 #40
Nej, det var vist noget ander der var problemet.

Jeg er lige ved at prøve lidt mere.
Avatar billede olebole Juniormester
12. marts 2011 - 20:45 #41
Prøv at copy/paste koden - og lad være med at skrive noget somhelst andet. Så bliver din DB ikke opdateret, men så kan du se (om) det virker  ;o)

Bagefter kan du så fylde din DB-kode på
Avatar billede Slettet bruger
12. marts 2011 - 20:46 #42
Nu har jeg ændret til dette:

/*$updateGoTo = "VisListe.php?scrlTop=".$_GET["scrlTop"]"";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  } */
  Header("Location: VisListe.php?scrlTop=".$_GET["scrlTop"]);

//  header(sprintf("Location: %s", $updateGoTo));


OG DET VIRKER :-)

TUSIND TAK, og nu må du afgive et svar, det var en hård kamp. Men jeg er også svær at banke noget ind i knolden på :-)
Avatar billede olebole Juniormester
12. marts 2011 - 20:51 #43
Undskyld, men du spilder min tid *BIG TIME*! Har jeg ikke lige fortalt dig, du mister enhver kontrol over din kode, når du bruger $_SERVER['QUERY_STRING'];?

Det er helt op til dig, om du vil skide på, hvad mere erfarne folk fortæller dig - men så lad være med at spilde vores tid, tak!
Avatar billede Slettet bruger
12. marts 2011 - 20:54 #44
Nå da.

Det jeg klistrede ind var for at vise at jeg havde kommenteret det ud.

Det må du undskylde.
Avatar billede Slettet bruger
13. marts 2011 - 17:03 #45
olebole

Jeg forstår simpelthen ikke hvad du er blevet knotten over ?

Jeg synes jeg, efter bedste evne, har gjort hvad du har foreslået.

Og det er kommet til at virke, så jeg vil meget gerne have et svar fra dig, så spørgsmålet kan afsluttes.

Ved at ændre nedenstående kan du se det er kommenteret ud, og her lidt tydeligere end før.

/*  start på kommentar
$updateGoTo = "VisListe.php?scrlTop=".$_GET["scrlTop"]"";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
*/  slut på kommentar

// og nedenfor den linie du skrev jeg skulle indsætte.

  Header("Location: VisListe.php?scrlTop=".$_GET["scrlTop"]);


Derfor synes jeg netop jeg gjorde hvad du skrev jeg skulle.

Men under alle omstændigheder (uanset om du er sur eller ej) vil jeg gerne have du laver et svar, så vi kan afslutte dette spørgsmål.


Ole.
Avatar billede olebole Juniormester
13. marts 2011 - 17:53 #46
Sorry! En fuldstændig uforbeholden undskyldning herfra - det var helt klart min dumme fejl! Jeg så åbenbart ikke din udkommentering på trods af dens tydelighed. Det må du virkelig undskylde ... det var dumt af mig!

Jeg kommer her efterhånden sjældent, så jeg samler ikke længere points - men tak for tilbudet.

Jeg håber, vi mødes igen. Så skal jeg gøre mit bedste for at læse, hvad du skriver - og ikke hvad jeg tror, du skriver  ;o)

Pinligt!
Avatar billede Slettet bruger
13. marts 2011 - 18:01 #47
Alt forladt.

Jeg havde på fornemmelsen, at det var en læsefejl :-) men jeg ville gerne være sikker på at det var en misforståelse.

Men selvom du ikke samler på point vil jeg gerne have du svarer så jeg kan give dig dem alligevel. Du løste et problem for mig som jeg faktisk var mere eller mindre sikker på ikke kunne lade sig gøre. Det er utroligt hvad I kan er på eksperten. Det er en ren fornøjelse.

Og igen tusind tak for hjælpen.


Ole.
Avatar billede olebole Juniormester
13. marts 2011 - 18:34 #48
Selvtak og ikke mindst tak for overbærenheden. I fredens og fordragelighedens navn lægger jeg et svar ... Peace!  ;o)
Avatar billede Slettet bruger
13. marts 2011 - 19:17 #49
Ok. Så siger jeg tak. Det er jo li'som rarest at man giver noget for at få løst sit problem.

Ole.
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