Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MSSQL][MySQL] Problem z odczytem stanu magazynowego
adi456
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 21.01.2010
Skąd: Nowy Sącz

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


Witam

Mam mały problem na którym myślę i myślę

Chodzi o to że robię taki mały aktualizator z bazy MSSQL do MySQL

  1. <?php
  2. $link = mssql_connect($server, $user, $pass);
  3.  
  4. mysql_connect("***",$username,$password);
  5. @mysql_select_db($database) or die("Nie odnaleziono bazy danych");
  6. $query = mysql_query("SELECT * FROM towar WHERE stan=''") or die(mysql_error());
  7.  
  8. while ($row = mysql_fetch_array($query))
  9. {
  10. $towar= $row['towar'];
  11.  
  12. $towarid= $row['towarid'];
  13.  
  14.  
  15. $query2 = mssql_query("SELECT * FROM dbo.IsTw WHERE TowId='$towarid'") or die(mysql_error());
  16.  
  17. while ($row = mssql_fetch_array($query2))
  18. {
  19. $ok1= $row['TowId'];
  20. $ok2= $row['MagId'];
  21. $ok3= $row['StanMag'];
  22. };
  23.  
  24. };
  25. ?>


no i chodzi o problem w tej pętli

  1. while ($row = mssql_fetch_array($query2))
  2. {
  3. $ok1= $row['TowId'];
  4. $ok2= $row['MagId'];
  5. $ok3= $row['StanMag'];
  6. };


a chodzi o to że magazynów "MagId" jest 20 i każdy pokazuje stan "StanMag" a chciałbym zrobić tak że gdy w którymkolwiek z tych 20 magazynów wartość będzie większa niż 0 wtedy zapisać zmienną np $stan = '1' a jeśli w magazynach będą liczby 0 lub ujemne wtedy wartość będzie $stan = ''

potem jeżeli $stan = '1' zrobię aktualizacje do MySQL ale z tym już sobie poradzę
nie proszę o gotowe skrypty ale bardzo proszę o jakieś pomocne informacje

Ten post edytował adi456 25.10.2010, 16:34:05
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




NIe za bardzo rozumiem Twojego problemu...

if (stan > 0) $stan = 1;
else $stan = '';



--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
adi456
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 21.01.2010
Skąd: Nowy Sącz

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


gdy zastosuje

if (stan > 0) $stan = 1;
else $stan = '';

da to rezultat że będzie zapisywać wartość "1" lub "" przy każdym magazynie a chodzi mi o to żeby wynik zmiennej był z wszystkich 20 magazynów

problem polega na tym że w bazie MSSQL dla 1 towaru jest 20 magazynów które mają różne ilości a w bazie MySQL chce zapisać informacje czy towar jest dostępny czy tez nie

Wpadłem na pomysł że wszystkie stany z magazynów można zapisać w tablicy czyli

  1. while ($row = mssql_fetch_array($query2))
  2. {
  3. $ok1= $row['TowId'];
  4. $ok2= $row['MagId'];
  5. $ok3[]= $row['StanMag'];
  6. };


tylko jak napisać warunek który sprawdzi czy w tablicy występują liczby większe od zera, jeśli tak to zapisać zmienną $stan = 1 czy tak jest poprawnie bo wywala błąd

Parse error: syntax error, unexpected T_DOUBLE_ARROW

  1. for ($i = 0; $i <= 30; $i++) {
  2. if ($ok3[$i]=>1) {
  3. $stan = "1";
  4. }; };
  5.  


