Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] kod kreskowy
Forum PHP.pl > Forum > Przedszkole
poi
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.

mmmmmmm
Trzeba skaner skonfigurować, by wciskał na koncu enter. Zazwyczaj trzeba w drugą stronę konfigurować...
Gość
a to mnie zaskoczyłeś

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

a jak wywołać potem funkcje??
Gość
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
poi
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
Geston
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>
poi
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 ?
Geston
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.
Gość
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 ?
Geston
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.
poi
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


Geston
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...
-fenster-
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
Geston
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ść
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?

Geston
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ą.
Gość
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
Geston
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.
Gość
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
Geston
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ść
nie do konca rozumiem

przeciez wynik moze być różny jeden kod jak skanuje to wyglada tak :

00408112
inny KK04522453456
a inny KAT1

wydaje mi się że na to nie ma algorytmu ale pewnie sie myle
Geston
Gdzieś musisz mieć zawartą informację jakim kodowaniem się posługujesz. Do wyboru masz kody paskowe alfanumeryczne: Code39, Code93, Code128, GS1-128, PosiCode, coś w ten deseń, każde z kodowań pozwala na liczenie sumy kontrolnej dzięki czemu można łatwo sprawdzić czy odczytało się kod bez błędu czy z błędem.
--poi--
Geston

Zostawiłem tak jak jest trudno

Teraz powiedz mi jeszcze jedno :

Mam zmienna $typ która pobiera się GET z adresu strony

Dałem do Twojego :

<form action="klucz.php" name="form" method="GET">
<input type="hidden" name="typ" value="">
<input class="wyslij_formularz" type="text" name="kod" value="" autofocus />

jak zrobić żeby value z pola hidden przejeło $typ
Geston
A co chcesz więcej przesyłać? Bo tutaj value masz puste.
--poi--
chce aby to value przyjeło wartość zmiennej typ która jest pobierana z adresu strony przez GET
Geston
  1. <input type="hidden" name="typ" value="<?php echo $_GET['typ']; ?>">


Mimo wszystko jest to dla mnie nie logiczne, wysyłasz z tego formularza ów typ i odbierasz go po to żeby znowu wpisać go do tego samego formularza którym jak go wyślesz to trafi do tego samego formularza i tak w kółko? tongue.gif

@może zarejestruj się na forum i pisz jako zalogowany użytkownik
Gość
zarejestruje sie smile.gif

adres strony to strona.php?typ=$typ&kod=$kod

i potrzebuje żeby typ przy odczycie kodu sie nie gubil

chyba że wrzucić zmienna do sesji, chyba że Ty masz inny prostszy pomysł.

Ja nie dopisywałem tego GET i dlatego mi nie działalo.
Geston
Po kolei. Ten skrypt co stworzyliśmy wcześniej jest na stronie strona.php, w momencie gdy zostanie wyczytany kod kreskowy to wysyła go do klucz.php? Skąd się bierze w adresie "?typ=$typ"? Co tej zmiennej nadaje wartość? W na stronie klucz.php mamy ponownie ten sam formularz? Co robisz z tymi danymi oprócz tego że są przesyłane między formularzami?
--poi--
Przedstawie Ci po kolei

strony główna index.php ma linki do stron strona.php?typ=1 oraz strona.php?typ=2
1 typ dodaje do bazy danych kod 2 typ odejmuje

i dlatego zalezy mi żeby przekazywać ten typ żeby obsłużyć dodanie i odjęcie z bazy danych.


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.