phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

FAQFAQ - PIERWSZA POMOC!!  regulaminREGULAMIN  SzukajSZUKAJ  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload  katalog Forów DyskusyjnychKatalog Forów   FAQ Video tutoriale

Poprzedni temat «» Następny temat
[php] Zmienne global
Autor Wiadomość
maniek.a


Pomógł: 14 razy
Posty: 303
Wysłany: 31-05-2013, 12:03   [php] Zmienne global

Witam! Mam problem z zmiennymi global. Problem wygląda następująco:
Kod:
 case 'addfak':
        $lastID ='';
            if (!isset($_POST['lp']))
            {
                $id =$_POST['id'];
                $fak=$_POST['fak'];
                $nazwa=$_POST['nazwa'];
                $adres=$_POST['adres'];
                $nip=$_POST['nip'];
                mysql_query("INSERT INTO faktury VALUES ('', '$fak', '$nazwa', '$adres', 'Polska', '$nip')");
                global $lastID;
                $lastID = mysql_insert_id();
            }
            else
            { 
                $lp =$_POST['lp'];
                $towar =$_POST['towar'];
                $vat =$_POST['vat'];
                $fak =$_POST['fak'];     
                mysql_query("INSERT INTO pozycje VALUES('','$lastID','$lp','$towar')");
            }
        break;

Teoretycznie powinno to działać tak: Po dodaniu rekordu do tabeli faktury zmienna global $lastid przyjmuje wartość ID tego rekordu, a następnie rekordy do tabeli pozycje są dodawane z tym id. Niestety za każdym razem dodaje 0 zamiast konkretnego id. Funkcja mysql_insert_id(); działa na pewno, więc problem leży w zmiennej. Próbowałem po else dodać global $lastID; jednak nic to nie daje.


Głupio mi się zwracać do was z taki błahym problemem jednak nie mam już do tego siły.
 
     
Gadatliwa Kasia 

   
Woytec


Pomógł: 2596 razy
Posty: 7676
Wysłany: 31-05-2013, 12:26   

Czy użycie global jest potrzebne? Masz to jakiejś funkcji i wynosisz wartość do/na zewnątrz jej? W warunkach to nie jest potrzebne. Jeżeli ta zmienna ma być wykorzystana w dalszym pokazanym zapytaniu wstawiającym do tabeli "pozycje" to nie może być w dwóch przeciwnych blokach warunkowych bo jeden z nich się nie spełni.
 
     
maniek.a


Pomógł: 14 razy
Posty: 303
Wysłany: 31-05-2013, 14:20   

Cytat:
Jeżeli ta zmienna ma być wykorzystana w dalszym pokazanym zapytaniu wstawiającym do tabeli "pozycje" to nie może być w dwóch przeciwnych blokach warunkowych bo jeden z nich się nie spełni.


To wiem. Chodzi o to, że formularz ten jest wywoływany przez jQuery i wchodzi najpierw do faktur, a potem robi po kolei pozycje, tylko że tego ID faktur nie chce pobierać, tylko myślałem, aby od razu go przypisać na stałe do $lastid - da się tak czy jednak będę musiał za każdym razem pobrać max(id) z faktur?
 
     
MQs

Pomógł: 172 razy
Posty: 480
Wysłany: 31-05-2013, 15:02   

1. Jeśli wywołanie zapytań (wstawiających fakturę i pozycje) następuje w obrębie jednego requesta to błędem jest miejsce deklaracji zmiennej globalnej - powinna być na zewnątrz warunków. W tym przypadku jeszcze warto rozważyć zmianę tej zmiennej na static - jeśli nie potrzebna na zewnątrz (zakładam, że to funkcja - inaczej w grę wchodzi tylko przypadek 2) to nie ma co tworzyć potencjalnych kolizji.

2. Jeśli fakturę dodaje jedno wywołanie skryptu, a kolejnymi chcesz dodawać pozycję to wszystkie zmienne są likwidowane (zostają jedynie ciastka, które latają od serwera do klienta). Możesz dodać ukryte pole formularza z informacji zwrotnej lub każdorazowo odczytywać lastID z bazy/cache lub ostatecznie ciastka.
 
     
maniek.a


Pomógł: 14 razy
Posty: 303
Wysłany: 31-05-2013, 23:23   

Chyba właśnie wpiszę sobie lastid do tabeli config.

Tylko tutaj pojawia się nowe pytanie: Czy jeżeli mam plik config php, a w nim taką strukturę:
Kod:
<?
$config = mysql_query ("SELECT  *  FROM  conf");
while ($zapisz = mysql_fetch_array($config)) {
$numer =$zapisz['numer']; 
$lastID=$zapisz['lastid']; 
$nazwa =$zapisz['nazwa'];
$ulica =$zapisz['ulica'];
}
 
I teraz includuje config i odwołuję się do zmiennej z tego pliku - to czy on za każdym razem od nowa wysyła zapytanie do bazy i przypisuje dane do zmiennych, czy jest na tyle inteligentny, że aktualizuje zmienne tylko w czasie zmiany? Bo jeżeli przy dodawaniu np. 100 pozycji do faktury, 100 razy miałby mi pobierać lastid z configa to jest to trochę bez sensu.

Niestety, ale w swoim phpmyadmin nie mam możliwości włączenia pełnego debug loga, aby zobaczyć jak to działa.
Ktoś może wie jak to działa?
 
     
MQs

Pomógł: 172 razy
Posty: 480
Wysłany: 01-06-2013, 03:04   

Wyżej pośrednio ci napisałem jak to (całe php) działa. To nie jest program, który "zaczeka" na wprowadzone dane (trzymając wcześniej zbudowane zmienne w pamięci) tylko wykona się cały a kolejne dane będzie mógł przetworzyć dopiero przy następnym wywołaniu skryptu. Wszystko, co potrzebne musi zbierać od nowa.

Skoro używasz jQuery to możesz ograniczyć odczytywanie tych samych danych poprzez ajax, który będzie dopisywał html nie tworząc całej strony od nowa. Z danych już wprowadzonych potrzebne ci jedynie ostatnie ID, żeby skrypt wiedział jakie będzie następne. Możesz przy okazji obejrzeć sobie kod shoutbox'a (nie mówię, że to jakiś wzorcowy przykład) w części odpowiedzialnej za wysyłanie nowego wpisu (odświeżanie jest ci tutaj niepotrzebne).

Z tego co widzę to masz nadzieję nauczyć się programować pisząc własny program, ale niestety muszę cię rozczarować - nawet jeśli będzie działał, nie przedawni się zanim skończysz (mam tu na myśli funkcje mysql) i nie będzie zawierał dziur (i tak byłby to sukces) to będzie on katastrofalnie słaby pod względem algorytmicznym, bo im większy projekt tym mniej czasu na naukę, a więcej na bezmyślne pisanie w celu obejrzenia jakiegokolwiek rezultatu. Zobacz co robi twój przykładowy config - nadpisuje te same zmienne aż dojdzie do ostatniego wiersza - po co tak?!
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Kopiowanie wszelkich treści zawartych na forum, modyfikacji oraz instrukcji bez zgody administracji i autorów tematów/postów zabronione!

Powered by phpBB modified by Przemo © 2003 phpBB
Strona wygenerowana w 0,13 sekundy. Zapytań do SQL: 11
Polecane serwisy

Najlepsze oprogramowanie do prowadzenia sklepu internetowegoNajlepszy program do sklepu firmowany przez Przem'a

Sklep z gadżetami

serwis laptopów

phpbb

Design Cart - Tworzenie sklepu internetowego

iRonin.IT

• Zamów reklamę