Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana punktu startowego
Forum PHP.pl > Forum > PHP
dawid_wml
Witajcie,

mam 3 adresy URL pod postacią kodu QR, nazwijmy je 'A', 'B', 'C'. Gdy zeskanuję któryś z kodów po raz pierwszy, to wyświetla mi się obrazek z mapą.
Przykład: Skanujemy kod QR 'B', więc wyświetla się obrazek mapy z miejsca 'start' do obiektu 'B'. Następnie gdy zeskanuję kod, tym razem np. 'A', to wyświetla się obrazek z mapą z miejsca 'A' do miejsca 'B'. Następnie jeżeli zeskanuję kod 'C', to wyświetla się obrazek z mapą z miejsca 'C' do miejsca 'B'. Jednak, gdy zeskanuję kod 'B' (ten sam kod, który zeskanowałem na samym początku) to wyświetla się tym razem informacja o obiekcie 'B'. Do tego momentu skrypty działają prawidłowo. Jednakże, gdy teraz zeskanuję kod QR 'C' (ten sam, który zeskanowałem wcześniej; pogrubiony fragment) to chciałbym, żeby wyświetliła mi się mapa z miejsca 'B' do miejsca 'C'.

Obecnie jest tak, że wyświetla mi się mapka z 'C' do 'B' i to jest błąd, ponieważ jesteśmy aktualnie w miejscu 'B'.

W skrócie, gdy wyświetlę informację o obiekcie 'B', ten obiekt musi przyjąć punkt startowy. Tutaj właśnie potrzebuję pomocy, nie wiem jak to ugryźć.

Adres URL to np.: .../index.php?obiekt=obiektX, gdzie X to A, B lub C.
Wszystkie kombinacje obrazków mam: A->B, A->C, itp.

Jeżeli coś jest nie jasne, to pytać, postaram się opisać to na przykładzie "życiowej sytuacji" biggrin.gif


Skrypty:


index.php

Kod
<?php
require_once('funkcje.php');
session_start();



$obiekt = isset($_GET['obiekt']) ? $_GET['obiekt'] : 'obiekt1';


if (!isset($_SESSION['cel'])) {
    $_SESSION['cel'] = $obiekt;
        pokazMapeStart('start',$obiekt);
        
} else {
    if ($_SESSION['cel'] == $obiekt) {
        pokazInfo($obiekt);
    } else {
        pokazMape($obiekt, $_SESSION['cel']);
    }
}
?>




funkcje.php

Kod
<?php
function pokazInfo($obiekt)
{
     header('Location: /info.php?obiekt=' . $obiekt);
        
}

function pokazMape($obiektZ,$obiektDo)
{
     header('Location: /mapka.php?z='.$obiektZ.'&do='.$obiektDo);
}

function pokazMapeStart($start,$obiektDo)
{
     header('Location: /mapka.php?z='.$start.'&do='.$obiektDo);
}




mapka.php

Kod
<?php
$nazwaMapy = 'mapa_'. $_GET['z'].'_'.$_GET['do'].'.png';


echo '<img src="/'.$nazwaMapy.'" alt="mapa"/>';
?>




info.php

Kod
<?php
switch($_GET['obiekt']) {
    case 'obiekt1':
        echo '<img src="obiekt1.png">';  
        break;
    case 'obiekt2':
        echo '<img src="obiekt2.png">';
        break;
    case 'obiekt3':
        echo '<img src="obiekt3.png">';
        break;
        
}
?>


Sorry, że podbiłem, ale niestety jeszcze nie rozwiązałem sam mojego problemu. Może jednak ktoś wie, w jaki sposób rozwiązać mój problem?
Greg0
Jak dla mnie masz błąd w samej logice założeń tego jak to ma działać.
Piszesz że jesteś w na starcie i skanujesz adres do którego ma wyznaczyć ci trasę (czyli B ). Ok wyznacza START->B. Potem dochodzisz do miejsca B i tam jest do zeskanowania kod A i piszesz że wyznaczasz trasę A->B a nie jak wydaje mi się że powinno być B->A.
Opisz może w realnym życiu algorytm działania, bo mi się to sypie zaraz na początku.

Jeśli resetowanie miejsca startowego ma czynić dwukrotne zeskanowanie miejsca w którym jesteś, powinieneś po zeskanowaniu C (ustawienie nowego miejsca) zeskanować B i wtedy powinno wypluć B->C wg. twojego rozumowania.
dawid_wml
Cytat(Greg0 @ 29.09.2014, 19:46:06 ) *
Piszesz że jesteś w na starcie i skanujesz adres do którego ma wyznaczyć ci trasę (czyli B ). Ok wyznacza START->B. Potem dochodzisz do miejsca B i tam jest do zeskanowania kod A i piszesz że wyznaczasz trasę A->B a nie jak wydaje mi się że powinno być B->A.



Zgadza się, ponieważ jeżeli wyświetlimy informację o celu, czyli takim, który zeskanowaliśmy na samym początku (start). Jeżeli już dowiedzieliśmy się czegoś o takim obiekcie, to chcemy teraz dowiedzieć się czegoś o obiekcie A, więc skanujemy kod A i pojawia się mapka: B do A (przynajmniej powinno).

