Avatar billede Slettet bruger
28. juli 2004 - 11:17 Der er 12 kommentarer og
1 løsning

Forhindre at tomme felter i <form> bliver til en tom række i DB

Hejsa.

Jeg har en formular på min webside, som gemmer indtastede data i en Access-database. Og alting virker fint.

MEN:
Hvis man IKKE indtaster noget i felterne, og klikker på "Send"-knappen, oprettes en tom række i databasen. Og det skal der jo ikke.

Ligger fejlen her?
Jeg har også et skjult felt, som altid aflæser tiden:
<input type="hidden" name="tid" id ="tid" value="<%=Now%>">
Derfor vil databasen også opfange disse data.
Men det skal den jo IKKE, når der ikke er indtastet noget i de andre indtastningsfelter, vel? Det er dér problemet ligger, tror jeg! *suk*


Hvordan forhindrer jeg det?
Avatar billede brokov Nybegynder
28. juli 2004 - 11:25 #1
Du kunne jo lave et tjek på felterne i formularen om de er tomme. Og hvis der står noget udfører du din indsæt i databasen og ellers laver du en alert der beder om at felterne udfyldes f.eks.
Avatar billede dr_chaos Nybegynder
28. juli 2004 - 11:26 #2
her er javascript metoder til at forhindre at sende en tom række ind i databasen.
http://html.dk/scripts/javascript/

det er punkterne om validering du skal benytte.
Avatar billede Slettet bruger
28. juli 2004 - 11:33 #3
Ja, men jeres forslag går ud på, at man SKAL indtaste et eller andet i felterne. Ellers popper der en JavaScript-allertbox op, om at man skal indtaste noget i felterne, før data bliver sendt til databasen, ikke også?

Denne løsning har jeg også tænkt på tidligere, men hør her: Jeg har 2 formularer på samme webside, hvorfor JavaScript-allertbox-løsningen ikke kan bruges.

Der skal en anden løsning til.
Avatar billede dr_chaos Nybegynder
28. juli 2004 - 11:45 #4
så skal du når du laver din request.string eller request.form kontrollere om der er tomme værdier.
if felt = "" then
fejl
osv
Avatar billede brokov Nybegynder
28. juli 2004 - 11:46 #5
Du behøver jo ikke lave det med javascript, det kan laves helt i asp.
Jeg ville lave noget i stil med:
If feltnavn = "" Then
  //do nothing
Else
  //Din sql med INSERT eller UPDATE her
End if
Avatar billede Slettet bruger
28. juli 2004 - 12:10 #6
Ok, en if/else. Ja, det kan jeg overordnet godt se. Det lyder som det helt rigtige! :-)

Men... jeg er altså helt nybegynder på dette felt... Så hvorhenne skal jeg indsætte den if/else? Og hvordan skal den skrives korrekt, så den virker?

Her er mine koder:

<%
' Dansk datoformat :
Session.LCID = 1030

' Databaseforbindelse + sti til databasen :
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("test.mdb")
Conn.Open DSN

' SQL forespørgsel :
strSQL = "Select * from kommentar order by id desc"

' Udfør forespørgsel (rs indeholder nu resultatet) :
Set rs = Conn.Execute(strSQL)

' Gennemløb Recordset (rs) med en løkke :
Do
%>


<table cellpadding="0px" cellspacing="0px" border="0px" style="width: 640px" style="overflow-x: hidden">
    <tr>
        <td style="width: 640px" style="overflow-x: hidden">

<div class="post">

<div class="overskrift">
   
<table cellpadding="4px" cellspacing="0px" border="0px" style="width: 640px">
    <tr>
        <td style="width: 50%; text-align: left">Navn:&nbsp;&nbsp;&nbsp;<%Response.Write rs("navn")%></td>
        <td style="width: 50%; text-align: left">Dato & tid:&nbsp;&nbsp;&nbsp;<%Response.Write rs("tid")%></td>
    </tr>
</table>

</div>

