Arama butonu
Bu konudaki kullanıcılar: 1 misafir
16
Cevap
2722
Tıklama
0
Öne Çıkarma
mysql_fetch_array- while döngüsü
A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

while ($row = mysql_fetch_array($result))
{
extract($row);
$f_price = number_format($price,2);
echo “<tr>\n
<td>$petName</td>\n
<td>$petDescription</td>\n
<td align=’right’>\$$f_price</td>\n
</tr>\n”;
echo “<tr><td colspan=’3’><hr></td></tr>\n”;
}

Result, bir sorgunun çıktısı.

Normal programlama mantığında, bu döngünün içinde bir kontrol değeri olmalı. O değer döngü çalıştıkça bir şekilde değişmeli ve o değer while satırındaki condition ın dışına çıktığında döngü durmalı.

Burada bu olay nasıl oluyor?

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi aramis1 -- 15 Kasım 2006; 17:12:25 >

L
20 yıl (466 mesaj)
Yüzbaşı

mysql_fetch_array($result)'ı okurken her satırı array olarak algılıyor....
while döngüsü;
while(1=1) oldugunca devam eder....

while($row = mysql_fetch_array($result)) diyince de ;
$row, herzaman 1 dir.Sen oluşturuyorsun vardır yani.
mysql_fetch_array($result)'da okuma sonuna kadar vardır.okuma sonunda olmadıgından 0 olur ve
while(1=0)'a dönüşür ve while durur....

Eğer sen burada bir şekilde 4.satırda falan döngüyü durdurmak istersen.....
$i=0; 
while ($row = mysql_fetch_array($result) && $i<4)
{
extract($row);
$f_price = number_format($price,2);
echo “<tr>\n
<td>$petName</td>\n
<td>$petDescription</td>\n
<td align=’right’>\$$f_price</td>\n
</tr>\n”;
echo “<tr><td colspan=’3’><hr></td></tr>\n”;
$i++;
}

Yazabilirsin...


Bu mesaja 2 cevap geldi.
M
20 yıl (1544 mesaj)
Binbaşı

@aramis

muhabbet kuşlarından anlar mısın?


Bu mesaja 1 cevap geldi.
A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

Cevabın için teşekkür ederim. Koşulu anladım. Ancak hala anlamadıgım bişey var,
sanırım my_sql_fetcharray fonksiyonunu tam olarak anlamadığım için anlayamıyorum;

yukarıdaki durumda bildiğim kadarı ile şunlar oluyor:

benim sorgu sonucum, (ki bu arada programın yazmadıgım satırlarında SELECT sorgusu kullanılmış, yani result bir select sorgusunun sonucunun yerini işaret ediyor) temporary biryere kaydediliyor. Result ta saklanan değer ise sorgunun sonucu değilde aslında bu temporary locationın nerede oldugunu tanımlayan bir değer. fetcharray fonksiyonu result la tanımlanan yerdeki sordu sonucunun ilk satırını ( mı???) alıp bir arraye dönüştürüyor ve biz bunu row isimli bir array değişkenine kaydediyoruz. Döngü ilk çalışmaya başladıgında fetch array sorgunun ilk satırını (???) alıyor. peki döngünün ikinci defa çalışmasında fetcharray ikinci satıra nasıl geçiyor. Anladıgım kadarı ile kendiliğinden geçiyor. Yani çalışması için öyle olması lazım. Gerçekten boyle mi? Eger boyle ise bu işin mekanizması nasıl. Burada bir eksiklik bir tuhaflık var sanki? ikinci satıra nasıl atlıyor.

Şöyle bir soru sorarsam, bu soruya alacagım yanıt bazı şeyleri anlamamı sağlayacak: diyelim ki 1 satırı tekrar okutmak istedim. Bunu nasıl yapıcam. Ve bu mümkün mü?


Bu mesaja 1 cevap geldi.
A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

anlamadım=?

quote:

Orjinalden alıntı: Midgàrd

@aramis

muhabbet kuşlarından anlar mısın?



M
20 yıl (1544 mesaj)
Binbaşı

Senin de dedigin gibi mysql_fetch_array fonksiyonunun ne amacla ne sekilde kullanilacagini bilmiyorsun. fetch array tablonun sutunlarini (1 nci sutun 2 nci sutun 3 ncu sutun gibi) yazirmani saglar.

