Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z foreach
Karoll
post 24.04.2014, 14:05:44
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 11.04.2014

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


Witam, mam problem z moim botem napisanym w php na wczesniejszym serwerze chodził bez problemu, aktualnie wywala błąd foreach :
Cytat
PHP Warning: Invalid argument supplied for foreach() in /home/ts3/ts3/pokebot/core.php on line 38

38,39,40 linijka kodu
  1. foreach ($users as $client) {
  2. if ($client['client_nickname'] != $config['bot']['name']) {
  3. $w = 0;

Wersja PHP na nowej maszynie (php -v)
Cytat
PHP 5.4.4-14+deb7u8 (cli) (built: Feb 17 2014 09:18:47)
Copyright © 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright © 1998-2012 Zend Technologies
with the ionCube PHP Loader v4.2.2, Copyright © 2002-2012, by ionCube Ltd.

Wersja PHP na starej maszynie(php-v)
Cytat
PHP 5.4.27-1~dotdeb.1 (cli) (built: Apr 6 2014 01:32:22)
Copyright © 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright © 1998-2014 Zend Technologies

Może to być wina innej wersji PHP?

Za rozwiąznie oczywiście ręka królewny i pół królestwa;D
Powód edycji: [Kshyhoo]: MANUAL służy do linkowania funkcji manula!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
nospor
post 24.04.2014, 14:07:09
Post #2





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




$users nie jest tablicą


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

"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
Karoll
post 24.04.2014, 14:12:03
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 11.04.2014

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


Cytat(nospor @ 24.04.2014, 15:07:09 ) *
$users nie jest tablicą

Czyli mam błąd w kodzie?
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 14:13:09
Post #4





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




jejkus.... Napisz skad sie bierze te $users to bedziemy ci mogli cos powiedziec... No chyba nie sadzisz, ze wywrozymy z fusow jak wyglada Twoj kod?
Napisz skad sie bierze, pokaz kod


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

"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
Karoll
post 24.04.2014, 14:19:07
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 11.04.2014

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


  1. <?php
  2.  
  3. /*
  4. * PokeBOT on TeamSpeak 3
  5. * Przemysław Thel || admin@thel.pl
  6. * If you wont more info check: <a href="http://www.thel.pl/" target="_blank">http://www.thel.pl/</a>
  7. */
  8.  
  9. date_default_timezone_set('Europe/Warsaw');
  10.  
  11. require_once 'configs/global_config.php';
  12. require_once 'configs/lib/ts3admin.class.php';
  13. require_once 'configs/lib/helper.php';
  14.  
  15. $query = new ts3admin($config['connect']['address'], $config['connect']['tcp']);
  16.  
  17. $cache = array();
  18. $welcome = array();
  19.  
  20. if($query->getElement('success', $query->connect())) {
  21.  
  22. $query->login($config['connect']['login'],$config['connect']['password']);
  23.  
  24. $query->selectServer($config['connect']['udp']);
  25.  
  26. $query->setName($config['bot']['name']);
  27.  
  28. while (true) {
  29.  
  30. $core = $query->getElement('data',$query->whoAmI());
  31. $query->clientMove($core['client_id'],$config['bot']['default_channel']);
  32.  
  33. $users = $query->getElement('data',$query->clientList('-groups -voice -away -times'));
  34.  
  35. $pokes = array();
  36. $admins = array();
  37.  
  38. foreach ($users as $client) {
  39. if ($client['client_nickname'] != $config['bot']['name']) {
  40. $w = 0;
  41. if ($client['cid'] == $config['message']['channel_id'] && !in_array($client['clid'],$welcome)) {
  42. $info = $query->getElement('data',$query->clientInfo($client['clid']));
  43. $welcomeMsg = str_replace('{IP}', $info['connection_client_ip'], file_get_contents('messages/welcome.txt', true));
  44.  
  45. $query->sendMessage(1, $client['clid'], $welcomeMsg);
  46. $welcome[time()-$w] = $client['clid'];
  47. $w++;
  48. }
  49.  
  50. $user_groups = explode(',',$client['client_servergroups']);
  51.  
  52. if (isInGroup($user_groups,$admins_groups) && !in_array($client['clid'],$cache)) {
  53. $admins[$client['clid']] = $user_groups;
  54. }
  55.  
  56. if (array_key_exists($client['cid'],$messages) && !isInGroup($user_groups, $admins_groups) && !$client['client_is_talker']) {
  57.  
  58. $pokes[] = $client['cid'];
  59.  
  60. if (!in_array($client['clid'],$cache)) {
  61. $query->sendMessage(1, $client['clid'], file_get_contents('messages/'.$messages[$client['cid']]['user_poke'],true));
  62. $cache[time()-1] = $client['clid'];
  63. }
  64. }
  65. }
  66. }
  67.  
  68. $counter = 0;
  69.  
  70.  
  71. foreach ($pokes as $poke) {
  72. foreach ($admins as $clid => $admin) {
  73. if (isInGroup($admin, $messages[$poke]['groups'])) {
  74. if (!in_array($clid,$cache)) {
  75. $cache[time()+$counter] = $clid;
  76. $query->clientPoke($clid, file_get_contents('messages/'.$messages[$poke]['admin_poke']));
  77. $counter++;
  78. }
  79. }
  80. }
  81. }
  82.  
  83.  
  84. foreach ($cache as $time => $user) {
  85. if (time() - $time > $config['delete']['cache']) {
  86. unset($cache[$time]);
  87. }
  88. }
  89.  
  90. if (date('H') == '23') {
  91. foreach ($welcome as $time => $user) {
  92. if (time() - $time > 60*60*24) { //1 day
  93. unset($welcome[$time]);
  94. }
  95. }
  96. }
  97.  
  98. $admins = array();
  99. sleep(1);
  100. }
  101. }
  102. ?>
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 14:21:14
Post #6





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




$users = $query->getElement('data',$query->clientList('-groups -voice -away -times'));
Tu masz pobierane $users. Z jakiegos powodu $query->getElement źle zwraca dane. Dlaczego? nie wiem. Nie mam bladego pojecia co robi klasa ts3admin.

Wlacz wyswietlanie wszystkich bledow, to moze pojawią się jakies dodatkowe informacje. Tu masz napisane jak
Temat: Jak poprawnie zada pytanie


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

"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
Karoll
post 24.04.2014, 14:27:31
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 11.04.2014

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


Warning: Invalid argument supplied for foreach() in /home/ts3/ts3/pokebot/core.php on line 40
i tylko tylko pokazuje screen -r czyli w sumie nic się po wklejeniu na początek kodu tych paru linijek nie zmieniło oprócz tego że naturalnie linijka z błędem poleciała w dół...
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 14:30:01
Post #8





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




A daj jeszcze
var_dump($users);
przed FOREACH i pokaz co wyswietli

Od biedy mozesz zrobic tak:
if (is_array($users))
foreach ($users as $client) {
.....

Dzieki temu nie bedziesz mial bledu. Ale czy to rozwiaze twoj problem?


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

"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
Karoll
post 24.04.2014, 14:35:42
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 11.04.2014

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


Cytat(nospor @ 24.04.2014, 15:30:01 ) *
A daj jeszcze
var_dump($users);
przed FOREACH i pokaz co wyswietli

Od biedy mozesz zrobic tak:
if (is_array($users))
foreach ($users as $client) {
.....

Dzieki temu nie bedziesz mial bledu. Ale czy to rozwiaze twoj problem?


Cytat
Warning: Invalid argument supplied for foreach() in /home/ts3/ts3/pokebot/core.php on line 41
bool(false)

Po zmianie na :
Cytat
if (is_array($users))
foreach ($users as $client) {

Rzeczywiście nie ma błędu, ale bot w dalszym ciągu nie działa
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 14:39:41
Post #10





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




No to niestety bardziej ci nie pomogę. Nie wiem co mają robić funkcje ktorych uzywasz ani jak działają. A ze nie pojawiły się żadne dodatkowe bledy, pomimo ze wlaczyles ich wyswietlanie, wiec pech....


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

"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
Karoll
post 24.04.2014, 14:41:56
Post #11





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 11.04.2014

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


Cytat(nospor @ 24.04.2014, 15:39:41 ) *
No to niestety bardziej ci nie pomogę. Nie wiem co mają robić funkcje ktorych uzywasz ani jak działają. A ze nie pojawiły się żadne dodatkowe bledy, pomimo ze wlaczyles ich wyswietlanie, wiec pech....

Ale na poprzedniej maszynie z inną wersją PHP bot działał bez problemu, może w tym tkwi problem?
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 14:43:30
Post #12





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




Moze. ALe jak juz mowilem: skoro nie wyswietlają sie zadne dodatkowe bledy i nie mam bladego pojecia jak dzialają twoje funkcje, wiec nie wiem jakaz zmiana konfiguracji moze miec na to wplyw.


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

"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
Turson
post 24.04.2014, 16:28:11
Post #13





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


nospor widzę stracił cierpliwość i się nie dziwię.
Inna możliwość, to $clients jest tablicą, ale jest puste.

Jak już wspomniano
Cytat
A daj jeszcze
var_dump($users);
przed FOREACH i pokaz co wyswietli

jeśli i tym razem zrobisz coś innego, to nie oczekuj więcej odpowiedzi
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 17:30:53
Post #14





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




@Turson nie stracilem cierpliwosci. Poprostu naprawde nie wiem co robią te funkcje i naprawde nie jestem w stanie pomóc

Zas var_dump($users); autor juz zrobil i pokazal. Tez bys zobaczyl, jakbys nie byl slepy wink.gif


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

"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

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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:22