<div class="besked">
<table cellpadding="8px" cellspacing="0px" border="0px" style="width: 640px">
    <tr>
        <td style="width: 640px; text-align: left">
        <%=replace(rs("besked"),vbCrLf,"<br>")%>
        </td>
    </tr>
</table>
</div>

</div>

        </td>
    </tr>
</table>

<%
' Gå til næste Record i rs :
rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File) :
Loop While Not rs.EOF

' Luk databaseforbindelsen :
Conn.Close
Set Conn = Nothing
%>
Avatar billede brokov Nybegynder
28. juli 2004 - 20:14 #7
Det kan godt være jeg er blind, men jeg kan altså ikke se den del af koden hvor du indsætter i databasen eller din form.?.
Det er i den del der skal en if/else ind.
Avatar billede webbe Nybegynder
30. juli 2004 - 10:51 #8
Jeg ville lave en validering inden din form bliver submittet, ved hjælp af javasript.

Som fx. dette:

<script language="javascript">
<!--
function checkFormContact( frm ){
   
    var navn = frm.navn.value; //txt-felt
    var mail = frm.mail.value; //txt-felt til e-mail validering
    var emne = frm.emne.value; //txt-felt
    var txt = frm.txt.value; //txt-felt
   
    var err = "";
   
        //txt-felt validering
    (navn.length == 0 )?err+="* Husk at skrive dit navn!\n":void(null);
    //e-mail validering
    (mail.indexOf("@") < 0 )?err+="* E-mail adressen mangler eller er ugyldig!\n":void(null);
    //txt-felt validering
    (emne.length == 0 )?err+="* Husk at skrive et emne!\n":void(null);
    //txt-felt validering
    (txt.length == 0 )?err+="* Du kan ikke sende en tom besked!\n":void(null);
   
    if( err.length > 0 ){
        alert( err );
            return false;
    }
    return true;
    }
    -->
</script>

Min form ser derfor således ud:

<form method="post" action="contact.asp" name="form2" onSubmit="return checkFormContact(form2);">
                Her kan du kontakte skolen med spørgsmål og andet.<br>
                Udfyld alle felterne herunder og klik på send. <br>
                <br>
                Dit navn:<br>
                <input type="text" name="navn" class="box">
                <br>
                Din e-mail:<br>
                <input type="text" name="mail" class="boxl">
                <br>
                Emne:<br>
                <input type="text" name="emne" class="boxl">
                <br>
                Besked:<br>
                <textarea name="txt" class="textboxc"></textarea>
                <br>
                <input type="submit" name="ok" class="knap" value="Send besked">
              </form>
Avatar billede webbe Nybegynder
30. juli 2004 - 10:51 #9
Håber du kan se sammenhængen mellem scriptet og formen.
Avatar billede wraber Praktikant
11. oktober 2004 - 10:58 #10
Hej ... må jeg stille et tillægsspørgsmål! skal nok oprette points... Hvad hvis man skal validere at det intastede er  en dato???

wraber
Avatar billede Slettet bruger
17. november 2004 - 16:11 #11
Hejsa igen, eagleeye.

Jeps, efter lidt tumult med en ny ADSL-forbindelse er jeg online igen!

wraber & webbe:
Hvis I har tid, lyst og mulighed for det, må I meget gerne lægge et eller andet som et svar, så jeg kan tildele jer points for jeres tid og svar.

Igen: Tak for hjælpen!
Avatar billede Slettet bruger
17. november 2004 - 16:12 #12
Venligst se bort fra den første linie: "Hejsa igen, eagleeye".
Bare en copy and paste-fejl.  :-)
Avatar billede Slettet bruger
31. december 2004 - 00:26 #13
Nå, men jeg bliver nødt til at afslutte spørgsmålet nu, så jeg må tildele points den eneste person som har lagt et svar.

Men wraber og/eller webbe skulle komme forbi, så læg lige et svar, så jeg kan tildele jer points, på den ene eller anden måde.

Tak til jer alle for jeres indsats!!!  :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester