1. sayfa
|
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; Yazabilirsin... |
|
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ü? |
anlamadım=?
|
|
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. |
|
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) |
|
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. |
|
"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. |
|
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. |
|
@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) |
|
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. |
|
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. |
|
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. |
|
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. |
| 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. |
| 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... |
1. sayfa
{
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 Ol Şimdi DeğilÜ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.
< Bu mesaj bu kişi tarafından değiştirildi aramis1 -- 15 Kasım 2006; 17:12:25 >