• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak zakodować warunek?

Object Storage Arubacloud
0 głosów
563 wizyt
pytanie zadane 15 kwietnia 2023 w PHP przez Jacek Drożdżeński Nowicjusz (210 p.)
Oczywiście nie chodzi mi o gotowca, tym bardziej, że nie mam pewności w jakim języku można to rozwiązać.

Chodzi o to jak zakodować warunek: "jeżeli kliknięto w coś tam" to wtedy "robi się to i to". To "coś tam" raczej ma nie być buttonem, najlepiej jakby to było w środku diva jako ciąg znaków. Dodam, że fraza "robi się to i to" oznacza przejście do innej strony (co jest raczej banalne), dodatkowo przekazuje parametr za pomocą Session właśnie do strony docelowej. Tych miejsc do kliknięcia na stronie pierwotnej ma być około 30-tu. Jest jasne, że jedno kliknięcie wyklucza wszystkie inne. Wchodzi w grę HTML,CSS, PHP, JS.

Pozdrowienia dla chętnych do pomocy.

JD.

4 odpowiedzi

0 głosów
odpowiedź 15 kwietnia 2023 przez VBService Ekspert (252,740 p.)
wybrane 17 kwietnia 2023 przez Jacek Drożdżeński
 
Najlepsza

AFAIK to wszystko co opisałeś można wykonać z poziomu html i js-a, posługując się np. Event Delegation, co IMHO zmniejszy ilość warunków do niezbędnego minimum, choć mniemam, że same elementy <a> dały by tu radę.

W css można to tak zapisać, że nie będzie "wyglądać" (te "klikalne" elementy) jak <a> i jak

raczej ma nie być buttonem

jeśli jest taka Twoja wola.

komentarz 15 kwietnia 2023 przez Jacek Drożdżeński Nowicjusz (210 p.)

Jedyne atrybuty jakie może zawierać element <a> to: download, href, hreflang, referrerpolicy, rel, rev, target i type. Zatem moim zdaniem mniemanie kolegi jest błędne, bo styl w jakim się coś zapisze a funkcja jaką dany elemnet spełania to dwie różne rzeczy.
Ponadto, nie chodzi tu o jakieś zmniejszanie ilości warunków, warunek był, jest i zawsze będzie tylko jeden: "jeżeli kliknięto w coś....",  to dalej myślę, że wiem co robić. Chyba jestem już nudny z wyjaśnianiem. Więc cierpliwym pokażę "na żywo" o co mi chodzi. Proszę w wolnej chwili wejść na http://www.drozdzenscy.pl/htm/idmiejsc.htm - 29 liter alfabetu w nawiasach kwadratowych to te klikalne elementy. Chyba nie trzeba nic tłumaczyć. Dodam nawiasem, co zresztą widać, że ta podstrona jest nawet moim zdaniem bardzo prymitywna, bo to jeden wielki tasiemiec z góry do dołu i chcę ją zmienić na bardziej elegancką, jeśli nie nadużywam tu określeń.
Co do tego Event Delegation, to na razie nie wiem co to jest.
 

komentarz 15 kwietnia 2023 przez VBService Ekspert (252,740 p.)
edycja 16 kwietnia 2023 przez VBService

Możesz to jednym "głównym" plikiem załatwić np. w php (przykład bez użycia bazy danych)

 

index.php

<!DOCTYPE html>
<html lang="pl>
  <head>
    <meta charset="utf-8">
    <title>Wykaz miejscowości</title>
    <!-- itd. -->
  </head>
  <body>
    <div id="tytu">Wykaz miejscowości</div>
    <div id="nagl">
Wszystkie nazwy są podane w brzmieniu współczesnym i spolszczonym. Bliższa 
lokalizacja uwzględnia obecny podział administracyjny krajów. Niektóre miejscowości 
nie zostały, jak dotąd, zidentyfikowane (ozn. - nzid.). Liczby w nawiasach 
kwadratowych oznaczają numery akt w spisie dokumentów lub skrócone nazwy źródeł.
    </div>
    <hr id="linia"/>
    <div id="Skorowidz">
      <a href="?char=a">[A]</a>
      <a href="?char=b">[B]</a>
      <a href="?char=c">[C]</a>
      <a href="?char=c1">[Ć]</a>
      <!-- itd. -->
      <a href="?char=z">[Z]</a>
      <a href="?char=z1">[Ż]</a>
    </div>
