webForumDet fria alternativet

Tips för att göra uppdatering

ASP

10 svar · 330 visningar · startad av zlakker

Medlem sedan apr. 2001227 inlägg
Frågan#1

Jag är i behov av hjälp för att uppdatera användare.

Jag har en databas med användare. De presenteras i en lång lista. Just nu så listas bara alla användare rakt av.

Jag skulle vilja ha en knapp bredvid varje namn som heter tex "uppdatera". Klickar man på den ska man komma vidare till en sida som presenterar fält med just den användares info som man klickade på. Användarna själva ska inte kunna uppdatera något. Allt görs av en Admin som har tillgång till allt.

Kan någon ge lite tips på hur man ska tänka och vad man kan söka mer hjälp på?

Tack

Själva listningen ser ut såhär:


<% Visa = "SELECT * FROM tblUser"
		   RecSet.Open Visa, Connect, 3, 3 %>

<%	Do While Not RecSet.EOF %>
		
<tr>
<td><font size="1" face="verdana, arial"><% =RecSet("Name") %></font></td>
<td><font size="1" face="verdana, arial"><% =RecSet("Username") %></font></td>
<td><font size="1" face="verdana, arial"><% =RecSet("Password") %></font></td>
<td><font size="1" face="verdana, arial"><a href="mailto:<% =RecSet("Mail") %>"><% =RecSet("Mail") %></a></font></td>
<td align="center"><font size="1" face="verdana, arial"><% =RecSet("Access") %></font></td>
</tr>
			
<%	RecSet.MoveNext
			Loop %>
Medlem sedan mars 20033 686 inlägg
#2

När du loggar in får du skapa en session som anger att du är admin. Exempelvis kan du ha ett fält i databasen som heter admin och har värdet 0 för alla utom dig, du har 1. När du loggar in sätter den värdet från databasen i sessionen och sedan kollar du om sessionen har värdet 1 när du ska visa uppdatera-länken.

<%
   If Session("admin") = "1" Then
%>
<a href="admin_update.asp?user=<%=rs("user_id")%>">Uppdatera profil</a>
<%
   End If
%>

Sen får du köra en UPDATE-fråga i din SQL-sats på admin_update.asp, och självklart kolla om sessionen admin har värdet 1. :)

REDIGERING

<% Visa = "SELECT * FROM tblUser"
		   RecSet.Open Visa, Connect, 3, 3 %>

<%	Do While Not RecSet.EOF %>
		
<tr>
<td><font size="1" face="verdana, arial"><% =RecSet("Name") %></font></td>
<td><font size="1" face="verdana, arial"><% =RecSet("Username") %></font></td>
<td><font size="1" face="verdana, arial"><% =RecSet("Password") %></font></td>
<td><font size="1" face="verdana, arial"><a href="mailto:<% =RecSet("Mail") %>"><% =RecSet("Mail") %></a></font></td>
<td align="center"><font size="1" face="verdana, arial"><% =RecSet("Access") %></font></td>

[b]<%
   If Session("admin") = "1" Then
%>
<a href="admin_update.asp?username=<% RecSet("Username") %>">Uppdatera</a>
<%
   End If
%>
[/b]
</tr>
			
<%	RecSet.MoveNext
			Loop %>
Medlem sedan apr. 2001227 inlägg
#3

Tack det fungerar skitbra.
Nu ska jag bara hämta den uppgiften på efterföljande sida och använda den för att hämta rätt uppgifter?

Kan man göra såhär?

<a href="sidan.asp?userid=<% =RecSet("Username") %>">update</a>

<% If Request.QueryString("userid") = "Username" Then %>

Jag kanske inte behöver köra en ifsats på den men kan man hämta "hem" själva länken på det sättet?

Hur gör jag sedan för att hämta in uppgifterna till ett formulär?

Tex om man har ett formulär som heter password där man vill att lösenordet ska vara ifyllt och som man sedan kan ändra.

När jag har skapat användare har jag använt följande för att skapa i database.


<% Visa = "SELECT * FROM tblUser"
		   RecSet.Open Visa, Connect, 3, 3
		
RecSet.AddNew
RecSet("Name") = Request.Form("name")
RecSet("Username") = Request.Form("username")
RecSet("Password") = Request.Form("password")
RecSet("Mail") = Request.Form("mail")
RecSet("Access") = Request.Form("access")
RecSet.Update %>

		
<%	RecSet.Close
End If %>

Går det använda samma här?

Medlem sedan mars 20033 686 inlägg
#4

Exempel på admin_update:

Visa = "SELECT * FROM tblUser WHERE Username = '" & Request.Querystring("username") & "'

'Resten av koden som exekverar SQL-frågan och skapar recordset

Nu har vi hämtat all data i databasen där username är lika med det vi skickade med i querystringen.

Om du vill ha det ifyllt i fälten är det bara att loopa ut det i input-rutornas value:

<input type="password" value="<%=rs("password")%>">

När du ska uppdatera ska SQL-frågan se ut såhär ungefär:

SQL = "UPDATE tblUser SET password = '" & Request.Form("password") & "' WHERE username = '" & Request.Querystring("username") % "'"

Otestad kod, så får du ju göra så det stämmer överens med dina tabellnamn och så :)

Medlem sedan apr. 2001227 inlägg
#5

Tusen tusen tack kompis!

Ska pilla lite och se om det fungerar.

:birp

Medlem sedan apr. 2001227 inlägg
#6

Nu har jag kommit en bra bit, men tyvärr inte hela vägen.
Det är bara det sista kvar, dvs att uppdatera från fälten.

Nu ser min kod ut som en jäkla soppa..när jag trycker på min formulärknapp kommer man till denna del. Det enda som händer då är att texten skrivs ut men användarnamnen osv är fortfarande samma som inna. Alltså inget felmeddelade.


<%	ElseIf Request.QueryString("alt") = "update" Then %>
		
<b>Användaruppgifter uppdaterade</b><p>
		
<% Visa = "SELECT * FROM tblUser"
 RecSet.Open Visa, Connect, 3, 3 %>
<% strUser=Request.Form("username") %>
<% Visa = "UPDATE tblUser SET password = '" & Request.Form("password") & "' WHERE name='" & strUser & "'" %>

		
					
<%	RecSet.Close
			End If %>
Medlem sedan mars 20033 686 inlägg
#7

Du får ju ange att de andra fälten också skall uppdateras. :)

SQL = "UPDATE tblUsers SET username = '" & request.form("username") & "', password = '" & request.form("password & "' WHERE username = " & request.querystring("username") & ""

Osv. osv. Du förstår principen. :)

Medlem sedan apr. 2001227 inlägg
#8

När man skriver SQL i början..måste man ha en sql databas eller kan det vara access? Måste man skriva in SQL någon annan stans för att det ska fungera och jag förstår inte riktigt vad man måste skriva innan för att det ska fungera..dum som man är :)

Jag får dett felmeddelande:

ADODB.Recordset error '800a0e78'

Operation is not allowed when the object is closed.

/soderhamn/admin_user.asp, line 214

Medlem sedan mars 20033 686 inlägg
#9

Nope. SQL kan lika gärna ersättas med fisk :)

Du måste ju exekvera SQL-strängen, då döper man den till nåt, om jag inte fått det helt om bakfoten. :)

fiskSQL = "SQL-fråga"
Set rs = Conn.Execute(SQL)

Du förstår.

Får jag se på hela koden.

Medlem sedan apr. 2001227 inlägg
#10

<%	If Request.QueryString("alt") = "edit" Then %>
		
<% Visa = "SELECT * FROM tblUser WHERE username = '" & Request.Querystring("userid") & "'"
RecSet.Open Visa, Connect, 3, 3 %>
			
<font size="1" face="verdana, arial">
		
<b>Redigera användare</b><p>
			
<form method="POST" action="admin_user.asp?alt=update">
		
<b>Namn</b><br>
<input type="text" size="30" value="<%=RecSet("name")%>" name="name" style="font-size: 8pt; font-family: verdana, arial"><p>
			
<b>Användarnamn</b><br>
<input type="text" size="30" value="<%=RecSet("username")%>" name="username" style="font-size: 8pt; font-family: verdana, arial"><p>
		
<b>Lösenord</b><br>
<input type="text" size="30" value="<%=RecSet("password")%>" name="password" style="font-size: 8pt; font-family: verdana, arial"><p>
			
<input type="submit" value="Uppdatera" style="font-size: 8pt; font-family: verdana, arial">
		
</form>
			
<%	RecSet.Close
			%>
			
</font>
							
<%	ElseIf Request.QueryString("alt") = "update" Then %>
		
HÄR SKA UPDATEKODEN LIGGA
		
<%	
End If %>
Medlem sedan mars 20033 686 inlägg
#11

Prova att ta bort RecSet.Close.

384 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
122 ms — hämta statistik (db)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)