|
|
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo
|
|
[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?! |
|
|
|
 |
|
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
|
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,06 sekundy. Zapytań do SQL: 11 | |
 |
|