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
9.04.2014, 20:47:17
Trzeba skaner skonfigurować, by wciskał na koncu enter. Zazwyczaj trzeba w drugą stronę konfigurować...
a to mnie zaskoczyłeś
musze pogoogolowac ten temat chyba że ktoś umie bez tego to obejść
a jak wywołać potem funkcje??
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
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

Męczę się z tym już tydzień a blokuje mnie to żeby dalej robić.
BARDZO PROSZE O POMOC
Geston
10.04.2014, 12:53:11
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.
<?php
?>
<script type="text/javascript">
var kod = "";
setInterval(checkInput, 1000);
function checkInput()
{
var nowy_kod = document.getElementsByName("kod")[0].value;
if (nowy_kod != kod) document.forms["form"].submit();
}
</script>
<form action="auto_send.php" name="form" method="GET">
<input type="text" name="kod" value="" />
</form>
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
10.04.2014, 13:32:24
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ść
10.04.2014, 13:49:18
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
10.04.2014, 13:56:45
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.
TEraz mam taki kod :
<script type="text/javascript">
var kod = "";
setInterval(checkInput, 1000);
function checkInput()
{
var nowy_kod = document.getElementsByName;
if (nowy_kod != kod) document.forms["form"].submit();
}
<form action="klucz.php" name="form" method="GET">
<input type="text" name="kod" value="" />
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
10.04.2014, 20:46:52
Po pierwsze
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:
var nowy_kod = document.getElementsByName;
a nie jak podałem:
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-
11.04.2014, 07:55:25
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
11.04.2014, 09:47:40
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ść
11.04.2014, 12:07:33
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
11.04.2014, 12:35:16
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ść
11.04.2014, 13:04:30
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
11.04.2014, 13:08:04
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ść
11.04.2014, 13:19:28
GASTON
kody bedą odczytywane
a) z kodów kreskowych plomb kluczy

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
11.04.2014, 13:21:54
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ść
11.04.2014, 13:46:16
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
11.04.2014, 14:09:13
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--
13.04.2014, 12:13:35
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
14.04.2014, 07:31:50
A co chcesz więcej przesyłać? Bo tutaj value masz puste.
--poi--
14.04.2014, 14:51:55
chce aby to value przyjeło wartość zmiennej typ która jest pobierana z adresu strony przez GET
Geston
14.04.2014, 16:00:57
<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?

@może zarejestruj się na forum i pisz jako zalogowany użytkownik
Gość
14.04.2014, 16:14:54
zarejestruje sie

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
14.04.2014, 16:23:17
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--
14.04.2014, 17:07:47
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.