<?php
  if (isset($_GET['char']) && !empty($_GET['char']) && preg_match('/^[a-z](\d)?$/i', $_GET['char'])) {
    $file = $_GET['char'] . '.php';
    if (file_exists($file))
      include $file;
    else
      echo '<div class="error">Brak danych.</div>'; // lub zatrzymanie wykonywania skryptu i wygenerowanie header("HTTP/1.0 404 Not Found");
  } else
    include 'a.php'; // albo jakiś inny domyślny plik                     
?>
  </body>
</html>

 

a.php (przykładowy plik dla litery a i analogicznie dla reszty liter)

<p class="litera">A</p>
<ul>
  <li>
    Agder - historyczny okręg w Norwegii, ok. 665 ur. Vatnar Vikarsson, syn Vikara Alrekssona. [Geni], [Wiki]
  </li><li>
    Agder - historyczny okręg w Norwegii, ok. 765 ur. Ølver Barnekar, syn Einara "Egðski" Snjallsona. [Geni], [Wiki]
  </li><li>
    Agder - historyczny okręg w Norwegii, ok. 810 ur. Ølver Barnekar, syn Einara "Egðski" Snjallsona i Astrid. [Geni], [Wiki]
  </li><li>
    Akwizgran, miasto na prawach powiatu w Niemczech, w kraju związkowym Nadrenia Północna-Westfalia, w rejencji Kolonia, 28 stycznia 814 zm. Karol "I Wielki" z dynastii Karolingów. [WGM]
  </li><li>
    Alanäs - gmina i parafia w okręgu Jämtland w Szwecji, 27 czerwca 1837 ur. Märta Kajsa Jonsdotter Wikström, córka Jonasa Jonssona i Märtha Jönsdotter. [Geni], [Wiki]
  </li><li>
    Alanäs - gmina i parafia w okręgu Jämtland w Szwecji, 5 sierpnia 1897 ur. Hildur Erika Näsström, córka Karla Magnusa Zakrissona i Elisabet Juliany Johansdotter. [Geni], [Wiki]
  </li>
  <!-- itd. --> 
</ul>

 

przykładowa struktura plików w folderze

 

za pomocą np. $_SERVER['REQUEST_URI'] można i taki zapis

    <div id="Skorowidz">
      <a href="?a">[A]</a>
      <a href="?b">[B]</a>
      <a href="?c">[C]</a>
      <a href="?c1">[Ć]</a>
      <!-- itd. -->
      <a href="?z">[Z]</a>
      <a href="?z1">[Ż]</a>
    </div>
  if (!empty(parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY)) && 
      preg_match('/^[a-z](\d)?$/i', parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY))) {
    $file = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY) . '.php';
    if (file_exists($file))
      include $file;
    else
      echo '<div class="error">Brak danych.</div>';
  } else
    include 'a.php';

 

komentarz 16 kwietnia 2023 przez VBService Ekspert (252,740 p.)
edycja 16 kwietnia 2023 przez VBService

css można to tak zapisać, że nie będzie "wyglądać" (te "klikalne" elementy) jak <a> i jak

raczej ma nie być buttonem

 

miałem bardziej na myśli np. taki przypadek

 

<!DOCTYPE html>
<html lang="pl>
  <head>
    <meta charset="utf-8">
    <title>Wykaz miejscowości</title>
    <!-- itd. -->
  </head>
  <body>
    <div id="tytu">Wykaz miejscowości</div>
    <div id="nagl">
