Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MSSQL][MySQL] Problem z odczytem stanu magazynowego
Forum PHP.pl > Forum > PHP
adi456
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
nospor
NIe za bardzo rozumiem Twojego problemu...

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

adi456
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.  
CuteOne
  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; }
adi456
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ć?
CuteOne
  1. $link = mssql_connect($server, $user, $pass) or die("Nie odnaleziono bazy danych");


skrypt zatrzyma się i wywali na ekran "Nie odnaleziono bazy danych"
adi456
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
CuteOne
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;
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.