Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP] kod kreskowy, odczyt bez potwierdzenia
-poi-
post 9.04.2014, 20:30:51
Post #1





Goście







Witam,

Szukałem na google ale nie znalazłem rozwiązania - a może źle szukalem.

Mam stronę dodaj.php

Która ma odczytać kod kreskowy za pomocą skanera.

I chciałbym żeby zaraz po odczycie wartość została podstawiona do zmiannej $kod oraz wywołało funkcje dodaj w która uruchamia zapytanie (dodanie wiersza do bazy)

Mam nadzieje że nie namieszałem i zrozumiecie.

Go to the top of the page
+Quote Post
mmmmmmm
post 9.04.2014, 20:47:17
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Trzeba skaner skonfigurować, by wciskał na koncu enter. Zazwyczaj trzeba w drugą stronę konfigurować...
Go to the top of the page
+Quote Post
-Gość-
post 9.04.2014, 20:58:28
Post #3





Goście







a to mnie zaskoczyłeś

musze pogoogolowac ten temat chyba że ktoś umie bez tego to obejść

a jak wywołać potem funkcje??
Go to the top of the page
+Quote Post
-Gość-
post 9.04.2014, 21:25:37
Post #4





Goście







jednak to rozwiazanie odpana ponieważ to ma działać na paru stacjach a nie wiem jakie tam bedą czytniki .. ma być dla laika

wiec poszukuje rozwiazania innego
Go to the top of the page
+Quote Post
-poi-
post 10.04.2014, 12:04:28
Post #5





Goście







mam pole input w którym mam ustawiony fokus.
PO odczytaniu kodu z czytnika chciałbym aby zdarzenie (tak mi się wydaje) onchange spowodowalo wywolanie funkcji która doda mi ten kod do bazy danych.
Niestety nie mogę bawić się w konfigurowanie czytnika ponieważ to ma działac na 10-15 innych komputerach gdzie nie wiem jakie będą czytniki sad.gif
Męczę się z tym już tydzień a blokuje mnie to żeby dalej robić.

BARDZO PROSZE O POMOC
Go to the top of the page
+Quote Post
Geston
post 10.04.2014, 12:53:11
Post #6





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

Ostrzeżenie: (0%)
-----


Taki oto pojedynczy plik który wysyła formularz sam do siebie. Jeżeli przesłano zmienną kod przez GET to ją wyświetla, dalej funkcja wywoływana co sekundę która sprawdza czy zmieniła się zawartość pola input w formularzu względem wcześniej zdefiniowanego pustego stringa "". Jeżeli zauważy zmianę - formularz automatycznie się wysyła i kółko się zamyka. Można oczywiście dopasować pod siebie, przesłać na inną stronę a tam poddać dane obróbce, zapisać do bazy itd. Częstość sprawdzania pola (interwał) można oczywiście zmienić, jeżeli kod jest zczytywany to nie ma problemu wartość może być niska, niekoniecznie 1000. Dodanie do <input ... disabled /> zablokuje przypadkowe wpisanie czegokolwiek z klawiatury a co za tym idzie przypadkowe wysłanie wstukanej wartości do dalszej obróbki.

  1. <?php
  2.  
  3. if(isset($_GET['kod'])) echo $_GET['kod'];
  4.  
  5. ?>
  6.  
  7. <script type="text/javascript">
  8.  
  9. var kod = "";
  10.  
  11. setInterval(checkInput, 1000);
  12.  
  13. function checkInput()
  14. {
  15. var nowy_kod = document.getElementsByName("kod")[0].value;
  16. if (nowy_kod != kod) document.forms["form"].submit();
  17. }
  18.  
  19. </script>
  20.  
  21. <form action="auto_send.php" name="form" method="GET">
  22.  
  23. <input type="text" name="kod" value="" />
  24.  
  25. </form>
Go to the top of the page
+Quote Post
-poi-
post 10.04.2014, 13:25:53
Post #7





Goście







Geston super prawie wszystko tak jak chciałem,

Ale mam pytanko dla Ciebie pewnie pestka dla mnie nie bo nie bawię się tym na codzień.

odpalam stronę nic nie wpisuje , widze że stronka się przeładowuje co 1s.
Dodaje mi do adresu strony ?kod= a tego bym nie chciał dopiero jak się zczyta kod to chciałbym aby dopisało się ?f=dodaj&kod=tutajzaczytanykod

Bo rozumiem że nie da się tak zrobić żeby stronka się przeładowało dopiero po skanie z czytnika a nie tak jak teraz non stop ?
Go to the top of the page
+Quote Post
Geston
post 10.04.2014, 13:32:24
Post #8





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

