Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: skrypt php UPDATE MYSQL
Forum PHP.pl > Forum > PHP
stern
Witam, nie wiem gdzie wstawić ten temat więc jeśli zły dział to proszę o przeniesienia.

Próbowałem napisać skrypt aby wybierał losowo jeden rekord (id) a następnie z tabeli gracza o tym rekordzie wyciągał liczby galaxy, system, planet. Następnie zrobił update tabel w game_fleets o niżej podanych wartościach.
Prosiłbym o sprawdzenie tego kodu smile.gif

Tu jest przykładowy wygląd tych tabel: http://img20.imageshack.us/img20/2505/mysql.png

  1. <?php
  2. if ($czas['bedzie'] >= time()) {
  3.        $cos = doquery('SELECT id FROM game_planets ORDER BY RAND() DESC LIMIT 1');
  4.        $idtarget = $target['id'];
  5.        $cos2 = doquery('SELECT galaxy,    system,    planet FROM game_planets WHERE id = $idtarget');
  6.  
  7.  
  8.        $fl_ar = rand(202,215), rand(100,100000); rand(216,231), rand(10,10000);232,1; //zapis w bazie MYSQL wyglądał musi wyglądać np tak: 213,89304;218,6800,232,1;
  9.        $fl_st = (time() )
  10.        $fl_et = (time()+ 3600)
  11.        $fl_ti = $fl['start_time'];
  12.        $czas  = time() + rand(60,120)
  13.        $g = $cos2['galaxy']
  14.        $s = $cos2['system']
  15.        $p = $cos2['planet']
  16.            $cos3 = "UPDATE game_fleets SET
  17. fleet_id = 999999999,      fleet_owner = 3,                fleet_mission = 3,
  18. fleet_amount =  0,           fleet_array = '$fl_ar',         fleet_start_time = '$fl_st',
  19. fleet_start_galaxy = 5,     fleet_start_system = 5,      fleet_start_planet = 5,
  20. fleet_start_type = 1,        fleet_end_time = '$fl_et',    fleet_end_stay = 0,
  21. fleet_end_galaxy = '$g',   fleet_end_system = '$s',     fleet_end_planet = '$p',
  22. fleet_end_type     = 1,        fleet_taget_owner = 0,       fleet_resource_metal = 0,
  23. fleet_resource_crystal = 0, fleet_resource_deuterium = 0,    
  24. fleet_target_owner= '$idtarget', fleet_group = 0,        fleet_mess = 0,
  25. start_time = '$fl_ti'";
  26.    $cos4 = doquery"UPDATE game_user SET bedzie = '$czas'";
  27.            break;
  28.        }
  29. ?>


Ps: Jestem początkującym, dopiero zaczynam się uczyć języka PHP i MYSQL więc proszę o wyrozumiałość wstydnis.gif
z3L
$idtarget = $target['id']; -> niby co kryje się za tą zmienną ?

Twój sposób poboru losowego pola jest dobry przy małych tablicach, przy większych jest to mało wydajne, polecam zajrzeć do artykułu: http://www.greggdev.com/web/articles.php?id=6 lub http://www.google.pl/search?hl=pl&q=my...mp;aq=f&oq=

Nie wiem po co Ci wyciąganie danych przed updejtem, możesz umieścić to w jednym zapytaniu, aczkolwiek wyciąganie losowego id polecam zrobić inaczej, wyżej masz link do artykułu.

Przeczytaj:
http://dev.mysql.com/doc/refman/5.0/en/update.html
http://www.w3schools.com/sql/sql_union.asp
http://dev.mysql.com/doc/refman/5.0/en/inn...king-reads.html
stern
Chodziło mi o to aby najpierw wylosował liczbe (id) ktorą zapisywał by jako $idtarget a następnie dzieki $idtarget wyciagnęło pola galaxy, system i planet.

