Toplu veri güncelleme

Kodla Büyü
Mesajlar
28
Kod:
if($_POST["kaydet"]){
    include("baglantiders.php");
    $sorgu="SELECT * FROM ders";
    mysql_query("set names utf8");
    $sonuc=mysql_query($sorgu);
    $kayit_say=mysql_num_rows($sonuc);
                    for($i=1;$i<=$kayit_say;$i++){
                        $kayit=mysql_fetch_array($sonuc);
                        $no=$kayit["sno"];
                        $ad=$kayit["ad"];
                            $sorgu1="update ders set yazili1=$y1[$i],yazili2=$y2[$i],yazili3=$y3[$i],yazili4=$y4[$i] where sno=$no";
                            $sonuc=mysql_query($sorgu1);
                            echo"<tr>
                            
                                <td>$no</td>
                                <td>$ad</td>
                                <td> <input name='y1[$i]' type='text' value='".$y1[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y2[$i]' type='text'  value='".$y2[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y3[$i]' type='text'  value='".$y3[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y4[$i]' type='text'  value='".$y4[$i]."'  size='1' maxlength='3' /></td>
                            </tr>";
                    }
}

?>

Toplu veri güncellemesi yapmak istediğimde sadece ilk kaydı güncelliyor bir türlü çözemedim.
 
Kod şöyle olmalı:

Kod:
if($_POST["kaydet"]){
    include("baglantiders.php");
    $sorgu="SELECT * FROM ders";
    mysql_query("set names utf8");
    $sonuc=mysql_query($sorgu);
    $kayit_say=mysql_num_rows($sonuc);
                    for($i=1;$i<=$kayit_say;$i++){
                        $kayit=mysql_fetch_array($sonuc);
                        $no=$kayit["sno"];
                        $ad=$kayit["ad"];
						$y1=@$_POST['y1'];
						$y2=@$_POST['y2'];
						$y3=@$_POST['y3'];
						$y4=@$_POST['y4'];
                            $sorgu1="update ders set yazili1='$y1',yazili2='$y2',yazili3='$y3',yazili4='$y4' where sno=$no";
                            $sonuc=mysql_query($sorgu1);
                            echo"<tr>
                           
                                <td>$no</td>
                                <td>$ad</td>
                                <td> <input name='y1' type='text' value='".$y1[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y2' type='text'  value='".$y2[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y3' type='text'  value='".$y3[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y4' type='text'  value='".$y4[$i]."'  size='1' maxlength='3' /></td>
                            </tr>";
                    }
}

?>
 
şu kodda gereksiz hocam bunu çıkarabilirsin.
Kod:
$sonuc=mysql_query($sorgu1);
 
ekrandaki gibi toplu veri gişiri yapıp güncelleme yapmak istiyorum
 

Ekli dosyalar

  • Ekran Alıntısı.JPG
    Ekran Alıntısı.JPG
    23.9 KB · Görüntüleme: 1,998
$no=$kayit["sno"];
burdaki olay ne her döngüde aynı değeri alıyor
oysa $kayit[$i];

gibi birşey olmalı

foreach(){
}

bri kolleksiyon içindeki herbir deyeri ele almak için for each ı araştırmanı ve kullanmanı tavsiye derim
 
alpaygunes' Alıntı:
$no=$kayit["sno"];
burdaki olay ne her döngüde aynı değeri alıyor
oysa $kayit[$i];

gibi birşey olmalı

foreach(){
}

bri kolleksiyon içindeki herbir deyeri ele almak için for each ı araştırmanı ve kullanmanı tavsiye derim

orada bi sorun yok onu kullanmamın amacı veritabanından kayıtları listeleyip güncelleme yapmaya hazır hale getirmem
 
$no=$kayit["sno"];
her döndüe $no değeri aynı almazmı böyle istersen echo $kayit["sno"]; şeklinde yazdır emin olalım

eğer dedğimgibi ise $no değişmiyorsa
sorunun sonudaki şart da değişmiyordur where sno=$no";


echo "<pre>"
print_r($kayit);
echo "</pre>"

şeklide bir ekrana yazdırsana kaytı dizisini

ayrıca heödngüde bu satır işlenmez zorundamı ?
$kayit=mysql_fetch_array($sonuc);
fordan bir satır önce ,sadece birkere işlense ollmazmı?
 
Kod:
                                <td>$no</td>
                                <td>$ad</td>
                                <td> <input name='y1' type='text' value='".$y1[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y2' type='text'  value='".$y2[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y3' type='text'  value='".$y3[$i]."'  size='1' maxlength='3' /></td>
                                <td><input name='y4' type='text'  value='".$y4[$i]."'  size='1' maxlength='3' /></td>
yazdırma işlemini tabloyu listelerken kullandım
 
