Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwna rzecz z foreach()
Forum PHP.pl > Forum > PHP
SoulRipper
Witam

Na forum znalazlem juz podobny watek, jednak nie bylo w nim odpowiedzi na pytanie, ktore mnie nieco denerwuje.
http://forum.php.pl/index.php?showtopic=22195

Mianowicie chodzi o to, ze jak wyswietlam rekord to kazdy jego elemnt jest pokazywany podwojnie.

  1. <?php
  2.  
  3. foreach($row as $prv)
  4. {
  5.  echo $prv.&#092;"<BR>\";
  6. }
  7.  
  8. ?>

Taki kodzik pokazuje 20 wpisow, a powinien 10(tyle kolum ma tabela).

Jak robie to samo metoda 'lopatologiczna' tj.
  1. <?php
  2.  
  3. echo $row[0].<&#092;"BR\">;
  4. echo $row[1].<&#092;"BR\">;
  5. echo $row[2].<&#092;"BR\">;
  6. echo $row[3].<&#092;"BR\">;
  7. echo $row[4].<&#092;"BR\">;
  8. echo $row[5].<&#092;"BR\">;
  9. echo $row[6].<&#092;"BR\">; etc.
  10.  
  11. ?>


Pozdrawiam
nospor
foreach dziala ok. najwyraźniej $row ma 20 elementów. DAj
echo $row[18];
i zobacz czy sie wyswietli zawartośc
doctorek
A jaki efekt daje:

  1. <?php
  2. echo &#092;"<pre>\";
  3. print_r($row);
  4. echo &#092;"</pre>\";
  5. foreach($row as $prv)
  6. {
  7.  echo $prv.&#092;"<BR>\";
  8. }
  9.  
  10. ?>
SoulRipper
@Nospor - $row[18] nie ma wartosci

@Doctorek -

Kod
Array
(
   [0] => 1
   [id] => 1
   [1] => EF
   [nick] => EF
   [2] => jakis md5 hash
   [pass] => jakis md5 hash
   [3] => 1
   [prv_art] => 1
   [4] => 1
   [prv_news] => 1
   [5] => 1
   [prv_admin] => 1
   [6] => 1
   [prv_gal] => 1
   [7] => 1
   [prv_link] => 1
   [8] => 1
   [prv_file] => 1
   [9] => 1
   [prv_poll] => 1
)
1
1
EF
EF
jakis md5 hash
jakis md5 hash
1
1
1
1
1
1
1
1
1
1
1
1
1
1
nospor
czyli jak widać masz 20 elementów w tablicy $row. Masz podwójne indexy. Jedne liczbowe, drugie literowe.
Jak tworzysz tą tablicę? each? mysql_fetch_array?
SoulRipper
Dane przechwytuje standartowo:

  1. <?php
  2.  
  3. $dane = explode(&#092;"++\",$_COOKIE['info']);
  4. $query = mysql_query(&#092;"SELECT * FROM admin WHERE pass='$dane[1]' AND nick='$dane[0]'\");
  5. $row = mysql_fetch_array($query);
  6.  
  7. ?>


Zrobilem dump tabeli w phpmyadmin i nic nadzwyczajnego sie nie pokazalo.

Jak wywalic niepotrzebny index?
DeyV
mysql_fetch_assoc lub mysql_fetch_row
nospor
mysql_fetch_array zwraca dpmyslnie index i liczbowy i literowy. Wywolaj ją z parametrem:
  1. <?php
  2.  
  3.  mysql_fetch_array($query, MYSQL_NUM); //liczbowe
  4. //lub
  5.  mysql_fetch_array($query, MYSQL_ASSOC); //literowe
  6.  
  7. ?>
SoulRipper
Dobra dziala, dzieki!

Zastanawia mnie tylko, czemu tak sie stalo? Przez caly czas jak programuje w php i korzystam z mysql, nigdy czegos takiego nie mialem. Czy to wina struktury tabeli, czy czego? Zawsze uzywalem mysql_fetch_array bez dodatkowych argumentow i dzialalo.

Pozdrawiam
nospor
bo nigdy pewnie nie używales foreach. mysql_fetch_array bez argumentów dziala tak samo dobrze. kwestia tego co ty potem z tym robisz
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.