Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Kolejność liczbowa
Forum PHP.pl > Forum > Przedszkole
maya
Cześć.

Sprzedaje bilety online na wycieczki i w związku z tym mam / generuje formularz z polami text (nr biletu, imie, nazwisko, email)
Ooyrzebowalbym zroboć cos na zasadzie unikalnego id takiego ktory jest generowany dla tabeli (autoincrement)
Niestety to co mam teraz zostalo zrobione 10 lat temu i oparte jest o pliki nie baze. Potrzebowalbym aby w pole NUMER BILETU wstawić liczby jako numer biletu. Zaczęło by się to od liczby 2000 zeby ktoś nie myslal ze dopiero zaczynam hehe.

Mam formularz gdzie wybieram ilosc osób przykladowo 10 i wtedy bastepuje wygenerowanie formularza przez pętle. Mam więc 10 wierszy z polami text. Chcialbym aby w miejscu NUMER BILETU osadzic zawsze numery po kolei
Np.
2001
2002
2003
2004
Itd

Potem nastepuje zapis do pliku. Pozniej znowu generuje formularz i znowu chcialbym aby numery się tam osadzaly ALE juz zaczynając od ostatbiej najwiekszej liczby jaka byla wygenerowana. Wiec jak bylo to 2010 to nowy formularz z polami biletow zaczął by się od 2010. Nie byloby problemu z bazą danych (wtedy dawalbym po prostu ID tam) ale niestety to jest na plikach i nie wiem jak to rozwiaxac. Trzebaby to gdzies zapisywac, pobierac, zwiekszac w petli potem znowu zapisywac..... Szukam optymalnego rozwiazania.

Jak to najlepiej zrobic?
trueblue
Gdybyś miał bazę, to nic by to nie dało, bo nie możesz wygenerować dwóch lub więcej formularzy z tymi samymi numerami. A tak mogłoby się zdarzyć gdyby kilku użytkowników otworzyło formularz rejestracji, a nie dokonało zapisu.
Podczas generowania tego formularza, nie jest potrzebny numer. Numer ten nadajesz podczas zapisu. Wtedy wyciągasz z pliku numer (tego z rekordami lub odrębnego gdzie jest tylko ostatni numer), zwiększasz o 1 i zapisujesz kolejne bilety, nie dopuszczając do jednoczesnego zapisu z innego żądania.
maya
Dzieki za odpowiedz. Jakos to musze ogarnac.

Mialbym jeszcze jedno pytanie.
Ten formularz generuje na zasadzie tablicy. Wszystkie pola NAME mają znak tablicy np. name="name[]"...i tak dla kazdego NAME z tych pól.
Próbuje znalesc sposob na jedno z nich. Mianowicie jest to name="nationality[]"
Chcialbym dla wygody umiescic sjrypt autouzupelnienia. Wpisalbym np "A" a skrypt wyswietlilby wszyskie kraje na litere A. Problem w rym ze to tablica i generowana przez petle wiec jak osadze ID do tego pola to wszedzie bedzie to samo. Mam nadzieje ze wiadomo o co chodzi.
Jak to ominąć/zrobic?
Salvation
To napisz Service, który zwróci Ci listę krajów odpytując metodę z argumentami lub bez. Wtedy będziesz mieć to odseparowane i reużywalne w zgodzie z DRY. Raz użyjesz w aktualnym miejscu, a raz w tym gdzie potrzebujesz zwrócić listę krajów do przeszukania.
maya
Cytat(Salvation @ 28.03.2022, 15:59:58 ) *
To napisz Service, który zwróci Ci listę krajów odpytując metodę z argumentami lub bez. Wtedy będziesz mieć to odseparowane i reużywalne w zgodzie z DRY. Raz użyjesz w aktualnym miejscu, a raz w tym gdzie potrzebujesz zwrócić listę krajów do przeszukania.

Ja nie mam pojecia jak to zrobic bo nie znam js wogole. Są dostepne przyklady w necie ale kazde opiera sie na podaniu nazwy pola text ale w moim przypadku jest to tablica wiec skrypt bedzie dzialal na kazdym z pól w danym momencie tak samo. Czyli jak zaczne wpisywac "A" to powiedzmy w 10cou wygenerowanych polach bedzie pokazywac sie to samo.
Jak sie tego ustrzec albo zmienic lub moze istnieje jakis inny przyklad ktory w jakis inny sposob wyswietla.
trueblue
https://github.com/kraaden/autocomplete ale skoro nie masz pojęcia o JS, to nie wiem czy Ci się uda wykorzystać.
nospor
Cytat(maya @ 28.03.2022, 16:13:52 ) *
Ja nie mam pojecia jak to zrobic bo nie znam js wogole. Są dostepne przyklady w necie ale kazde opiera sie na podaniu nazwy pola text ale w moim przypadku jest to tablica wiec skrypt bedzie dzialal na kazdym z pól w danym momencie tak samo. Czyli jak zaczne wpisywac "A" to powiedzmy w 10cou wygenerowanych polach bedzie pokazywac sie to samo.
Jak sie tego ustrzec albo zmienic lub moze istnieje jakis inny przyklad ktory w jakis inny sposob wyswietla.