Wszystkie nazwy są podane w brzmieniu współczesnym i spolszczonym. Bliższa 
lokalizacja uwzględnia obecny podział administracyjny krajów. Niektóre miejscowości 
nie zostały, jak dotąd, zidentyfikowane (ozn. - nzid.). Liczby w nawiasach 
kwadratowych oznaczają numery akt w spisie dokumentów lub skrócone nazwy źródeł.
    </div>
    <style>
      button[type="submit"] {
        background-color: transparent;
        border: none;
        cursor: pointer;
        padding: 0;
        outline: transparent; 
        font: 400 1.1em/1.5 system-ui;
        color: black;
        transition: color 250ms, outline 100ms;
      }
      button[type="submit"]:focus-visible {
        outline: 2px solid red;
      }
      button[type="submit"]:hover {
        color: red;
      }
    </style>
    <div id="Skorowidz">
      <form action="" method="post">
        <button type="submit" name="button" value="a">[A]</button>
        <button type="submit" name="button" value="b">[B]</button>
        <button type="submit" name="button" value="c">[C]</button>
        <button type="submit" name="button" value="c1">[Ć]</button>
        <!-- itd. -->
        <button type="submit" name="button" value="z">[Z]</button>
        <button type="submit" name="button" value="z1">[Ż]</button>
      </form>
    </div>
<?php
  if (isset($_POST['button']) && preg_match('/^[a-z](\d)?$/i', $_POST['button'])) {
    $file = $_POST['button'] . '.php';
    if (file_exists($file))
      include $file;
    else
      echo '<div class="error">Brak danych.</div>';
  } else
    include 'a.php';
?>
  </body>
</html>

 

1
komentarz 17 kwietnia 2023 przez Jacek Drożdżeński Nowicjusz (210 p.)
Po minimalnych poprawkach wszystko działa, tak jak chciałem. Clou to linia if (isset($_GET['char'])... itd, która odpowiada na mój główny problem (jasne, że sporo nauki przede mną). Pierwsza zmiana, to drobna poprawka w wyrażeniu regularnym, żeby działał <a href="?char=c1>[Ć]</a>, podobnie będzie dla [Ł], [Ó], [Ś], [Ź] i [Ż]. Druga zmiana, to zamiast jak kolega sugeruje, alfabetycznych baz *.php, bazy będą tekstowe *.txt, żeby nie wywracać mojego wcześniejszego pomysłu. Pliki php są bardzo wrażliwe na najmniejsze niedokładności. Ten mój wcześniejszy pomysł polega na tym, że z takim plikiem  tekstowym w pliku sorto.php robię jak poniżej:
$fp = fopen($_SESSION["plik"], "r"); // otwórz plik tekstowy do odczytu i przejdź na początek
while (($wiersz = fgets($fp)) != false) // czytaj każdy wiersz  
$osoby[] = $wiersz;  // wpisuj wiersze do tablicy
fclose($fp);                // zamknij plik
echo '<br>';
usort($osoby,"sort_m");     
... i dalej wyświetlanie z jakimś stylowaniem.

$_SESSION["plik"] odbiera parametr po   
$file = $_GET['char'] . '.txt';
 $_SESSION["plik"] = $file;
 include ("sorto.php");   
 a w pliku sorto.php odbywa się sortowanie wg mojego pomysłu, oczywiście wykorzystując funkcję usort(). Z uwagi na to, że w nazwach miejscowości (podobnie jest w Spisie osób) występują litery z kilku alfabetów europejskich, żadne wbudowane w php funkcje sortujące mnie nie zadowalały. Ręczne sortowanie przy każdym wprowadzeniu nowej miejscowości było tak upierdliwe, że mnie zmobilizowało. A teraz dopisuję w pliku tekstowym w dowolnym miejscu nowy wpis i sortowanie załatwia resztę.
Reasumując, dostałem więcej niż oczekiwałem.
Wielkie dzięki i pozdrowienia.
JD
0 głosów
odpowiedź 15 kwietnia 2023 przez AnimaVillis Stary wyjadacz (11,350 p.)
No to wszystko zależy.

https://bfy.tw/U1c8 - tutaj masz instrukcje warunkowe w php

Cała reszta jest zależna od tego co chcesz osiągnąć i jak.
komentarz 15 kwietnia 2023 przez Jacek Drożdżeński Nowicjusz (210 p.)

Co to znaczy "No to wszystko zależy"?

Instrukcje warunkowe nie tylko w php, znam chyba nieźle. A co chcę osiągnąć to napisałem, co prawda ogólnie, ale precyzyjnie. Głównie w zdaniu "Chodzi o to jak zakodować warunek: "jeżeli kliknięto w coś tam" to wtedy "robi się to i to".

JD

1
komentarz 15 kwietnia 2023 przez AnimaVillis Stary wyjadacz (11,350 p.)
No to wpisz sobie w instrukcje warunkowe dla języka który chcesz użyć. Skoro znasz dość dobrze PHP to albo zweryfikuj swoją wiedzę na ten temat albo wybierz dokładnie którego języka chcesz użyć bo możesz użyć do wykonywania np. ajaxa w połączeniu php i do tego ustawić odpowiednie warunki, które będą wywoływały dany kod, ale to już sobie poradzisz skoro php znasz :)
komentarz 15 kwietnia 2023 przez Jacek Drożdżeński Nowicjusz (210 p.)

