webForumDet fria alternativet

Dessa checkboxar...

15 svar · 497 visningar · startad av Obbelix

ObbelixMedlem sedan okt. 2002257 inlägg
#1

Hej,

Har en sida där alla nyheter som är skapade visas. Nu är tanken att man med en checkbox framför varje nyhet ska kunna styra vilka nyheter som ska visas på förstasidan.

Jag har lagt till en checkbox vid varje nyhet och gett dom samma namn men olika värden (nyhetsid:t).
När jag sen submittar till denna kod:

SQL = "UPDATE News SET frontpage = true WHERE id IN (" & Request.Form("cb") & ")"
adocon.execute(SQL)

Då uppdaterar den som jag vill, men om jag sedan klickar ur en checkbox, som varit ikryssad, så förblir den ikryssad.

Vad gör jag fel?

Använder Access-databas.

//Peter

JymdisMedlem sedan mars 20016 260 inlägg
#2

Du tänker fel.

Sql satsen sätter ju bara true, hur kan då nånting som redan är true bli false?

Det du, när jag snabbt tittar på din kod, är att rensa hela databasen först:

delete * from tabell

eller truncate fungerar också...

I vilket fall som helst, då rensar du alla entries och ersätter med dom du anger igen. Detta fungerar bara om du har alla checkboxarna på samma sida så att säga.

ObbelixMedlem sedan okt. 2002257 inlägg
#3

Det har du ju förstås rätt i... tänkte inte så långt.

Jag hade tänkt mig att ha paging så att nollställa alla värden innan update kommer inte att fungera i längden.

Kan man skicka in en if-sats i sql-frågan eller måste man göra på nåt annat sätt?

JymdisMedlem sedan mars 20016 260 inlägg
#4

En if-sats hade nog kunnat lösa det, dock inte i sql frågan...

if request.form("cb") = checked then strVarde = "true" else strVarde = "false"
SQL = "UPDATE News SET frontpage = " & strVarde & " WHERE id IN (" & Request.Form("cb") & ")"
adocon.execute(SQL)

psuedokodat men du förstår väl antagligen :)

ObbelixMedlem sedan okt. 2002257 inlägg
#5

Nope, funkar inte.

Kryssar man i en ruta så blir den inte ikryssad, och alla som var ikryssade blir okryssade... Den nollställer alla som det verkar.

Jesper TMedlem sedan nov. 20017 144 inlägg
#6

Bifoga lite kod kanske...?

Jesper TMedlem sedan nov. 20017 144 inlägg
#7

/r

ObbelixMedlem sedan okt. 2002257 inlägg
#8

Jag loopar ut nyheterna så här:

en massa html inkl <form action="update_frontpage_items.asp" method="post"> 
<%
SQL = "SELECT * FROM News ORDER BY datum DESC"
Set rs = adocon.execute(SQL)

if rs.EOF then
 response.Write("<tr><td align=""left"">Inga nyheter inlagda</td></tr>")
 else
  DO WHILE NOT rs.EOF %>
 <tr class="tablerow">
  <td class="bread">
  <a href="newsdetail.asp?id=<%=rs("id")%>"><%=rs("rubrik")%></a>
  </td>
  <td class="bread" >
  <input type="checkbox" name="cb" value="<%=rs("id")%>" <%if rs("frontpage") = true then response.Write("checked") end if%>>
  </td>
  <td class="bread">
  <%=rs("datum")%>
  </td>
 </tr>
<%
rs.movenext
loop
%>
en del html till samt <input type="submit" value="uppdatera">

Men sen på sidan "update_frontpage_items.asp" är frågan hur jag gör.
Att få in "true" i databasen om man kryssar i en ruta funkar ju med koden jag postade först, men jag vill även att om man kryssar ur en ruta så sätts värdet till false på just den posten.

Det skulle gå att göra som "Jymdis" skrev att nollställa alla poster i kolumnen "frontpage" i db:n, men eftersom jag troligtvis vill lägga till paging så blir det i så fall fel.

Jesper TMedlem sedan nov. 20017 144 inlägg
#9

Detta funkar nog inte:
if rs("frontpage") = true ...
Skall kanske vara
if cBool(rs("frontpage")) = true ...

ObbelixMedlem sedan okt. 2002257 inlägg
#10

Detta är inget problem, för om jag går in i databasen och kryssar i rutan manuell så skrivs det ut rätt.

Fältet "frontpage" i databasen är av typen true/false

Jesper TMedlem sedan nov. 20017 144 inlägg
#11

Gör en vanlig "For each" kanske.

ObbelixMedlem sedan okt. 2002257 inlägg
#12

Har testar lite med det men är inte så hemma på området.
Kan du visa ett exempel?

Jesper TMedlem sedan nov. 20017 144 inlägg
#13

Har du fler formulärelement än checkboxar på varje nyhet?

ObbelixMedlem sedan okt. 2002257 inlägg
#14

nej, det har jag inte. Men jag kan ju lägga till hidden fält på varje om det underlättar.

ObbelixMedlem sedan okt. 2002257 inlägg
#15

Löste det på följande sätt:

Lade till ett hiddenfält ("id1") på "första" sidan, en för varje checkbox, gav det ID-värdet som respektive nyhet har, sen kör jag denna kod på sidan som tar emot.
Döpte även om checkboxarna till "cb" + id:t för nyheten.

for each x in request.Form("id1")
 if request.form("cb" & x) <> "" then
  check1 = "true"
 else
  check1 = "false"
 end if
 SQL = "UPDATE News SET forstasidan = " & check1 & " WHERE id =" & x
 adocon.execute(SQL)
next

Går säkert att lösa detta på nåt smartare sätt, men detta funkar i alla fall.

Jesper TMedlem sedan nov. 20017 144 inlägg
#16

Det var något liknande jag tänkte på, dock skulle jag gjort:

for each x in request.Form("id1")
 if request.form("cb" & x) <> "" then check1 = "true" else check1 = "false"

 SQL = "UPDATE News SET forstasidan = " & check1 & " WHERE id =" & x
 adocon.execute(SQL),,128
next
134 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)