Podaj linka do autocomplete co uzywasz. moze mozna tam sie podpiac nie tylko przez ID

A zreszta, nawet jak tylko po ID, to poprostu nadaj dla kazdego pola inne ID, ala pole1, pole2,pole3
a potem tego autocomplete odpal dla kazdego z nich i popproblemie
maya
  1. <!doctype html>
  2. <html lang="en">
  3. <meta charset="utf-8">
  4. <meta name="viewport" content="width=device-width, initial-scale=1">
  5. <title>jQuery UI Autocomplete - Default functionality</title>
  6. <link rel="stylesheet" href="//code.jquery.com/ui/1.13.1/themes/base/jquery-ui.css">
  7. <link rel="stylesheet" href="/resources/demos/style.css">
  8. <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
  9. <script src="https://code.jquery.com/ui/1.13.1/jquery-ui.js"></script>
  10. $( function() {
  11. var availableTags = [
  12. "ActionScript",
  13. "AppleScript",
  14. "Asp",
  15. "BASIC",
  16. "C",
  17. "C++",
  18. "Clojure",
  19. "COBOL",
  20. "ColdFusion",
  21. "Erlang",
  22. "Fortran",
  23. "Groovy",
  24. "Haskell",
  25. "Java",
  26. "JavaScript",
  27. "Lisp",
  28. "Perl",
  29. "PHP",
  30. "Python",
  31. "Ruby",
  32. "Scala",
  33. "Scheme"
  34. ];
  35. $( "#tags" ).autocomplete({
  36. source: availableTags
  37. });
  38. } );
  39. </script>
  40. </head>
  41.  
  42. <div class="ui-widget">
  43. <label for="tags">Tags: </label>
  44. <input id="tags">
  45. </div>
  46.  
  47.  
  48. </body>
  49. </html>


I teraz ja mam np pole text z tablicą ktore generuje pętla

  1. for(......)
  2. {
  3. <input id="tags" name="nationality[]">
  4. }
  5.  

nospor
To tak jak ci pisalem, w petli for co generujesz te INPUT to dodawaj kolejny numerek do ID
a to
$( "#tags" ).autocomplete({
source: availableTags
});

tez generuj w petli i tez dodawaj numerek kolejny i juz
maya
Robilem tak i niby powinno dzialać ale nie dziala.
Działa tylko na ostatnim polu text.

  1. <html>
  2. <head>
  3. <link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
  4. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  5. <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
  6.  
  7. <style>
  8. p, div, input {
  9. font: 16px Calibri;
  10. }
  11. .ui-autocomplete {
  12. cursor:pointer;
  13. height:120px;
  14. overflow-y:scroll;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19.  
  20. </body>
  21.  
  22. <?php
  23. for($i=0;$i<=5;$i++)
  24.  
  25. {
  26.  
  27. print "<input type=\"text\" id=\"tbCountries$i\" /><br>";
  28.  
  29.  
  30. ?>
  31. <script>
  32. $(document).ready(function() {
  33. BindControls();
  34. });
  35.  
  36. function BindControls() {
  37. var Countries = ['ARGENTINA',
  38. 'AUSTRALIA',
  39. 'BRAZIL',
  40. 'BELARUS',
  41. 'BHUTAN',
  42. 'CHILE',
  43. 'CAMBODIA',
  44. 'CANADA',
  45. 'DENMARK',
  46. 'DOMINICA',
  47. 'INDIA'];
  48.  
  49. $('#tbCountries<?=$i;?>').autocomplete({
  50. source: Countries,
  51. minLength: 0,
  52. scroll: true
  53. }).focus(function() {
  54. $(this).autocomplete("search", "");
  55. });
  56. }
  57. </script>
  58. </html>
  59.  
  60. <?php
  61.  
  62. }
  63.  
  64. ?>
viking
Tworzysz 5x tą samą funkcję BindControls która wiadomo że wywoła się zawsze ostatnia. Wywal to Countries poza pętle, zostaw tylko $('#tbCountries<?=$i;?>').autocomplete({
maya
Dzięki za odpowiedz ale ja wogole nie czaje JS i nie wiem co z czym ma byc.

Ktoś mógłby to poskładac żeby działało bo sam nie dam rady
nospor
Kod
<html>
<head>
    <link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

    <style>
        p, div, input {
            font: 16px Calibri;
        }
        .ui-autocomplete {
            cursor:pointer;
            height:120px;
            overflow-y:scroll;
        }    
    </style>
</head>
<body>
<script>
        var Countries = ['ARGENTINA',
            'AUSTRALIA',
            'BRAZIL',
            'BELARUS',
            'BHUTAN',
            'CHILE',
            'CAMBODIA',
            'CANADA',
            'DENMARK',
            'DOMINICA',
            'INDIA'];
</script>  

<?php
        for($i=0;$i<=5;$i++)
            
            {
                
                print "<input type=\"text\" id=\"tbCountries$i\" /><br>";
                
                
?>
<script>
        $('#tbCountries<?=$i;?>').autocomplete({
            source: Countries,
            minLength: 0,
            scroll: true
        }).focus(function() {
            $(this).autocomplete("search", "");
        });
    }
</script>
</body>
</html>

<?php

            }
            
            ?>
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.