Richtigkeit der Daten überprüfen, bevor absenden.

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von tolio.

    Richtigkeit der Daten überprüfen, bevor absenden.

    Tag Leute,

    ich bin mal wieder dabei ein Formular zu erstellen.
    Bei dem soll man dann seine Email eingeben oder evt die Handynummer, um dann später Kontakt aufnehmen zu können.

    Was ich nun gerne wissen wollte ist, kann man irgendwie überprüfen lassen, ob z.B die Email wirklich existiert und man nicht i-ein Quatsch eingegeben hat? Natürlich bevor das Formular gesendet wird.
    Selbige mit HandyNr. Würde mich gerne mal interessieren, danke.

    Liebe Grüße

    mox schrieb:

    wie soll das programm denn herauskriegen, ob die email oder handynr existiert bevor es etwas versendet?


    Das Absenden dient ja ausschließlich fürs senden des textes der Textbox 1, 2 etc.

    Und ich weiß nicht, ob das überhaupt möglich ist, deswegen die Frage. Geht ja um die If anweisung . If 'diese Email vorhanden then 'Absenden ... so habs ich mir vorgestellt

    RushDen schrieb:

    Bei E-Mail kannste das machen, implementierst du das SMTP Protokoll, versuchst eine Nachricht an die angegebene E-Mail zu schicken und schaust ob der Server Code 550 gibt (-> Falsche Mail)


    Das freut mich, dass das funktioniert. Gibt es dafür irgendwelche Tutotrials? Weiß nicht genau wie der code lauten soll.
    Du musst SMTP selber implementieren (also nicht die vorgefertigte SMTPClient klasse nutzen sondern selbst eine machen).
    Dazu baust du eine verbindung auf die jeweilige server auf (z.B. smtp.live.de etc.) und kommunizierst mit dem smtp protokoll (beispiel ist im 1. Link zu finden) mit dem server um die gewünschten daten zu erhalten
    Ist jetzt die Frage ob sich der Aufwand lohnt
    Und logischerweise gibt es ja nicht nur smtp.live.de sondern auch gmail gmx etc und weißdergeier ....
    Gute Frage ob sich der Aufwand lohnt:D dann ist wohl die einzige Lösung, dass ich diese Bedingungen für die Email setze:
    mindestens 7 Zeichen lang
    "@" muß einmal darin enthalten sein
    keine Sonderzeichen
    hinter dem @ muß mindestens ein "." vorkommen
    nach dem letzen "." folgen mindestens 2 und höchstens 3 weitere Zeichen

    Ich würde aber gerne HandyNr und Email als eine Textbox haben, wo man dann selber entscheidet, welches man wählt.
    Die Bedingungen würde ich hinkriegen, aber wenn ich dann die HandyNr eingebe enthält es ja auch kein @. Wie würde ich das machen?
    Ja man kann Überprüfen ob etwas richtig oder falsch ist und zwar in dem man vergleicht. Hättest du einen Code angegeben könnte ich dir ein Beispiel sagen. Aber jetzt mal ganz trocken man kann z.b. Textboxen vergleich mit:

    VB.NET-Quellcode

    1. If Textbox1.Text = Textbox2.Text Then
    2. 'dein Code
    3. End if

    Projekte

    Quellcoder02 schrieb:

    Ja man kann Überprüfen ob etwas richtig oder falsch ist und zwar in dem man vergleicht. Hättest du einen Code angegeben könnte ich dir ein Beispiel sagen. Aber jetzt mal ganz trocken man kann z.b. Textboxen vergleich mit:

    VB.NET-Quellcode

    1. If Textbox1.Text = Textbox2.Text Then
    2. 'dein Code
    3. End if



    Versteh nicht wirklich auf das bezogen sein soll :/

    Zu meinem Code

    VB.NET-Quellcode

    1. Imports System.Net.WebRequestMethods
    2. Imports System.Net.Mail
    3. Imports System.Net
    4. Public Class Form1
    5. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    6. End Sub
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. End Sub
    9. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    10. If TextBox1.Text = "" Then
    11. MessageBox.Show("Bitte Email angeben")
    12. Return
    13. End If
    14. If TextBox1.TextLength < 7 Then
    15. MessageBox.Show("Bitte Email angeben")
    16. Return
    17. End If
    18. If TextBox1.Text.Contains("@") Then
    19. 'nächste If abfrage
    20. Else
    21. MessageBox.Show("Bitte @ angeben")
    22. Return
    23. End If
    24. If TextBox1.Text.Contains("!") Then
    25. MessageBox.Show("Keine Sonderzeichen")
    26. Return
    27. End If
    28. If TextBox2.Text = "" Then
    29. MessageBox.Show("Bitte Feld 2 angeben")
    30. Return
    31. End If
    32. If TextBox2.TextLength < 6 Then
    33. MessageBox.Show(" Feld 2 zu kurz")
    34. Return
    35. End If
    36. Dim MyEmail As New MailMessage
    37. Try
    38. MyEmail.From = New MailAddress("MEINE EMAIL")
    39. MyEmail.To.Add("MEINE EMAIL")
    40. MyEmail.Subject = "Titel meiner Mail"
    41. MyEmail.Body = TextBox1.Text & vbLf & TextBox2.Text + vbLf
    42. 'SMTP Client
    43. Dim smtp As New SmtpClient("smtp.gmx.de")
    44. smtp.Port = 587
    45. smtp.EnableSsl = True
    46. smtp.Credentials = New System.Net.NetworkCredential("meine email", "mein pw")
    47. smtp.Send(MyEmail)
    48. MsgBox("mein endtext")
    49. Catch ex As Exception
    50. MsgBox("Error")
    51. End Try
    52. End Sub
    53. End Class



    Ich hab das jetzt mit Contains ("!") gemacht bezüglich der Sonderzeichen. Wie gebe ich mehrere Zeichen an ohne immer ein neues Textfeld mit Contains zu schreiben z.B mit OR ? OR funtkioniert nicht "," auch nicht. Mache da was falsch:D

    Und zu den anderen If Bedingungen wie mit nach dem "." müssen mindestens 2 max 3. chars sein da bin ich auch überfragt, sowie mit nach @ muss auch ein "." vorhanden sein.

    //Edit und natürlich werde ich die Nachricht in der MSGBOX natürlich am Ende ändern, da wird dann auch nicht stehen, "bitte @ angeben".
    Automat

    C#-Quellcode

    1. public enum AutomatenZustand
    2. {
    3. Fehler,
    4. Laufend,
    5. Ende
    6. }
    7. public class Automat
    8. {
    9. public Automat(Zustand allZustaende)
    10. {
    11. aktuellerZustand = allZustaende;
    12. startZustand = aktuellerZustand;
    13. _token = string.Empty;
    14. }
    15. private Zustand aktuellerZustand;
    16. private Zustand startZustand;
    17. public AutomatenZustand NaechsterZustand(char pChar)
    18. {
    19. Zustand lZustand = null;
    20. bool lFound = false;
    21. foreach (var item in aktuellerZustand.NaechsteZustaende)
    22. {
    23. foreach (var elem in item.Bedingungen)
    24. {
    25. if (pChar == elem)
    26. {
    27. _token += pChar;
    28. lZustand = item;
    29. lFound = true;
    30. break;
    31. }
    32. if (lFound)
    33. break;
    34. }
    35. if (lFound)
    36. break;
    37. }
    38. if (lZustand == null)
    39. {
    40. bool lEnde = aktuellerZustand.Ende;
    41. aktuellerZustand = startZustand;
    42. if (lEnde)
    43. return AutomatenZustand.Ende;
    44. else
    45. {
    46. _token += pChar;
    47. return AutomatenZustand.Fehler;
    48. }
    49. }
    50. else
    51. aktuellerZustand = lZustand;
    52. return AutomatenZustand.Laufend;
    53. }
    54. private string _token;
    55. public override string ToString()
    56. {
    57. string lInput = _token;
    58. _token = string.Empty;
    59. return lInput;
    60. }
    61. }
    62. public class Zustand
    63. {
    64. public Zustand(bool pEnde, char[] pItem, params Zustand[] pZustand)
    65. {
    66. this.NaechsteZustaende = pZustand.ToList();
    67. this.Ende = pEnde;
    68. this.Bedingungen = pItem;
    69. }
    70. public Zustand(bool pEnde, char[] pItem)
    71. {
    72. this.Ende = pEnde;
    73. this.Bedingungen = pItem;
    74. this.NaechsteZustaende = new List<Zustand>();
    75. }
    76. public char[] Bedingungen { get; private set; }
    77. public List<Zustand> NaechsteZustaende { get; set; }
    78. public bool Ende { get; private set; }
    79. }


    Verificator

    C#-Quellcode

    1. public static class Verificator
    2. {
    3. private static Automat _mail;
    4. private static Automat _handy;
    5. static Verificator()
    6. {
    7. // Email
    8. Zustand lZustand = new Zustand(false, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÄÜÖäüö_,+#?\\/".ToCharArray());
    9. lZustand.NaechsteZustaende.Add(lZustand);
    10. Zustand lAt = new Zustand(false, "@".ToCharArray());
    11. lZustand.NaechsteZustaende.Add(lAt);
    12. Zustand lHost = new Zustand(false, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray());
    13. lHost.NaechsteZustaende.Add(lHost);
    14. lAt.NaechsteZustaende.Add(lHost);
    15. Zustand lPoint = new Zustand(false, ".".ToCharArray());
    16. lHost.NaechsteZustaende.Add(lPoint);
    17. Zustand lLast = new Zustand(true, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray());
    18. lLast.NaechsteZustaende.Add(lLast);
    19. lPoint.NaechsteZustaende.Add(lLast);
    20. // Handy
    21. Zustand lNumber = new Zustand(false, "0".ToCharArray());
    22. Zustand lActual = lNumber;
    23. for (int i = 0; i < 11; i++)
    24. {
    25. lActual.NaechsteZustaende.Add(new Zustand(true, "0123456789".ToCharArray()));
    26. lActual = lActual.NaechsteZustaende[0];
    27. }
    28. _mail = new Automat(new Zustand(false, new char[] { }, lZustand));
    29. _handy = new Automat(new Zustand(false, new char[] { }, lNumber));
    30. }
    31. public static bool IsValidMail(string pMail)
    32. {
    33. return isValid(_mail, pMail);
    34. }
    35. public static bool IsValidNumber(string pNumber)
    36. {
    37. return isValid(_handy, pNumber);
    38. }
    39. private static bool isValid(Automat lAuto, string pInput)
    40. {
    41. for (int i = 0; i < pInput.Length; i++)
    42. {
    43. if (lAuto.NaechsterZustand(pInput[i]) == AutomatenZustand.Fehler)
    44. return false;
    45. }
    46. if (lAuto.NaechsterZustand(' ') == AutomatenZustand.Fehler)
    47. return false;
    48. return true;
    49. }
    50. }


    Aufruf

    C#-Quellcode

    1. bool lNumero = Verificator.IsValidNumber("01769185241");
    2. bool lMailo = Verificator.IsValidMail("abwq@li.ve.de");
    3. bool lMailoToo = Verificator.IsValidMail("9491miqo_we91@gmx.com");
    ^ es gibt doch keinen grund das rad neu zu erfinden, die warscheinlichkeit dabei einen fehler zu machen ist viel zu hoch. wenn du den eingabe text statisch prüfen willst dann nimm nen einfaches regex pattern.
    was mich bei der menge antworten in diesem thread stark iritiert ist das noch niemand vorgeschlagen hat einfach die mx records der angegeben domain zu prüfen, auch das ist natürlich kein absoluter schutz gegen falsche eingaben aber doch recht effektiv und vorallem generisch implementierbar.

    noch ein paar worte semi OT, bennene dein controls/klassen richtig, es gibt keinen grund das nicht zu tun. desweiteren hoffe ich das diese programm niemals deinen eigenen pc verlässt, schließlich stehen dort die zugangsdaten zu deinem mail account drin. Nein, 'das ist nur ein trash account' ist keine ausrede, denn wenn zb. jemand die daten hat kann er das pw ändern und schon ist komplette funktionalität nicht mehr gegeben und auch sonst ist missbrauch damit sofort tür und tor geöffnet. wenn du solche funktionen haben willst füge einen layer ein der zuverlässig vor missbrauch schützt.

    tolio schrieb:

    ^ es gibt doch keinen grund das rad neu zu erfinden, die warscheinlichkeit dabei einen fehler zu machen ist viel zu hoch. wenn du den eingabe text statisch prüfen willst dann nimm nen einfaches regex pattern.
    was mich bei der menge antworten in diesem thread stark iritiert ist das noch niemand vorgeschlagen hat einfach die mx records der angegeben domain zu prüfen, auch das ist natürlich kein absoluter schutz gegen falsche eingaben aber doch recht effektiv und vorallem generisch implementierbar.

    noch ein paar worte semi OT, bennene dein controls/klassen richtig, es gibt keinen grund das nicht zu tun. desweiteren hoffe ich das diese programm niemals deinen eigenen pc verlässt, schließlich stehen dort die zugangsdaten zu deinem mail account drin. Nein, 'das ist nur ein trash account' ist keine ausrede, denn wenn zb. jemand die daten hat kann er das pw ändern und schon ist komplette funktionalität nicht mehr gegeben und auch sonst ist missbrauch damit sofort tür und tor geöffnet. wenn du solche funktionen haben willst füge einen layer ein der zuverlässig vor missbrauch schützt.



    Erstmal vielen vielen Dank für eure Unterstützung:)

    Wie genau baue ich diesen Layer ein? Ist das kompliziert?
    Noch 2 kleine Fragen:

    Wenn ich das Formular mittels Enter absende löscht sich der Text in meiner Textbox2 immer, wo ich auch den Code drin habe, bei dem er mittels Enter den Code ausführen soll.
    Das Problem ist, ist Textbox 1 leer und 2 ausgefüllt und wird enter gedrückt, kommt natürlich ne Meldung, wo steht alle Felder berücksichtigen. Textbox2 wird wieder clear. Wird dann Textbox1 ausgefüllt und 2 diesmal nicht beachtet, führt er den Code trotzdem aus, wahrscheinlich, weil die Textbox 2 davor ausgefüllt war und durch die Enter Taste dies nur nicht mehr sichtbar ist?! Wie kann ich verhindern, dass der Text nach drücken der EnterTaste nicht gelöscht wird?

    2Frage: Wie kann ich einstellen, dass beim drücken der Enter Taste der Code ausgeführt wird, der beim Klicken des Buttons ausgeführt wird? So spar ich mir den Code 2mal hinzuklatschen. Und sorry ich bin nocht nicht soo erfahren:D Danke im Voraus!!
    dafür eignet sich zB jede serverseite sprache, denn dort hat ein nutzer keinen zugriff auf die internen mechanismen sondern kann nur die nach außen zugänglichen funktionen nutzen. diese müssen natürlich dann entsprechende sicherheitsmechanismen implementieren, zb max mails pro stunde, ips loggen, etc. . sonderlich kompliziert ist das nicht, ich würde sowas schnell in php basteln.