Arama butonu
Bu konudaki kullanıcılar: 1 misafir
24
Cevap
1116
Tıklama
0
Öne Çıkarma
checkbox tan ID post edip çekme sorunu
B
12 yıl
Er
Konu Sahibi

Merhaba arkadaşlar, Access veritabanından çektiğim verileri listeliyorum, listelediğim verilerden checkbox kullanarak seçtiğim verileri başka sayfaya post edip oradan yazdırmak istiyorum.

tek bir checkbox işaretleyip post ettiğimde sorun yok, ama birden fazla seçersem kayıt bulunamadı hatası alıyorum, response.write kullanarak çektiğim veriye bakıyorum Id'ler 61, 62, 63 şeklinde geliyor. bir türlü çözemedim. yardım edebilecek arkadaş varsa çok memnun olurum.

<form action="search-dok.asp?" method="get"> 
<% do while not rs.eof %>
<input type="checkbox" name="dok" value="<%=rs("ID")%>">
<%
rs.movenext:loop
end if
%>
<input type="submit" value="Dök.." />



search-dok.asp

<%  
ID=Request.Querystring("dok")

Set baglanti=Server.Createobject("Adodb.Connection")
baglanti.provider="Microsoft.Jet.Oledb.4.0"
baglanti.open Server.Mappath("logo.jpg.mdb")

sql="select * from tbkayit where ID like '%"&ID&"%'"
Set rs=baglanti.execute(Sql)
%>

<% if rs.eof then
response.write "Kayıt Bulunamadı !!!" %>

<% else %>

<% do while not rs.eof %>
<p><%=rs("ID")%></p>
<p><%=rs("boy")%></p>
<%
rs.movenext:loop
end if
%>



S
12 yıl
Onbaşı

Merhaba,

Eğer birden fazla veri seçtiysen bu Request.Querystring("dok") kısmı 61,62,63 oluyor ve veritabanında 61,62,63 diye bir ID olmadığı için hata veriyor.
search-dok.asp sayfasında gelen verileri split etmen gerekiyor. Request.querystring ten gelen veriyi yakalıyorsun zaten. " , " ile split (ayırıp) edip verileri öyle seçtirmen gerekiyor.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

kimse cevap yazmıycak zannetmeye başlamıştım, ilgilendiğin için sağol.

split kullanmadım örnek verebilirsen sevinirim.


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı

ID = Request.Querystring("dok")
parcala = Split(ID,",")
Adeti = Ubound(parcala)
for i = 0 to Adeti

ID2 = parcala(i)
//Şimdi burada parcala(i) döngü 1 kere döndüğünde 61. ikincide 62. üçüncüde 63 olacak.
Daha sonra select * from vsvsvs ID = @parcala(i)
şeklinde select yaptırabilirsin.
tabi en sondada next ile foru kapatman gerekiyor.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

Hocam çok teşekkür ederim mantığı anladım, dediğini tam olarak yapamadım galiba hata aldım. aşağıdaki şekilde halloldu. Bu konuyu arattım çoğu yerde yarım yamalak anlatılıyor. Aynı sorunu yaşayan arkadaşlar için son halini paylaşıyorum.


<%  
ID=Request.Querystring("dok")
For Each x in Split(ID,",")

Set baglanti=Server.Createobject("Adodb.Connection")
baglanti.provider="Microsoft.Jet.Oledb.4.0"
baglanti.open Server.Mappath("logo.jpg.mdb")

sql="select * from tbkayit where ID = "&x&""
Set rs=baglanti.execute(Sql)

if rs.eof then
response.write "Kayıt Bulunamadı !!!"
else
%>

<% do while not rs.eof %>
<tr>
<th><%=rs("ID")%></th>
<th><%=rs("unvani")%></th>
</th>
<%
rs.movenext:loop
end if
next
%>


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı

Evet doğru bir şekilde kullanıyorsun. Ancak şunuda bilmemde fayda var. QueryStringden aldığın IDde injection açığı vardır. Yani sayfa.aspx?ID=5 se birisi buraya sayfa.aspx?ID=5'or --Select * from users vsvssvs şeklinde bir işlem yaparsa veritabanına ulaşabilir hatta veritabanını komple silebilir. Bu yüzden sana tavsiyem injection açıklarından kurtulman. Bunun için

ID=Request.Querystring("dok") şeklinde aldıktan sonra ID değerinde " ' , or , and , < , > , select , insert , update , delete " gibi değerleri replace ettirmen gerekiyor.
Bunun için ID = ID.Replace("or","") şeklinde replace metodunu kullanabilirsin.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