Hep ilk kaydı güncelliyor derken ne oluyor? sno değeri 1, 2 ve 3 olan üç tane kaydınız var ve siz bunları değiştirmek istediğinizde sadece 1. mi değişiyor, yoksa bütün kayıtlar girdiğiniz bilgiyle aynı mı oluyor?
Ekran görüntüleriyle gösterirseniz iyi olur.
 
Hocam birden fazla satırınız varsa ilk önce textboxların adını benzersiz olarak belirlemelisiniz. (orn: ad1; not1-ad2;not2 gibi) sonra kayıt sayfasına toplam kaç satır olması gerektiğini göndermellisiniz. KAyıt sayfasında aldığınız satır sayısı kadar döngü kurup her defasında formdan gelen alanları çekip veritabanına kaydetmelisiniz.
size örnek olması açısından. http://www.bilgisayarbilisim.net/asp-asp-net-f174/asp-de-coklu-kayit-islemi-t59757-15.html bu sayfanın en sonudaki mesajımı bir inceleyin. (asp-access ama mantık aynı)
Kolay gelsin.
 
oguz_efe' Alıntı:
Hocam birden fazla satırınız varsa ilk önce textboxların adını benzersiz olarak belirlemelisiniz. (orn: ad1; not1-ad2;not2 gibi) sonra kayıt sayfasına toplam kaç satır olması gerektiğini göndermellisiniz. KAyıt sayfasında aldığınız satır sayısı kadar döngü kurup her defasında formdan gelen alanları çekip veritabanına kaydetmelisiniz.
size örnek olması açısından. http://www.bilgisayarbilisim.net/asp-asp-net-f174/asp-de-coklu-kayit-islemi-t59757-15.html bu sayfanın en sonudaki mesajımı bir inceleyin. (asp-access ama mantık aynı)
Kolay gelsin.

mantıkta sorun yok zaten inceledim o koduda benim sorunum php de ard arda güncelleme yapamamam
 
Şuan itibari ile kodların ne drumda bilmiyorum ama ben hala yadığın sql cümlesinde where şart ının sırayla güncelleme yapmaya uygun olmadığını düşünüyorum
Çünkü döngü içinde $i sürekli artarken
$sorgu1="update ders set yazili1='$y1',yazili2='$y2',yazili3='$y3',yazili4='$y4' where sno=$no";
cümlsesinde $i ile direk bir ilişki yok. Hatta dolaylı bir ilişkide yok.
Yada ben kodlara bakrak değerlendirme yaptığımdan anlayamıyorum.

tablodaki sno alnın değerleri 1,2,3 ise yer deneme amaçlı şunu yap
where sno IN (1,2,3) ";
yada
where sno=$i
 
$sonuc=mysql_query($sorgu1);
satırından dolayı döngü ilk döndüğünde $sonuç değişkeninin değeri değişiyor. Bunu
$sonuc1=mysql_query($sorgu1);
olarak değiştirin.
 
yakuphan' Alıntı:
$sonuc=mysql_query($sorgu1);
satırından dolayı döngü ilk döndüğünde $sonuç değişkeninin değeri değişiyor. Bunu
$sonuc1=mysql_query($sorgu1);
olarak değiştirin.

bak bu satır dikkatimi yeni çekti.
$sonuc=mysql_query($sorgu1); yerine

mysql_query($sorgu1) denenemeli
çünkü bu fonstiyonun dönderdiyi değre true veya false dir

$sonuc=true veya false oluyor yani
sonra üst satırda
$kayit=mysql_fetch_array($sonuc);
$kayit=mysql_fetch_array(true); gibi mantıksaız bir işlem gerçekleşiyor
 
alpaygunes' Alıntı:
yakuphan' Alıntı:
$sonuc=mysql_query($sorgu1);
satırından dolayı döngü ilk döndüğünde $sonuç değişkeninin değeri değişiyor. Bunu
$sonuc1=mysql_query($sorgu1);
olarak değiştirin.

bak bu satır dikkatimi yeni çekti.
$sonuc=mysql_query($sorgu1); yerine

mysql_query($sorgu1) denenemeli
çünkü bu fonstiyonun dönderdiyi değre true veya false dir

$sonuc=true veya false oluyor yani
sonra üst satırda
$kayit=mysql_fetch_array($sonuc);
$kayit=mysql_fetch_array(true); gibi mantıksaız bir işlem gerçekleşiyor


Kod:
$sorgu="update ders set yazili1=$y1[$i],yazili2=$y2[$i],yazili3=$y3[$i],yazili4=$y4[$i] where sno=$no";
mysql_query($sorgu);

teşekkür ederim sorunu çözdük saolasın bayağı bi uğraştırmıştı. normalde hatalı olmaması gerekirdi
demek hata bundan kaynaklanıyormuş yardımların için tekrar teşekkür ederim.
 
BBNET
Geri
Üst