Ornegin fonksiyonu while ($row, mysql_fetch_array($query, MYSQL_NUM)) seklinde kullanirsan $row[1] yazdiginda ornegin tabloda birinci sutunun 'id' ise id'leri listeleyecektir. MYSQL_NUM yerine MYSQL_ASSOC kullanmis olursan, $row[id] kullanarak id'leri listelersin yada MYSQL_BOTH kullanirsan hem $row[1] hemde $row[id] yazarak id leri listelemen mumkun olur.

Gelelim soruna, ikinci satirdaki veriye nasil geciyor diye soruyorsun. Bunu yapan mysql_fetch_array degil, oraya mysql_fetch_assoc 'da desen ayni durumla karsilasirsin, degisen birsey olmaz. Satirlari listeleyen, 1 nci satiri ikinci ve ucuncu hatta tum satirlarini listeleyen fonksiyon burada while(); fonksiyonun oluyor.

Şöyle bir soru sorarsam, bu soruya alacagım yanıt bazı şeyleri anlamamı sağlayacak: diyelim ki 1 satırı tekrar okutmak istedim. Bunu nasıl yapıcam. Ve bu mümkün mü? ... demişsin, açıkcası tam olarak bu sorunu anlayabilmis degilim.


Bu mesaja 2 cevap geldi.
L
20 yıl (466 mesaj)
Yüzbaşı

ben anladım gibi....
Tekrar okumak istediğin satır varsa, while döngüsüne
if sorgusu koy....( sorgu içinde ör:belirli bir satır sayısına geldiğinde, hedefli satır okutma yapsın)



A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

fetcharray tablonun sutunlarını yazdırmanı sağlar demişsin. Satırlarımı demek istedin.

Döngü kullanmadıgımızı farzedelim. Yani aşagıda yazdıgım satırı bir kere çalıştırdık diyelim.

$row = mysql_fetch_array($result)

bu komut çalıştıktan sonra, row isimli arrayin içine sorguya uyan bir tek kaydın tüm bilgileri yerleşecek değil mi. Bi örnek tablo verecek olursam:

müşteriler ismli bir tablom olsun. ve bu tablonun ID, İSİM, SOYİSİM ve MESLEĞİ şeklinde sutunları olsun. bu tabloda mesleği öğretmen olanları sorgulatıp, $row = mysql_fetch_array($result) satırını döngü kurmadan bir kere çalıştırdıgımda row isimli arrayin elemanları neler olur: ID, İSİM ve SOYİSİM indexli toplam 3 eleman.





< Bu mesaj bu kişi tarafından değiştirildi aramis1 -- 16 Kasım 2006; 13:30:02 >
Bu mesaja 1 cevap geldi.
A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

"Satirlari listeleyen, 1 nci satiri ikinci ve ucuncu hatta tum satirlarini listeleyen fonksiyon burada while(); fonksiyonun oluyor. " demişsin;

while fonksiyonu satırları nasıl listeler. While bloğu içinde hiçbirşekilde tablonun farklı bir satırını seçmemezi sağlayacak bir instruction yok ki?

row[petName]
row[petDescriptio]
row[price]


While döngüsü her seferinde aynı şeyi yazıyor. Row arrayi içindeki üç elemanı listeliyor. Önceden bu arrayin elemanları değişmediği sürece hep aynı değerleri yazacaktır.





< Bu mesaj bu kişi tarafından değiştirildi aramis1 -- 16 Kasım 2006; 13:31:39 >
Bu mesaja 1 cevap geldi.
A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

evet arkadaslar cevabı buldum.

"mysql_fetch_array kısacası her seferinde kayıt dizisinden bir kayıt alır ve kayıt dizisindeki bütün kayıtları alana kadar bu işleme devam edebilir, kayıtlar bitince fonksiyon FALSE döndürür.

$kayit = mysql_fetch_array($sorgu);
Böylece $kayit değişkenine bir kayıtlık bilgi atanır. Her mysql_fetch_array çağrıldığında bir önce alınan kayıttan sonraki kayıttan kayıtlar alınmaya başlanır, böylece ardı ardına fonksiyon çağrıldıktan sonra son kayıda erişildiğinde son kayıttan sonra hiç kayıt alınamayacağı için fonksiyon FALSE döndürür. mysql_fetch_array ilişkili bir dizi geri döndürür, bu ilişkili dizide dizi indisleri tablo kayıt isimleridir"