Ten post edytował adi456 25.10.2010, 14:33:01
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1. if ($ok3[$i]=>1) {


  1. if ($ok3[$i]>=1) {


smile.gif

zamienił bym jeszcze główną pętle:
  1. $ok = false;
  2. while ($row = mssql_fetch_array($query2))
  3. {
  4. $ok1= $row['TowId'];
  5. $ok2= $row['MagId'];
  6. if($row['StanMag'] > 0) $ok = true;
  7. $ok3[]= $row['StanMag']; //mozna to usunac
  8. }
  9.  
  10. if($ok) { $stan=1; }


Ten post edytował CuteOne 25.10.2010, 14:45:01
Go to the top of the page
+Quote Post
adi456
post
Post #5





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 21.01.2010
Skąd: Nowy Sącz

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


ok o to chodziło dzięki guitar.gif

mój aktualizator wygląda tak

  1. <?php
  2.  
  3. mysql_connect("***",$username,$password);
  4. @mysql_select_db($database) or die("Nie odnaleziono bazy danych");
  5. $query = mysql_query("SELECT * FROM towar WHERE stan=''") or die(mysql_error());
  6.  
  7. while ($row = mysql_fetch_array($query))
  8. {
  9. $towar= $row['towar'];
  10. $towarid= $row['towarid'];
  11. $gdzie= $row['gdzie'];
  12.  
  13.  
  14. $query2 = mssql_query("SELECT * FROM dbo.IsTw WHERE TowId='$towarid'") or die(mssql_error());
  15.  
  16. $wynik = "";
  17. $ok = false;
  18. while ($row = mssql_fetch_array($query2))
  19. {
  20. $ok1= $row['TowId'];
  21. if($row['StanMag'] > 0) $ok = true;
  22. };
  23.  
  24. if ($ok) {$mag = '1';}
  25. else {$mag = '0';};
  26.  
  27. if ($mag=='0')
  28. {
  29. mysql_connect("***",$username,$password);
  30. mysql_select_db($database) or die("Nie odnaleziono bazy danych");
  31. mysql_query("UPDATE towar SET stan = '$mag' WHERE towarid = '$ok1'");
  32. $wynik = 'Akualizacja sprzedanego towaru: '.$towar.' - sprzedano w: '.$gdzie.'<br>';
  33. };
  34.  
  35. echo $wynik;
  36.  
  37. };
  38. ?>


i zastanawiam się co będzie gdy skrypt nie połączy się z bazą MSSQL czy wtedy w każdym przypadku $mag będzie 0 i wszystkie towary się zaktualizują z zerowym stanem czy wywali błąd? jeśli nie wywali błędu ktoś pomoże go tu włożyć?

Ten post edytował adi456 25.10.2010, 16:33:35
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1. $link = mssql_connect($server, $user, $pass) or die("Nie odnaleziono bazy danych");


skrypt zatrzyma się i wywali na ekran "Nie odnaleziono bazy danych"

Ten post edytował CuteOne 25.10.2010, 16:50:20
Go to the top of the page
+Quote Post
adi456
post
Post #7





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 21.01.2010
Skąd: Nowy Sącz

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


no ale coś jest nie tak. po testach okazało się że towar który powinien być na stanie aktualizuje się jako brak, problem chyba występuje gdy dodam fikcyjny towar który nie odnajduje swojego $towarid a gdy go nie odnajdzie w bazie MSSQL wyszukuje jako $towarid = '' jak mądrze rozwiązać problem, myślałem np o zapisywaniu domyślnej wartości np
$towarid = 'xxx' i jeżeli w tym przypadku $towarid się nie zaktualizuje to będzie szukać w MSSQL jako $towarid = 'xxx' a nie $towarid = '' czy to może poprawić problem??

poprawiłem działanie skryptu dodająć

  1.  
  2. if (!$ok and $towarid == "$ok1")
  3. {
  4. mysql_connect("xxx",$username,$password);
  5. mysql_select_db($database) or die("Nie odnaleziono bazy danych");
  6. mysql_query("UPDATE towar SET stan = '$mag' WHERE towarid = '$ok1'");
  7. $wynik = '<font color="green">Akualizacja sprzedanego towaru: '.$towar.' - sprzedano w: '.$gdzie.'</font><br>';
  8. };
  9.  
  10. if (!$ok and $towarid != "$ok1")
  11. {
  12. $wynik = '<font color="red">Niezgodne wartosci: '.$towar.' - znajduje się w : '.$gdzie.'</font><br>';
  13. };
  14. echo $wynik;
  15.  


ale mój następny problem i pytanie to:

zauważyłem że gdy któryś z warunków zostanie spełniony to powtarza się kilkukrotnie można to zauważyć przez zmienną $wynik - powtarza się np 2, 4 razy w echo co oznacza że skrypt działa dużo wolniej niż powinien proszę o pomoc
Go to the top of the page
+Quote Post
CuteOne
post
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


zawsze możesz sprawdzić czy $towarid nie jest pusty

  1. if(!empty($towarid)) { }


zmiennych nie zapisuje się w " "

  1. if (!$ok && $towarid == $ok1 && !empty($towarid)) {
  2.  
  3. mysql_connect("xxx",$username,$password);
  4. mysql_select_db($database) or die("Nie odnaleziono bazy danych");
  5. mysql_query("UPDATE towar SET stan = '$mag' WHERE towarid = '$ok1'");
  6. $wynik = '<font color="green">Akualizacja sprzedanego towaru: '.$towar.' - sprzedano w: '.$gdzie.'</font><br>';
  7. }
  8. elseif(!$ok and $towarid != $ok1){
  9.  
  10. $wynik = '<font color="red">Niezgodne wartosci: '.$towar.' - znajduje się w : '.$gdzie.'</font><br>';
  11. }
  12. echo $wynik;
Go to the top of the page
+Quote Post

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 Aktualny czas: 19.08.2025 - 13:06