webForumDet fria alternativet

dubbel loop

14 svar · 437 visningar · startad av Gimbo

GimboMedlem sedan dec. 20001 630 inlägg
#1

hejsan...
Det är som så att jag har två tabeller, från den ena tabellen ska jag lista företagsnamnen och från den andra tabellen ska jag lista rabatterna som ska finnas i en textbox.
typ:

|checkbox| företagsnamn |2.9|
|checkbox| företagsnamn2 |rabatten i textbox|
|checkbox| företagsnamn3 |8.0|

just nu ser min kod ut så här, men problemet är att textboxen med rabatten hamnar över själva tabellen?? istället för att hamna under mellan <td> taggen

 call OpenDb()
    'Set RS = Server.CreateObject("ADODB.Recordset")
    
    sql = " SELECT * FROM productlines " 

	  Set rs = Conn.Execute(sql)
	

 if rs.eof then
 response.write "no discount"
 end if
 %>
<table cellpadding=2 cellspacing=2>
<tr>
<td bgcolor=#CCCCCC><font face=arial size=2><b>Apply Multiplier</b></font></td>
<td bgcolor=#CCCCCC><font face=arial size=2><b>Product Line</b></font></td>
<td bgcolor=#CCCCCC><font face=arial size=2><b>Discount</b></font></td>
</tr>
<%
do until rs.eof
'do until rs2.eof
%>
<tr>
<td><center><input type="checkbox" name="apply<%=rs("productLineID")%>" value="1"></center></td>
<td><%=rs("productLine")%></td>
<td>
<%
rs.moveNext
loop
conn.close
set conn = nothing
set rs = nothing

   call OpenDb()
   
    sql = " select * FROM privatediscount where " &_
          " userID = '" &Request.Querystring("userId")& "' "

		
	'response.write sql
	'response.end	
	Set rs = Conn.Execute(sql)
	'Set rs2 = Conn.Execute(sql2)

'if rs.eof then
'response.write "no discount found"
'end if
do until rs.eof
%>
<input type=text name="discount<%=rs("productLine")%>" size="4" value="<%=rs("discount")%>"><br></td>
</tr>
<%
rs.MoveNext
'rs2.MoveNext
'Loop
loop
conn.close
set conn = nothing
set rs = nothing
'set rs2 = nothing
%>
solbulleMedlem sedan mars 20014 998 inlägg
#2

Det ser ut som om du måste ha en join på dina tabeller och plocka ut alla data direkt för att sen loopa ut allt i ett svep.
Det förefaller som att productLine är den gemensamma nämnaren?

@ndersMedlem sedan juni 200026 914 inlägg
#3

Om du kikar på den resulterande HTML-koden kan jag slå mig i backen på att den inte är helt korrekt. Du verkar inte ha någon koll på öppnandet och stängandet av <td> och <tr> i din kod, så det är inte konstigt om det blir konstigt.

Även jag, liksom solbulle, föreslår att du joinar in rabatterna istället, och då blir det nog enklare att få koll på asp-koden också.

Och vad är userid i tabellen för rabatter? Är det inte ett id-nummer? Isåf, varför ligger i ett textfält i tabellen?

mvh

GimboMedlem sedan dec. 20001 630 inlägg
#4

Hur gör man för att joina dessa?? är det något man måste ställa in i enterprisen eller går det att fixa med sql-koden??

anders, helt riktigt, html koden ser inte ut som den ska, men jag tycker att den borde se ut som den ska ty jag vill ju få in loopen med rabatterna som ska finnas i textfälten mellan <td> och </td> vilket jag gör oxå, men när den loopar ut rabatterna så hamnar de över denna html kod:

<tr>
<td bgcolor=#CCCCCC><font face=arial size=2><b>Apply Multiplier</b></font></td>
<td bgcolor=#CCCCCC><font face=arial size=2><b>Product Line</b></font></td>
<td bgcolor=#CCCCCC><font face=arial size=2><b>Discount</b></font></td>
</tr>
GimboMedlem sedan dec. 20001 630 inlägg
#5

någon?? hur fixar man den här join grejen??

@ndersMedlem sedan juni 200026 914 inlägg
#6

Berätta hur tabellerna ser ut, och vilka gemensamma nämnare där finns, dvs vilket fält som det ska joinas på.