Ok, opis:

W muzeum są 3 pokoje, w każdym pokoju jest jeden obraz/eksponat, przy każdy eksponacie jest odpowiadający mu kod QR. Przed wejściem do muzeum na tablicy są 3 kody QR, wspomniane wcześniej 'A', 'B', 'C'. Ta sama tablica znajduje się w każdej z trzech sal. Interesuje Cię eksponat 'B', więc taki kod skanujesz na starcie i pokazuje Ci się mapa: start -> 'B'. Jakimś cudem zbłądziłeś, wchodzisz do jakiejś tam salki (niech to będzie 'A', ale o tym nie wiesz) skanujesz kod, który jest przy obrazie/eksponacie i pokazuje Ci się mapa: 'A' -> 'B'. Dochodzisz już do salki 'B' (czyli tej właściwej, ale o tym nie wiesz), skanujesz kod na obrazie i pojawia się informacja o obrazie 'B', bo: obiekt skanowany na starcie = 'B'. Teraz w miejscu, w którym aktualnie się znajduję, podchodzę do tablicy z kodami i skanuję sobie obiekt 'A'. Powinna wyświetlić mi się mapka: 'A' -> 'B', a wyświetla się 'B' -> 'A'.


Edit: Do póki nie wyświetlisz informacji o obiekcie, który zeskanowałeś w miejscu startu, to pojawia się mapka z sali, w której aktualnie się znajdujesz do miejsca, który wybrałeś w miejscu start.
Greg0
Jak dla mnie opis który podałeś i ostatnie zdanie nt. tego jak to działa jest prawidłowe. (pogrubione jest moje)
Cytat
Teraz w miejscu, w którym aktualnie się znajduję (B ), podchodzę do tablicy z kodami i skanuję sobie obiekt 'A'. Powinna wyświetlić mi się mapka: 'A' -> 'B', a wyświetla się 'B' -> 'A'. Powinna sie wyświetlić B->A bo w końcu przeczytałeś o obrazie B i chcesz zobaczyć A (jesteś w B )


Innymi słowy po dwukrotnym zeskanowaniu danego miejsca ustawiasz je jako obecne.
Mimo wszystko MOIM ZDANIEM ten mechanizm ma mankamenty i za każdym razem w każdym miejscu powinny być zeskanowane dwa kody. Obecne miejsce i docelowe. To rozwiąże wszystkie problemy, bo wyobraź sobie że ktoś przed muzeum dwa razy pod rząd zeskanuje B bo myślał że nie zaskoczyło, co wtedy? System myśli że jest w pokoju B a tak na prawdę jeszcze nie wszedł do budynku
dawid_wml
Kurde fail. Faktycznie, z tego wszystko pomyliłem się. Powinno być tak:

Teraz w miejscu, w którym aktualnie się znajduję (B ), podchodzę do tablicy z kodami i skanuję sobie obiekt 'A'. Powinna wyświetlić mi się mapka: 'B' -> 'A', a wyświetla się 'A' -> 'B', bo w końcu przeczytałeś o obrazie B i chcesz zobaczyć A (jesteś w B ).

Tak wiem, kod nie jest dopracowany, ale niektóre sprawy już naciągnąłem. W zasadzie mam mało czasu, żeby kod działał "bardziej życiowo" i aktualnie interesuje mnie tylko poprawienie tego błędu, który opisałem wyżej.
Greg0
Ok więc po kolei.
1. Funkcja pokazMapeStart() robi dokładnie to samo co pokazMape() więc nie wiem po co duplikat.
2. Przy wyświetlaniu Informacji o obiekcie musisz zresetować CEL czyli usunąć sesję z CELEM (bo do niego dotarłeś)
3. Nie obejdzie się bez stworzenia nowej zmiennej w SESJI o nazwie start która będzie trzymać miejsce startu, czyli miejsce do którego dotarłeś po usunięciu sesji CEL

Czyli coś takiego:
  1. $obiekt = isset($_GET['obiekt']) ? $_GET['obiekt'] : 'obiekt1';
  2. if (!isset($_SESSION['start']))
  3. {
  4. $_SESSION['start'] = 'start';
  5. }
  6.  
  7. if (!isset($_SESSION['cel']))
  8. {
  9. $_SESSION['cel'] = $obiekt;
  10. pokazMape($_SESSION['start'], $obiekt);
  11. }
  12. else
  13. {
  14. if ($_SESSION['cel'] == $obiekt)
  15. {
  16. pokazInfo($obiekt);
  17. $_SESSION['start'] = $_SESSION['cel'];
  18. unset($_SESSION['cel']);
  19. }
  20. else
  21. {
  22. pokazMape($obiekt, $_SESSION['cel']);
  23. }
  24. }
dawid_wml
Dzięki wielkie, ale coś nie chce działać. Próbowałem na dwóch przeglądarkach w telefonie, dwie różne aplikacje i znowu wyświetla się na odwrót. Tak jakby nie ustalało nowego miejsca startu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.