W bazie bedzie maxymalnie 150 rekordow, funkcja bedzie wywolywana raz na 3 dni.
Jezeli mozecie to sprawdzcie gdzie mam bląd, szukam od 2h :/ (wyrzuca mi blad po linii $cos2 = doquery('SELECT galaxy, system, planet [...]
Pawel_W
  1. <?php
  2. $cos2 = doquery('SELECT galaxy,    system,    planet FROM game_planets WHERE id = $idtarget');
  3. ?>

tak nie może być, zamień to na
  1. <?php
  2. $cos2 = doquery('SELECT galaxy,    system,    planet FROM game_planets WHERE id = '.$idtarget);
  3. ?>
stern
niestety nadal wyrzuca błąd :/

coś jest nie tak z tą częścią kodu, pewnie coś z losowym wybieraniem zawaliłem :/
  1. <?php
  2. $fl_ar = rand(202,215), rand(100,100000); rand(216,231), rand(10,10000);232,1; //zapis w bazie MYSQL wyglądał musi wyglądać np tak: 213,89304;218,6800,232,1;
  3.       $fl_st = (time() )
  4.       $fl_et = (time()+ 3600)
  5.       $fl_ti = $fl['start_time'];
  6.       $czas  = time() + rand(60,120)
  7.       $g = $cos2['galaxy']
  8.       $s = $cos2['system']
  9.       $p = $cos2['planet']
  10.           $cos3 = "UPDATE game_fleets SET
  11. fleet_id = 999999999,      fleet_owner = 3,                fleet_mission = 3,
  12. fleet_amount =  0,           fleet_array = '$fl_ar',         fleet_start_time = '$fl_st',
  13. fleet_start_galaxy = 5,     fleet_start_system = 5,      fleet_start_planet = 5,
  14. fleet_start_type = 1,        fleet_end_time = '$fl_et',    fleet_end_stay = 0,
  15. fleet_end_galaxy = '$g',   fleet_end_system = '$s',     fleet_end_planet = '$p',
  16. fleet_end_type     = 1,        fleet_taget_owner = 0,       fleet_resource_metal = 0,
  17. fleet_resource_crystal = 0, fleet_resource_deuterium = 0,    
  18. fleet_target_owner= '$idtarget', fleet_group = 0,        fleet_mess = 0,
  19. start_time = '$fl_ti'";
  20.   $cos4 = doquery"UPDATE game_user SET bedzie = '$czas'";
  21. ?>
Pawel_W
no bo tak nie może być, zamien to na:
  1. <?php
  2. $fl_ar = rand(202,215).', '.rand(100,100000).'; '.rand(216,231).', '.rand(10,10000).';232,1';
  3. ?>
stern
z3L , Pawel_W Podziękowania wysłane ^^

teraz wyskakuje mi błąd

  1. You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near
  2. 'FROM game_planets WHERE id =' at line 1
  3. SELECT galaxy, system, planet, FROM game_planets WHERE id =



To jest poprawiony kod:
  1. <?php
  2. if ($czas['bedzie'] >= time()) {
  3.       $cos = doquery('SELECT id FROM game_planets ORDER BY RAND() DESC LIMIT 1');
  4.       $idtarget = $target['id'];
  5.       $cos2 = doquery('SELECT galaxy,   system,    planet, FROM game_planets WHERE id = '.$idtarget);
  6.  
  7.  
  8.       $fl_ar = rand(202,215).', '.rand(100,100000).'; '.rand(216,231).', '.rand(10,10000).';232,1'; //zapis w bazie MYSQL wyglądał musi wyglądać np tak: 213,89304;218,6800,232,1;
  9.       $fl_st = ( time() );
  10.       $fl_et = ( time()+ 3600 );
  11.       $fl_ti =  time();
  12.       $czas  = ( time() + rand(60,120) );
  13.       $g = $cos2['galaxy'];
  14.       $s = $cos2['system'];
  15.       $p = $cos2['planet'];
  16.           $cos3 = "UPDATE game_fleets SET
  17. fleet_id = 1,      fleet_owner = 3,                fleet_mission = 3,
  18. fleet_amount =  1,           fleet_array = '.$fl_ar,         fleet_start_time = '.$fl_st,
  19. fleet_start_galaxy = 5,     fleet_start_system = 5,      fleet_start_planet = 5,
  20. fleet_start_type = 1,        fleet_end_time = '.$fl_et,    fleet_end_stay = 0,
  21. fleet_end_galaxy = '.$g,   fleet_end_system = '.$s,     fleet_end_planet = '.$p,
  22. fleet_end_type     = 1,        fleet_taget_owner = 0,       fleet_resource_metal = 0,
  23. fleet_resource_crystal = 0, fleet_resource_deuterium = 0,    
  24. fleet_target_owner= '.$idtarget, fleet_group = 0,        fleet_mess = 0,
  25. start_time = '.$fl_st,         bedzie = '.$czas";}
  26. ?>

dodam że funkcja nie wysyła danych do bazy mysql :/
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.