Napisałem tylko o instrukcjach warunkowych php a nie o całym języku, że go znam dość dobrze. Ajaxa nie znam wcale. Sama znajomość instrukcji warunkowych php tu nie wystarcza, bo nie chodzi o postać samej instrukcji, która jest znana wszystkim, tylko o sam warunek, powtórzę: "jeżeli kliknięto w coś tam", który to warunek w php jest dla mnie zagadką. Dlatego napisałem na początku, że nie mam pewności w jakim języku można to rozwiązać.

JD

 

1
komentarz 15 kwietnia 2023 przez AnimaVillis Stary wyjadacz (11,350 p.)
No to podałem Ci przykładowo co możesz wykorzystać.

https://code.tutsplus.com/tutorials/how-to-use-ajax-in-php-and-jquery--cms-32494
komentarz 15 kwietnia 2023 przez Jacek Drożdżeński Nowicjusz (210 p.)
Napisałem wyżej, ze nie znam Ajaxa, a na początku, jakie języki wchodzą u mnie w grę.

JD
0 głosów
odpowiedź 15 kwietnia 2023 przez SzkolnyAdmin Szeryf (86,360 p.)
Przy 30 warunkach jedynie switch ma sens. Daj przykład kodu, będzie łatwiej coś doradzić. Ewentualnie tak ustawić parametry przekierowania, aby można obsłużyć je jedną funkcją.
0 głosów
odpowiedź 15 kwietnia 2023 przez infinityhost Użytkownik (780 p.)
edycja 15 kwietnia 2023 przez Comandeer

Potrzebujesz tablicę wszystkich elementów - załóżmy że mowa o div. W środku są elementy. Masz tablicę z koordynatami. Potem

 

<div id="moj_div" onMousDown="sprawdz(event);"></div>

w skrypcie
 

<script>

tablica_elementow=document.getElementById("moj_div").querySelectorAll("*");

function sprawdz(event){ for(let u=0;u<tablica_elementow.length;u++){ if(event.screenX==tablica_elementow[u].offsetTop){location.assign("strona.gov.rp"); }; };};</script>



Coś w tym stylu.

komentarz 15 kwietnia 2023 przez Comandeer Guru (600,810 p.)
Proszę na przyszłość używać bloczków do wstawiania kodu.

Podobne pytania

+1 głos
1 odpowiedź 356 wizyt
pytanie zadane 12 marca 2021 w HTML i CSS przez mat19 Obywatel (1,580 p.)
0 głosów
1 odpowiedź 1,057 wizyt
pytanie zadane 8 stycznia 2021 w HTML i CSS przez Ananas_ Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 504 wizyt
pytanie zadane 13 listopada 2020 w JavaScript przez dz3101 Nowicjusz (220 p.)

92,555 zapytań

141,402 odpowiedzi

319,553 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...