Ostrzeżenie: (0%)
-----


Strona się nie odświeża do póki nic nie zostanie wpisane. Pozostaje statyczna bez żadnych argumentów na pasku adresu.
Dopiero kiedy wpiszesz cokolwiek, albo inaczej zczytasz bo sprawdzanie odbywa się na tyle szybko że ręcznie nic sensownego nie wpiszesz, następuje nie tyle odświeżenie strony co zwykłe wysłanie formularza (potestuj z ctrl+v - wklejając jakiś tekst).
Żeby nie było widać tych argumentów w pasku adresu wystarczy zmienić metodę wysyłania na POST i odbierać dane z tablicy $_POST.

Ten post edytował Geston 10.04.2014, 13:33:14
Go to the top of the page
+Quote Post
-Gość-
post 10.04.2014, 13:49:18
Post #9





Goście







no ale tak robi ale domyślam się dlatego że dałem autofocus - da się to ominąc żeby był focus a nie ładowało siębez odczytu kodu ?
Go to the top of the page
+Quote Post
Geston
post 10.04.2014, 13:56:45
Post #10





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

Ostrzeżenie: (0%)
-----


A musisz mieć autofocus żeby władowało do tego akurat inputa? Nie ładuje Ci po atrybucie name inputa? Jeżeli tak to dodałbym zamiast autofocus bardziej disabled żeby właśnie w inputa nie dało się nic wpisać z klawiatury przez co będziesz mieć gwarancję że przez przypadek niczego nie wklepiesz z klawiatury i nie poddasz obróbce niepotrzebnych danych.
Go to the top of the page
+Quote Post
-poi-
post 10.04.2014, 17:49:22
Post #11





Goście







TEraz mam taki kod :

  1. <script type="text/javascript">
  2.  
  3. var kod = "";
  4.  
  5. setInterval(checkInput, 1000);
  6.  
  7. function checkInput()
  8. {
  9. var nowy_kod = document.getElementsByName;
  10. if (nowy_kod != kod) document.forms["form"].submit();
  11. }
  12.  
  13. </script>
  14.  
  15. <form action="klucz.php" name="form" method="GET">
  16.  
  17. <input type="text" name="kod" value="" />
  18.  
  19. </form>



po załadowaniu strony klucz.php po 1sek

strona zmiania adres na klucz.php?kod= i odswieza sie

po wyłączeniu autofokusa żeby zeskanowac kod musze kliknąc na pole myszka.
Jeżeli nie zrobie tego w jedna sekunde to kursor znika i nie da się zaczytac kodu.