Bunuda öğrendiğim iyi oldu, ama sadece localde stok takip programı gibi kullanılacağı için açığı olması çok önemli değil. Yardımların için teşekkür ederim. şimdilik bu sorun çözüldü genel olarak toparladım sayılır. Bitince paylaşıma açmayı düşünüyorum, ihtiyacı olan kullanabilir.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

aslında takıldığım bir alan daha vardı hazır senin gibi bu konudan iyi anlıyan birini bulmuşken sorayım :)


ckadet adında bir tablo var ve burada çıkış yapılan adetler tutuluyor.


set ckToplam = Conn.Execute("Select Sum (ckadet) As ckToplam from tbkayit")

=ckToplam("ckToplam")

Şeklinde ckadet tablosundaki verilerin toplamını başka rapor sayfasında alıyordum.


search-dok.asp sayfasında sadece çektiğim IDlerdeki, ckadet satırının verilerin toplamını nasıl yazdırırım.


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı

set ckToplam = Conn.Execute("Select Sum (ckadet) As ckToplam from tbkayit") gibi ID parametresini göndermen lazım.
set ckToplam = Conn.Execute("Select Sum (ckadet) As ckToplam from tbkayit where ID = IDDegerin")
IDDegerin yani split ile böldüğün değer
Daha sonra döngü içerisinde
gelentoplamdeger = gelentoplamdeger + ckToplam("ckToplam")
işlemiyle toplattırman lazım en sonda döngünün dışında gelentoplamdeger değişkenini ekrana yazdırabilirsin.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

hım tam olarak anlamadım ama neyse :) çözücez artık sağol


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı

database ve tablo yapılarını tam olarak bilmediğim için ancak o kadar açıklayabiliyorum. tablolarını açıklayıcı bir şekilde anlatabilirsen daha detaylı bilgi verebilirim.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

search-dok.asp sayfasının içersinde çalışacak.

aşağıdaki kodlarda ckadet olarak yazdırdığım sütunu toplamaya çalışıyorum

set ckToplam = Conn.Execute("Select Sum (ckadet) As ckToplam from tbkayit") dediğim zaman ckadet teki tüm kayıtları topluyor. ama ben sadece checkbox çektiğim verileri toplamak istiyorum.

 
<%
ID=Request.Querystring("dok")
For Each x in Split(ID,",")

Set baglanti=Server.Createobject("Adodb.Connection")
baglanti.provider="Microsoft.Jet.Oledb.4.0"
baglanti.open Server.Mappath("logo.jpg.mdb")

sql="select * from tbkayit where ID = "&x&""
Set rs=baglanti.execute(Sql)

if rs.eof then
response.write "Kayıt Bulunamadı !!!"
else
%>

<% do while not rs.eof %>
<tr>
<th><%=rs("ID")%></th>
<th><%=rs("unvani")%></th>
<th><%=rs("ckadet")%></th>
</th>
<%
rs.movenext:loop
end if
next
%>


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı

Tüm kayıtları toplatıyorsun. Checkbox tan seçtiğin değerlerinde IDlerini alabiliyorsun. O zaman tüm kayıtları toplatırken sorguna where parametresi göndermen gerekiyor. Tüm kayıtları değil de Where bilmemneID = checkboxtangelenID şeklinde çektirmen gerekiyor.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

böyle yaptım ama bu seferde sadece son döktüğü kaydı yazıyor

 
<%
nakliye=Request.Querystring("cknakliyeci")
ID=Request.Querystring("dok")
For Each x in Split(ID,",")

Set baglanti=Server.Createobject("Adodb.Connection")
baglanti.provider="Microsoft.Jet.Oledb.4.0"
baglanti.open Server.Mappath("logo.jpg.mdb")

sql="select * from tbkayit where ID = "&x&""
Set rs=baglanti.execute(Sql)

set ckToplam = Conn.Execute("Select Sum (ckadet) As ckToplam from tbkayit where ID = "&x&"")

if rs.eof then
response.write "Kayıt Bulunamadı !!!"
else
%>
<% do while not rs.eof %>
<tr class="metin-baslik">
<th><%=rs("ID")%></th>
<th><%=rs("unvani")%></th>
<th><%=rs("ckadet")%></th>
<%
rs.movenext:loop
end if
next
%>
<tr>
<th> </th>
<th> </th>
<th><%=ckToplam("ckToplam")%></th>
</tr>


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı

set ckToplam = Conn.Execute("Select Sum (ckadet) As ckToplam from tbkayit where ID = "&x&"")
Bundaki verileri okumak içinde bir döngü kur aç
daha sonra üst mesajda dediğim gibi
toplamdeger = toplamdeger + ckToplam("ckToplam")
Şeklinde toplamlarını bir döngüde toplattırman gerekiyor.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

Dostum yardımların için sağol, çalıştı sonunda

 
<%
ID=Request.Querystring("dok")
For Each x in Split(ID,",")

Set baglanti=Server.Createobject("Adodb.Connection")
baglanti.provider="Microsoft.Jet.Oledb.4.0"
baglanti.open Server.Mappath("logo.jpg.mdb")
set ckToplam = baglanti.Execute("Select Sum (ckadet) As ckToplam from tbkayit where ID = "&x&"")

toplamdeger = toplamdeger + ckToplam("ckToplam")
next
%>
<th><%=toplamdeger%></th>


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı

Rica ederim. Bu derttende kurtuldun. Ne mutlu sana :)


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

sayende dostum :) valla çok uğraştım aslında basitmiş

devam ediyorum halen, daha çok işi var


Bu mesaja 1 cevap geldi.
O
12 yıl
Er

Hocam benim sorunumda buna benzer aslında olup olmayacağını da bilmiyorum yardımcı olursanız sevinirim.

1. Sorum: Aşağıda alt alta 2 kaydı veritabanında iki ayrı ID ye kaydettirebilir miyim? ( Şu anda aynı ID'ye 7701 STAR ETEK, 7786 LOVELY KADİFE ETEK şeklinde kayıt ediyor.)

 

<form action="siparisonayla.asp" method="POST">
<table class="table table-striped table-bordered bootstrap-datatable datatable">
<thead>
<tr>
<th>Ürün Adı</th>
<th>1 Adet Fiyatı</th>
<th>Seri (1 Seri=5 Adet)</th>
</tr>
</thead>
<tbody>
<tr>

<td class="center"><input value="7701 STAR ETEK " name="baslik"></td>
<td class="center"><input value="20" name="fiyat"></td>
<td class="center"><input value="3" name="seri"></td>

</tr>

<tr>
<td class="center"><input value="7786 LOVELY KADİFE ETEK" name="baslik"></td>
<td class="center"><input value="30" name="fiyat"></td>
<td class="center"> <input value="3" name="seri"></td>

</tr>

<tr><td></td><td class="center"></td><td class="center"> </td><td class="center"></td>
<td class="center"></td>
<td class="center">
</td>

</tr>
</tbody>
</table>

<input type="submit" value=" Siparişi Onayla " onClick="JavaScript:return confirm('Seçili kayıtları onaylamak istediğinizden emin misiniz?');">


</form>



1. Sorum olmuyorsa; Virgüllü şekilde veritbanına kayıt edilen birden fazla alanı nasıl ekrana yazdırabilirim?

 
<%
set cemgr=server.CreateObject("Adodb.Recordset")
sql="select * from uyeler where uye_id="&session("uye_id")
cemgr.open sql,cms,1,3




%>
<%
uye_id = Request.QueryString("uye_id")
Set cem = Server.CreateObject("ADODB.RecordSet")
sql = ("Select * from siparisler where onay=False and uye_id = "& session("uye_id") &" order by id desc")
cem.Open sql, cms, 1, 3
%>

<% do while not cem.eof %>
<%
resim = cem ("resim")
veriparcala = split(resim, ",")
For i = 0 to Ubound(veriparcala)
%>


<tr>
<td><img src="upload/<%=trim(veriparcala(i))%>" width="100" height="100">

</td>
<td class="center"><%=cem("baslik")%></td>
<td class="center"><%=cem("haber")%>
</td>


</tr>
<%
next
%>



<%
cem.movenext
loop
%>
<% end if %>
<%
cemgr.Close
Set cemgr = Nothing
cem.Close
Set cem = Nothing
%>


yukarıdaki örnekte resmi bölebildim ama ben haber ve baslığı da parçalayıp ekrana yazdırmak istiyorum.

Yardımcı olursanız çok sevinirim.


Bu mesaja 1 cevap geldi.
B
12 yıl
Er
Konu Sahibi

bir ID tanımlasan, resim url - başlık - haber stünları oluştursan IDye göre çok kolay bir şekilde listelersin.


Bu mesaja 1 cevap geldi.