Tahmin ettiğim gibi mysql_fetc_array her çağırılışında otomatik olarak bir sonraki kayda kendisi geçiyor. Yani bu işi while döngüsü falan yapmıyor. Zaten "fetcharray ile bir kaydı iki defa nasıl okuturum "şeklindeki sorumu sormamın amacı da buydu.

Looter tablo sona erdiğinde fetch array in false dödürdüğünü zaten söylemişti saolsun.

Sizlere teşekür ediyorum yardımlarınız için.


Bu mesaja 1 cevap geldi.
M
20 yıl (1544 mesaj)
Binbaşı

@aramis1

Anlattigin seyin mysql_fetch_array ile uzakdan yakindan zerre kadar alakasi bulunmamakta.

http://www.php.net/mysql_fetch_array
http://www.php.net/while

Bir bak bakalim mysql_fetch_array ne ise yariyor, while ne ise yariyor ...

mysql_fetch_array yerine ayni islemi mysql_fetch_assoc ile yap, bakalim fark var mi ... while dongusunu olusturmadan ayni anda 1 ve 2 id kayitlarini ekrana yazdirman mumkun mu bir de onu dene ...

Neyse senin amacin yardim aramak degil bu forumda sanirim ... (bkz. iddaa bayiisi)


Bu mesaja 1 cevap geldi.
A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

allah allah, ne diyosun anlamadım, neymiş amaç, bir de sen nasıl tespit ediyosun benim amacı mı. Çok ayıp. Sana ve diğer arkadaşıma yardımları için teşekkür ettim, senin cevabın da bu oldu. Hakikaten çok ayıp.

While döngüsü oluşturmada iki ayrı kaydı yazdırmanın mümkün olduğunu mu iddia ettim ben. Yanlış anlamışsın.Tam aksine bunu iddia eden sensin:

"Senin de dedigin gibi mysql_fetch_array fonksiyonunun ne amacla ne sekilde kullanilacagini bilmiyorsun. fetch array tablonun sutunlarini (1 nci sutun 2 nci sutun 3 ncu sutun gibi) yazirmani saglar. " : bunu yazan sensin, ben değilim.

Demişsin ki: " Gelelim soruna, ikinci satirdaki veriye nasil geciyor diye soruyorsun. Bunu yapan mysql_fetch_array degil, oraya mysql_fetch_assoc 'da desen ayni durumla karsilasirsin, degisen birsey olmaz. Satirlari listeleyen, 1 nci satiri ikinci ve ucuncu hatta tum satirlarini listeleyen fonksiyon burada while(); fonksiyonun oluyor. "

Bu yazdıkların bana mantıklı gelmedi. Araştırdım ve haklı oldugumu da gördüm. Doğru oldugunu düşündügüm cevabı da bunu okuyan diger insanlar faydalansın diye yazdım. Hata mı ettim. Sen üzülmeyesin diye yazmamalımıydım yani. Eğer yazdıklarım doğru değilse bunu açıklarsın. Bir tartışma ortamı doğar ve doğruyu bulmuş oluruz. Ama senin amacın bu değil şu değil şeklinde kişisel sataşmalarla kavga ortamı yaratman hiç doğru değil. Hele hele benim son mesajım teşekkür olmuşken bunu yapman bence çok ayıp.

While dögüsü nasıl arrayin içeriğini değiştirsin. Akıl var mantık var. While döngüsünün yaptığı şey her seferinde arrayin içeriğini yeniden yazdırmak. Söyler misin, arrayin içeriği değişmiyorsa bu döngünün her seferinde farklı satırı yazdırması mümkün mü. Eğer arrayin içeriği değişmezse her seferinde aynı satırın bilgilerini yazacaktır.


Bu mesaja 1 cevap geldi.
A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

Senin verdiğin linkten bir alıntı:

"Description
array mysql_fetch_array ( resource result [, int result_type] )

Returns an array that corresponds to the fetched row and moves the internal data pointer ahead. "

Evet gerçektende fetch arrayin her seferinde bir sonraki sorgu satırına geçtigini buradanda açıkça görüyoruz ve bunun için bir internal data pointer kullandıgını anlamış oluyoruz. demekki bu işi yapan, yani sorgunu diğer satırının seçilmesini sağlayan fetc array miş.