GimboMedlem sedan dec. 20001 630 inlägg
#7

productlines[productlineID, productLine, productgroup, id]
privatediscount[userID, productLine, discount]

dessa är de två tabellerna, vad menar du med det fält som ska joinas?? vad gör denna join grejs??

@ndersMedlem sedan juni 200026 914 inlägg
#8

När man gör en join binder man ihop två tabeller på ett fält i varje tabell, som är gemensamt. Pseudokod:

Hämta allt från tabellerna productlines och privatediscount där tabellerna hänger ihop på fältet productLine, och användarid i tabellen privatediscount är 4.

Så här kan en sådan fråga se ut:

SELECT productLines.*, privateDiscount.* FROM productLines OUTER JOIN privateDiscount on productLines.productLine = privateDiscount.productLine AND privateDiscount.userID = 4

Ställ den frågan direkt i Access (som jag antar att det är du använder) och se om du får något vettigt där. I så fall är det bara att börja bygga om koden. ;)

GimboMedlem sedan dec. 20001 630 inlägg
#9

får felmeddelandet incorrect syntax near OUTER

@ndersMedlem sedan juni 200026 914 inlägg
#10

Prova slänga in LEFT framför.

GimboMedlem sedan dec. 20001 630 inlägg
#11

ok fick det att funka tack så mycke ANDERS!
har en fråga till, har checkboxar i loopen som du ser:
<input type="checkbox" name="apply<%=rs("productLineID")%>" value="1">

checkboxarna får ju olika namn beroende på productlineID, så får de en siffra bredvid apply, det jag undrar är hur gör jag för att programmet ska känna av om det är förbockat eller inte, jag kör en update, och i databasen sätts den till en 1:a om den är bockad och 0:a om den inte är det...

men hur ska jag kalla på just den raden va request.form??
dvs:

SQL = " UPDATE privatediscount SET " &_
" apply = '"&Request.Form("apply")&"'," &_
....

jag vet ju inte vad checkboxen har för namn?? förstår du vad jag menar??

@ndersMedlem sedan juni 200026 914 inlägg
#12

Om du istället för att ge varje checkbox ett unikt namn, gör så här:

* kalla alla checkboxar för samma sak.
* ge checkboxarna tillhörande id-nummer som value

sedan:

* kör en update-sats som uppdaterar alla till 0 i databasen
* kör en update som ser ut liknande denna:

UPDATE privateDiscount SET apply = 1 WHERE productLineID IN (" & Request.Form("checkboxnamnet") & ")

När flera har samma namn kommer det att resultera i en kommaseparerad lista över alla markerade id:n, och update kommer att göras på alla poster med något av dessa id:n.

Men: om fältet apply ska lagra en etta eller en nolla, varför är det då ett textfält i tabellen? (Du har apostrofer runt värdet)? Du borde använda tal eller typen Ja/Nej (eller vad den heter i access). Taltyp är enklast om du inte vill skriva om dina frågor.

Mvh

GimboMedlem sedan dec. 20001 630 inlägg
#13

glömde nämna att det måste va ett where statement oxå där jag kollar om det är en viss id?? hur gör jag om det är två kolumner som skall uppdateras på samma sätt? jag har ju en där de ska fylla i sin rabatt oxå?

GimboMedlem sedan dec. 20001 630 inlägg
#14

@nders eller någon annan, det är ju så att om man vill bocka av så skall det sättas till 0 i databasen och om man bockar i checkboxen så skall den sättas till 1 i databasen, la till ett OR men fick syntax fel:

SQL = " UPDATE privateDiscount SET apply = 1 OR apply = 0 WHERE productLine " &_
      " IN ('" & Request.Form("apply") & "') AND userID = '" &Request.Form("userId")& "' "

hur ska man göra för att lösa detta?

@ndersMedlem sedan juni 200026 914 inlägg
#15

Gimbo skrev:

@nders eller någon annan, det är ju så att om man vill bocka av så skall det sättas till 0 i databasen och om man bockar i checkboxen så skall den sättas till 1 i databasen

...

hur ska man göra för att lösa detta?

Läs mitt senaste inlägg igen?

Genererad på 362 ms · cache AV · v20260730165559-full.f96bc7eb