Idealnym rozwiązaniem jest tak
po przejsciu do strony nie zmienia się adres strony na klucz.php?kod=
włącza się kursor na polu gdzie się będzie skanować (autofocus)
po zeskanowaniu się kodu przenosi się do strrony klucz.php?f=dodaj&kod=tutaj kod kreskowy (dzieje się tak po zeskanowaniu kodu, w przykładzie Gestona można w ciągu sekundy wykonac nawet 3 skany kodu wtedy nie uda mi się go przypasowac do wzorca z bazy danych

CZy ktoś jest w stanie zrobić poprawkę do tego kodu


Go to the top of the page
+Quote Post
Geston
post 10.04.2014, 20:46:52
Post #12





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

Ostrzeżenie: (0%)
-----


Po pierwsze

  1. var nowy_kod = document.getElementsByName;


Tutaj zgubiłeś coś.

Po drugie, zmień interval na 100 jak chcesz uniknąć kilku zczytań w tej sekundzie. Kod kreskowy ma chyba zawsze tę samą długość, ogranicz więc input atrybutem maxlength i więcej znaków nie przyjmie.

@edycja

że tak dodam...
Jeżeli naprawdę masz:

  1. var nowy_kod = document.getElementsByName;


a nie jak podałem:

  1. var nowy_kod = document.getElementsByName("kod")[0].value;


To się nie dziwię że działa źle... Warunek zawsze jest spełniany, przepisz dokładnie co Ci wysłałem to będzie działać dobrze...

Ten post edytował Geston 10.04.2014, 20:51:08
Go to the top of the page
+Quote Post
--fenster--
post 11.04.2014, 07:55:25
Post #13





Goście







masz racje dodałem to spowrotem nawet wrzuciłem focus i działa bez problemu.

Ostatnie pytanko i problem moj bedzie rozwiązany

Jak ustawiłem czas 100 to zdarza się że kod się nie zaczyta cały.
Zbyt mały czas.

Przy 1000 zdarzyło się to może z 1 raz na 100

Czy jest opcja żeby on po zaczytaniu kodu + 1sec dopiero wysłał formularz lub jakiś inny pomysł

Bo w wersji obecnej spełnia to 90% tego co potrzebowałem za CO BARDZO DZIĘKUJE
Go to the top of the page
+Quote Post
Geston
post 11.04.2014, 09:47:40
Post #14





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

Ostrzeżenie: (0%)
-----


Skoro zdarza się to raz na 100 to odczytane dane poddawałbym po prostu walidacji, jeżeli byłyby poprawne (odpowiednia ilość odczytanych znaków) to dopiero obrabiałbym dane, jeżeli dane byłyby nieprawidłowe - komunikat bez obróbki danych, input cały czas aktywny i skrypt będzie czekał na kolejne odczytanie kodu.

Kod kreskowy zawsze składa się z takiej samej ilości cyfr i tylko cyfr?
Go to the top of the page
+Quote Post
-Gość-
post 11.04.2014, 12:07:33
Post #15





Goście







kod może zawierać i cyfry i znaki różnej długości.

a da się zrobic tak aby ta funkcja

setInterval(checkInput, 1000);

odpalała się dopiero po zdarzeniu onchange?

Go to the top of the page
+Quote Post
Geston
post 11.04.2014, 12:35:16
Post #16





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

Ostrzeżenie: (0%)
-----


Nie może bo nie używamy onchange bo onchange wymaga wciśnięcia enter lub kliknięcia myszą gdzieś poza inputem.

Jakbyś podał mi dokładnie jakie znaki mogą pojawić się w kodzie kreskowym (na pewno nie same cyfry?) w sensie czy cyfry, czy cyfry i litery, jak litery to tylko małe czy też małe i duże albo tylko duże? Ile tych znaków się pojawia? 20? 24? Zawsze tyle samo czy w przedziale od 10 do 30 lub innym (jakim?). To podpowiem co dalej bo rozwiązanie jest już proste.

Jeżeli jest to kod EAN-13 to można całkiem to ogarnąć już żeby działało ze 100% skutecznością.

Ten post edytował Geston 11.04.2014, 12:27:35
Go to the top of the page
+Quote Post
-Gość-
post 11.04.2014, 13:04:30
Post #17





Goście







GESTON dzięki za wytrzymałość.
ZNaki mogą byc różne cyfry łączone z literami a długość też może byc różna - na to ja nie mam wpływu
Go to the top of the page
+Quote Post
Geston
post 11.04.2014, 13:08:04
Post #18





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

Ostrzeżenie: (0%)
-----


To skąd Ty te kody masz... właściwie we wszystkim teraz stosuje się EAN-13 złożony z samych cyfr gdzie ostatnia cyfra jest cyfrą kontrolną i dzięki temu można dorzucić wyrażenie regularne i do niego porównać odczytany kod dzięki czemu nie tylko sprawdzisz odczytanie kodu ale też poprawność tego co odczytałeś. No ale jak to nie jakiś konkretny system kodów paskowych... Poszukaj jego oznaczenia, to może ułatwić sprawę.

@edycja
no może nie we wszystkim, EAN-13 to kod trafiający do rejestru właściwie ogólnoświatowego, do celów prywatnych (ewidencja, inwentaryzacja) używa się pewnie czegoś innego - ciekaw jestem czy system kodowania ma jakąś nazwę, oznaczenie, lub przynajmniej z ilu znaków conajmniej się składa, i czy pojawiają się tam tylko litery a-z, A-Z i cyfry 0-9 czy jeszcze jakieś znaki.

Ten post edytował Geston 11.04.2014, 13:20:23
Go to the top of the page
+Quote Post
-Gość-
post 11.04.2014, 13:19:28
Post #19





Goście







GASTON

kody bedą odczytywane
a) z kodów kreskowych plomb kluczy
cool.gif z kodów kreskowych z kopert
c) wersja gorsza z kodów wygenerowanych samemu (np ktoś sobie wygeneruje kod K1 i przypisze go do jakiegos klucza) i to tez musi być dobrze odczytane
Go to the top of the page
+Quote Post
Geston
post 11.04.2014, 13:21:54
Post #20





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

Ostrzeżenie: (0%)
-----


Tak jak wyżej wspomniałem, one muszą być generowane z użyciem jakiegoś konkretnego algorytmu, który losuje znaki z pośród jakiejś konkretnej puli, liter małych a-z, dużych A-Z, cyfr 0-9, ma jakieś ograniczenia na pewno, że tycn znaków musi być np zawsze 10, albo przynajmniej 6 a maksymalnie 14 itd, spróbuj to ustalić.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2025 - 07:45