sen şöyle yazmıştın: "Gelelim soruna, ikinci satirdaki veriye nasil geciyor diye soruyorsun. Bunu yapan mysql_fetch_array degil"

Bu arada PHP yi henüz öğreniyor olsamda, while' ın ne işe yaradığını 13 yıl önce öğrenmiştim.





< Bu mesaj bu kişi tarafından değiştirildi aramis1 -- 16 Kasım 2006; 17:21:41 >
Bu mesaja 1 cevap geldi.
L
20 yıl (466 mesaj)
Yüzbaşı

aramis1;
öncelikle senin bir şeyi çözdükten sonra bencillik yapmayarak, bildiklerini başkalarıda okusun öğrensin diye yazman GERÇEKTEN ÇOK GÜZEL.
Bunun için sana ben de teşekkür ederim.

( Bu arada Forum da ard arda mesaj atmak yasak ! Mesajlarına edit yapabilirsin... )

Şaka olarak diyecem ama yazıların çok uzun geldi :)

---------------------------
Herkez için Konuyu toparlarsak;
---------------------------
While ( sorgu )
döngüsü sorgu doğru olana kadar
{ }
parantez içlerini tekrar tekrar okur;

Ör:
while( sorgu )
{
$a=2; //a değeri 2 oluyor
echo"$a"; //a değeri yazdırılıyor
$a=$a+1; //a değeri 3 oluyor
}
//Çıktısı: sorgu sağlana kadar 2 yazacaktır.
-------------------------------------
mysql_fetch_array()'da ise;
satırları tek tek okur (array olarak)

Ör: ( Tabloda 3 sütun var....Adı,soyadı,mail )
$veri_yolu = mysql_connect('localhost', 'root');
$results=mysql_query("SELECT * FROM tablo_adımız", $veri_yolu);
while($row = mysql_fetch_array($result))//satırlar okundugu sürece
{
echo $row[1].$row[2].$row[3]//sıradaki okunan satırda ki belirtilen sütunlar okunur
}
//çıktı olarak satır sayısı kadar kişilerin adı,soyadı ve mail adreslerini yazacaktır.( Önce ilk satırdaki adı,soyadı,mailı sonra 2.satır ve kaçtane varsa.... )
---------------------------------

Ek NOT:
$veri_yolu = mysql_connect('localhost', 'root');
$results=mysql_query("SELECT * FROM tablo_adımız", $veri_yolu);
$numrows=mysql_num_rows($results); //$numrows Tabloda kaç sütun oldugunu verir.





< Bu mesaj bu kişi tarafından değiştirildi looter -- 16 Kasım 2006; 23:29:53 >
Bu mesaja 1 cevap geldi.
A
20 yıl (402 mesaj)
Yüzbaşı
Konu Sahibi

Solasın,
Konuyu gayet güzel toparlayıp örneklendirmişsin. Şu an bu topic i açarak öğrenmek istediğim konuyu tamamen anlamış durumdayım. Zamanlarından harcayıp bu topice yazan arkadaşlarıma teşekkür ederim.

Belirtmek isterim: amacım sadece buradaki arkadaşların tecrübelerinden yararlanmak, naçizane varsa tecrübelerim, öğrendiklerim bunları da paylaşmak.


Bu mesaja 1 cevap geldi.
M
20 yıl (1544 mesaj)
Binbaşı

Anlamsiz bi tartisma olmus burada ... Dedigim gibi manuali okursan orada fonksiyonlarin ne ise yaradigini gorursun. While'i 13 yil evvel C'de ogrenmen ile PHP deki baglantisinida kavrayamadim aslinda. Neyse, burada insanlara yanlis bilgi vermeni istemem, hepsi bu.


Bu mesaja 1 cevap geldi.
B
11 yıl (1715 mesaj)
Binbaşı

anladıgım kadarıyla söle bi mantık olusuyor arkadaslar mysql_fetch_array fonksiyonu fonksiyonmu demeliyim bilmiyorum ama veri tabanından ceken verileri bir dizi haline getiriyor php de dizileri bilirsiniz dizlerde her verinin bir indis numarası olur bunlar 0 dan baslar 1 2 3 4 diye gider while dongusu 1 den 10 kadar yada 100 e kadar saydırdıgı için dizileri bir dongu içinde dondurebiliyoruz olay anladıgım kadarıyla budur...



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.