Du bist nicht angemeldet.

T1g0r

Registrierter Benutzer

  • »T1g0r« ist der Autor dieses Themas

Beiträge: 1 226

Dabei seit: 31. Januar 2007

Hilfreich-Bewertungen: 7

  • Private Nachricht senden

1

Dienstag, 10. November 2009, 23:01

Verbindung zu einer MySQL-Datenbank via PHP-Skript

Hallo,

ich habe mich heute mal dran gesetzt ein Tutorial zuerstellen, mit dessen Hilfe man via PHP-Skript auf eine MySQL-Datenbank zugreifen kann.
Hierzu sind Grundkenntnisse in der Programmierung von PHP und VB.Net von Vorteil.

Dieses Tutorial erklärt Schritt für Schritt den Aufbau des Codes und worauf zu achten ist.

Vorausgesetzt ist eine Datenbank (Spalten können unten entnommen werden)
Zuerst benötigen wir eine weitere Datei:

[Beta]HttpPostRequest (Danke an Dodo)

Nun erstellen wir eine Form. Auf dieser müssen folgende Elemente vorhanden sein:
txtName
txtNachname
txtAnrede
txtStraße
txtNr
cmdSelect
cmdInsert
lsvHaupt

Zuerst müssen wir eine Klasse erstellen, mit der wir den Zugriff auf die Datenbank regeln.
Diese nennen wir cls_Datenbankzugriff.

In dieser setzen wir zu Beginn die Imports:

Visual Basic Quellcode

1
Imports HttpPostRequestLib.Net

Danach die eigentliche Funktion:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Class cls_Datenbankzugriff

''' <summary>
''' Verbindet zu einer MySQL-Datenbank und gibt die angeforderten Daten zurück.
''' </summary>
''' <param name="vPostCollection">Erforderlich. Die Parameter welche an das PHP-Script geschickt werden.</param>
''' <param name="File">Erforderlich. Die Datei auf welcher der Befehl ausgeführt werden soll.</param>
''' <param name="Fehlerausgabe">Optional. Gibt an, ob die Fehlerausgabe Aktiviert ist.</param>
''' <returns>Gibt den Rückgabewert des PHP-Scripts zurück.</returns>
''' <remarks></remarks>
Public Function Zugriff(ByVal vPostCollection As PostCollection, ByVal File As String, Optional ByVal Fehlerausgabe As Boolean = True)
    Try
        Dim myrequest As New HTTPPostRequest
        Dim Ergebnis As String = myrequest.Create(IO.Path.Combine("http://www.DeineSeite.de/DeinProgramm", File), vPostCollection)

        Return Ergebnis
    Catch ex As Exception
        If Fehlerausgabe = True Then 'Wenn Fehlerausgabe aktiv, den Fehler Ausgeben
            MessageBox.Show("Folgender Fehler ist aufgetreten: " & vbNewLine & ex.Message, "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
        Return "Verbindungsfehler"
    End Try
End Function
End Class

Im Parameter vPostCollection wird die PostCollection angegeben, welche die Daten enthält, die wird zur Datenbank schicken möchten. Dazu später mehr.
Der Parameter File gibt die Datei an, in welcher die SQL-Abfrage auf dem Server stattfindet.
Der letze Parameter Fehlerausgabe wird genutzt um die Fehlerausgabe zu aktivieren.

In dieser Klasse muss auch der Link zu dem Ordner angegeben werden, in welchem das PHP-Skript liegt (In diesem Fall "http://www.DeineSeite.de/DeinProgramm").

Als nächstes müssen wir eine Liste erstellen, in der die Rückgabewert geschrieben werden:
Die machen wir in einer Klasse:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'Die Klasse cls_ExtentedList:
Public Class cls_ExtentedList

'Die einzelnen Daten-Spalten
Public ID As Integer
Public Name As String
Public Nachname As String
Public Anrede As String
Public Straße As String
Public Nr As Integer

''' <summary>
''' Gibt die angegebenen Daten zurück, um diese in die Liste einzufügen
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Overrides Function ToString() As String
    Return ID & " - " & Name & " - " & Nachname & " - " & Anrede & " - " & Straße & " - " & Nr
End Function

End Class


Nun muss auf der Form eine Liste erzeugt werden, welche auf die obrige Klasse zugreift:

Visual Basic Quellcode

1
Public vListe As New List(Of cls_ExtentedList) 'Liste mit den Daten aus der Datenbank


Der nächste Schritt besteht darin, den Aufruf zur Datenbank zu starten. Hierzu gehen wir in unsere Form und in das cmdSelect_Click-Event.
Hier muss die Verbindung zur Klasse cls_Datenbankzugriff hergestellt werden:

Visual Basic Quellcode

1
2
3
4
'Select ausführen
'Verbindung definieren
Dim Verbindung As cls_Datenbankzugriff
Verbindung = New cls_Datenbankzugriff

Danach muss die PostCollection definiert werden.
In dieser werden die Übergabeparameter zum PHP-Skript übergeben:

Visual Basic Quellcode

1
2
3
    Dim myCollection As New PostCollection
'Parameter für das PHP-Script
myCollection.Add("SQLQuery", "select_all")

Den genauen Ablauf sieht man im Skript.
Nun kann die Verbindung zur Datenbank aufgebaut werden:

Visual Basic Quellcode

1
2
'Verbindung aufbauen und Daten holen/übergeben
Dim Rückgabewert As String = Verbindung.Zugriff(myCollection, "Abfrage.php", False)


Logischerweise benötigen wird hierzu auch das PHP-Skript:
Dazu benötigen wir 3 Dateien.
Abfrage.php - Hier werden die eigentlichen SQL-Befehle ausgeführt
Connection_inc.php - Hier werden die Verbindungsdaten zur Datenbank gespeichert
Function_inc.php

Zur Connection_inc.php:

PHP-Quelltext

1
2
3
4
5
6
<?php
header('content-type: text/html; charset=utf-8');
//Datenbankdaten angeben
mysql_connect("Host","Benutzer""Passwort"); //Zugangsdaten angeben (Host, Benutzer, Passwort)
mysql_select_db("Datenbank"); // Datenbank angeben
?>


Zur Function_inc.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
//Funktion zum Abfragen ob ein Fehler aufgetreten ist
function dbAbfrage($abfrage)
{
 $ergebnis mysql_query($abfrage);
  
 if(!$ergebnis//Ist ein Fehler aufgetreten?
 {
  echo mysql_error(); //Den Fehler ausgeben
 }
 
 return $ergebnis;
}
?>


Zur Abfrage.php:
Zuerst werden die beiden oben genannten Dateien importiert.
Danach wird via Switch der Parameter "SQLQuery" abgefragt.
Jenachdem welchen Wert dieser Parameter hat, wird ein anderer Befehl ausgeführt. (Hier Select und Insert)
Hier hat der Parameter "SQLQuery" den Wert "select_all"

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
//ini_set("display_errors", false);

include("Connection_inc.php");

include("Function_inc.php");

//SQL-Abfrage wählen
switch ($_POST['SQLQuery'])
{
case "select_all"//Alle Einträge holen
$abfrage "SELECT * FROM Tabelle";
  
$ergebnis dbAbfrage($abfrage);

if($ergebnis == FALSE//Ist ein Fehler aufgetreten?
{
echo mysql_error(); //Den Fehler ausgeben
}
elseif (is_resource($ergebnis)) //SQL-Befehl ist SELECT...
{
if (mysql_num_rows($ergebnis) == 0)
{
echo "Keine passenden Einträge vorhanden."//Wenn keine Zeile vorhanden, 0 zurückgeben
}
else
{
while($row mysql_fetch_assoc($ergebnis)) //Jede Reihe durchlaufen
{
echo (implode("ΛΜΝ"$row)) . "ΡΣΤ"//hier wird das Array $row implodiert mit , als seperator - ΡΣΤ wird zur Zeilentrennung, ΛΜΝ wird zur Spaltentrennung genutzt
}
}
}
break;

case "insert"//Einträge eintragen
$abfrage "INSERT INTO Tabelle (name, nachname, anrede, strasse, nr)
 VALUES
 ('" mysql_real_escape_string($_POST['name']) . "',
 '" mysql_real_escape_string($_POST['nachname']) . "',
 '" mysql_real_escape_string($_POST['anrede']) . "',
 '" mysql_real_escape_string($_POST['strasse']) . "',
 '" mysql_real_escape_string($_POST['nr']) . "')";

if (dbAbfrage($abfrage))
{
echo "Eintrag erfolgreich eingetragen.";
}
else
{
echo "Eintrag nicht eingetragen.";
}
break;
}
?>


Wenn wir nun alles speichern und hochladen haben können wir dies schonmal testen.
Jedoch werden wir feststellen, das es noch nicht so funktioniert wie wir es möchten.
Die Daten werden nicht in die ListView übergeben.
Dies machen wir nun.

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
If Rückgabewert = "Verbindungsfehler" Then 'Ist ein Verbindungsfehler aufgetreten
        'Nichts machen, da die Meldung schon vom Verbinden angezeigt wird
    ElseIf Rückgabewert = "Keine passenden Einträge vorhanden." Then 'Keine Einträge vorhanden
        MessageBox.Show("Keine passenden Einträge vorhanden.")
    Else
        'Zeilen und Spalten auflösen und in vListe einfügen
        Call Splitten(Rückgabewert, vListe, 0, 2, 3, 1, 4, 5)
        'Hier muss die Reihenfolge festgelegt werden,
        'in welcher die Spalten vom PHP-Script zurückgegeben werden.

        'In ListView einfügen
        For i As Integer = 0 To vListe.Count - 1
            lsvHaupt.Items.Add(New ListViewItem(New String() {vListe(i).ID, vListe(i).Name, vListe(i).Nachname, vListe(i).Anrede, vListe(i).Straße, vListe(i).Nr}))
        Next
    End If

Es wird Abgefragt, ob Fehler bei der Verbindung aufgetreten sind.
Sollten keine Fehler aufgetreten sein, werden die Daten in die ListView geschrieben.
Jedoch müssen wir die zurückgegebenen Daten zuerst getrennt werden, da wir diese als kompletten String zurück bekommen.
Das heist wird müssen Zeilen und Spalten trennen.
Die geschieht in der Prozedur Splitten:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
''' <summary>
''' Teilt einzelne Spalten und Zeile auf und fügt diese einer Liste hinzu.
''' </summary>
''' <param name="Source">Der String der gesplittet werden soll.</param>
''' <param name="Liste">Die cls_ExtendetList in der die Spalten gespeichert werden sollen.</param>
''' <param name="Spalte_ID">Gibt den Index der Spalte ID an.</param>
''' <param name="Spalte_Name">Gibt den Index der Spalte Titel an.</param>
''' <param name="Spalte_Nachname">Gibt den Index der Spalte Beschreibung an.</param>
''' <param name="Spalte_Anrede">Gibt den Index der Spalte Code an.</param>
''' <param name="Spalte_Straße">Gibt den Index der Spalte Sprache an.</param>
''' <param name="Spalte_Nr">Gibt den Index der Spalte Anhang an.</param>
''' <remarks></remarks>
<STAThread()> _
Public Sub Splitten(ByVal Source As String, ByVal Liste As List(Of cls_ExtentedList), _
                    Optional ByVal Spalte_ID As Integer = -1, _
                    Optional ByVal Spalte_Name As Integer = -1, _
                    Optional ByVal Spalte_Nachname As Integer = -1, _
                    Optional ByVal Spalte_Anrede As Integer = -1, _
                    Optional ByVal Spalte_Straße As Integer = -1, _
                    Optional ByVal Spalte_Nr As Integer = -1)

    Liste.Clear()

    'Die Zeilen teilen
    Dim vZeile As String()
    vZeile = Split(Source, "ΡΣΤ")

    'Die Spalten teilen
    For i As Integer = 0 To vZeile.Count - 2
        Dim vSpalte As String()
        vSpalte = Split(vZeile(i), "ΛΜΝ")

        Dim Eintrag As cls_ExtentedList
        Eintrag = New cls_ExtentedList

        If Not Spalte_ID = -1 Then 'Wenn die Spalte ID zugewiesen wurde...
            Eintrag.ID = vSpalte(Spalte_ID)
        End If
        If Not Spalte_Name = -1 Then 'Wenn die Spalte Titel zugewiesen wurde...
            Eintrag.Name = (vSpalte(Spalte_Name))
        End If
        If Not Spalte_Nachname = -1 Then 'Wenn die Spalte Nachname zugewiesen wurde...
            Eintrag.Nachname = (vSpalte(Spalte_Nachname))
        End If
        If Not Spalte_Anrede = -1 Then 'Wenn die Spalte Anrede zugewiesen wurde...
            Eintrag.Anrede = (vSpalte(Spalte_Anrede))
        End If
        If Not Spalte_Straße = -1 Then 'Wenn die Spalte Straße zugewiesen wurde...
            Eintrag.Straße = vSpalte(Spalte_Straße)
        End If
        If Not Spalte_Nr = -1 Then 'Wenn die Spalte Nr zugewiesen wurde...
            Eintrag.Nr = vSpalte(Spalte_Nr)
        End If
        Liste.Add(Eintrag) 'Werte in Liste einfügen
    Next
End Sub

Wie im Code oben bereits beschrieben, muss hier Reihenfolge der Zurückgegebenen Spalten beachtet werden. Wie oben gezeigt, wird ID in die erste, Name in 2, Nachname in 3 Spalte usw der Liste geschrieben: "Call Splitten(Rückgabewert, vListe, 0, 2, 3, 1, 4, 5)"
Wird bei einem Parameter nichts angegeben, wird diese Spalte nicht in die Liste übernommen.
Danach wird in die ListView geschrieben.
Somit kann es nochmal getestet werden.
Wurde alles richtig gemacht, sollte es funktionieren und alle Daten der Datenbank anzeigen.

Beim Ändern der Datenbank muss in der Klasse cls_ExtentedList die Liste mit den Namen der Spalten geändert werden. Genauso in der Prozedur "Splitten". Hier müssen die einzelnen Spalten als Optionaler Parameter verändert und danach ebenfalls die If-Abfrage angepasst werden.

Das war nun der erste Teil.
Wenn ich die nächsten Tage Zeit habe, kommt noch ein Beispiel mit dem Einfügen von Daten in die Datenbank.
Dies wird nicht ganz so lang wie dieser Post, da der größte Teil hier beschrieben wurde und daran anknüpft.

Viel Spaß damit
www.wintoolz.de
  • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
  • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
  • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

Benutze auch du Ecosia

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »T1g0r« (5. August 2010, 18:33)


solar22

Registrierter Benutzer

Beiträge: 104

Dabei seit: 13. Oktober 2007

  • Private Nachricht senden

2

Sonntag, 13. Juni 2010, 17:31

Entschudigt, dass das Thema schon so alt ist, aber eine Frage hätt ich:
Ich bin der Anleitung, er holt sich auch die Daten. Soweit so gut.
Aber er trägt in die lsvHaupt (das soll eine ListView sein, oder) nur die Spalte id ein, aber nix anderes.
Beim Eintragen in die Lsv hab ich festgestellt, das immernur das 1. Parameter übernommen wird:

Visual Basic Quellcode

1
2
3
4
'In ListView einfügen
            For i As Integer = 0 To vListe.Count - 1
                lsvHaupt.Items.Add(New ListViewItem(New String() {vListe(i).id, vListe(i).name, vListe(i).comment, vListe(i).preis, vListe(i).anzahl, vListe(i).catid, vListe(i).pic, vListe(i).tags}))
            Next

also vListe(i).id.
Wenn ich vListe(i).name an 1. Stelle setze tut er nur die Spalte name schreiben.
Wie kann ich jetzt auf die anderen zugreifen, bzw. diese als Tabelle ala phpMyAdmin ausgeben lassen?
Gruß,
solar22

Meine Projekte:
Moon!ight
solardorf - willkommen zu hause
Shopverwaltung (not public, im pack mit Shop Plugin für Moon!ight)

Alex

Registrierter Benutzer

  • »Alex« ist männlich

Beiträge: 50

Dabei seit: 28. Mai 2010

Wohnort: Köln

  • Private Nachricht senden

3

Montag, 14. Juni 2010, 19:07

Hallo Tig0r, danke für deinen Hinweis im anderen Tutorial. Ich habe mein Programm jetzt fertig, alles klappt 1a allerdings ohne sichere Übergabe mit PhP.
Ich werde jetzt versuchen mein Programm mit deinem Tutorial sicherer zu gestalten. Als kleine Anmerkung vorab, der Link zur [Beta]HttpPostRequest funktioniert nicht (mehr).
Ich habe die Datei hier gefunden, wurde wohl verschoben:
[Beta] HttpPostRequest
Da ich noch ein Anfänger bin stolpere ich über das Problem, dass ich nicht weiß was ich mit den DLL´s machen soll
Sorry wenn es eine doofe Frage ist, aber ich gehe das Tutorial durch weil ich was lernen will.
Ansonsten sieht es gut beschrieben aus.

Edit: Ich hab das mit der dll rausgefunden (glaube es zumindest richtig gemacht zu haben). In den entsprechenden Windows Ordner gepackt und mit Projekt-Verweise eingelesen.

Allerdings habe ich nun ein anderes Problem mit httppostequest und Netframework 4:
[VB 2010] Verbindung MySQL-Datenbank via PHP-Skript - HttpPostRequest Fehler, Netframework 4.0?

Und noch was anderes, warum sind diese Zeilen auskommentiert?

Zitat

//Datenbankdaten angeben
//mysql_connect("Host","Benutzer", "Passwort"); //Zugangsdaten angeben (Host, Benutzer, Passwort)
//mysql_select_db("Datenbank"); // Datenbank angeben

MfG-PWSafe: 95%

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Alex« (15. Juni 2010, 16:03)


solar22

Registrierter Benutzer

Beiträge: 104

Dabei seit: 13. Oktober 2007

  • Private Nachricht senden

4

Donnerstag, 17. Juni 2010, 18:57

Ich denke das liegt daran, das im selben Script noch ein include zur DB Config geschrieben wurde.
Gruß,
solar22

Meine Projekte:
Moon!ight
solardorf - willkommen zu hause
Shopverwaltung (not public, im pack mit Shop Plugin für Moon!ight)

T1g0r

Registrierter Benutzer

  • »T1g0r« ist der Autor dieses Themas

Beiträge: 1 226

Dabei seit: 31. Januar 2007

Hilfreich-Bewertungen: 7

  • Private Nachricht senden

5

Freitag, 18. Juni 2010, 16:28

@Alex:
Bei dem Connection.php hab ich wohl vergessen, die Kommentare zu löschen bzw. zu ändern.
Das gehört natürlich nicht auskommentiert, da sonst keine Verbindungsdaten zu der Datenbank vorhanden sind...
zu deinem geschilderten Problem kann ich leider keine Auskunft geben. Dazu musst musst du mal den ersteller der dll befragen.
www.wintoolz.de
  • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
  • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
  • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

Benutze auch du Ecosia

MA-Maddin

Registrierter Benutzer

  • »MA-Maddin« ist männlich

Beiträge: 208

Dabei seit: 17. Mai 2008

Wohnort: Chemnitz

Hilfreich-Bewertungen: 1

  • Private Nachricht senden

6

Donnerstag, 1. Juli 2010, 00:19

Hab das jetzt alles hinbekommen.
Und wie geht das jetzt mit INSERT oder UPDATE? Würde mich über eine Fortführung des Tuts freuen weil ich genau sowas für mein Admincontrol für meine Webseite brauche ^^

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MA-Maddin« (1. Juli 2010, 15:09)


jvbsl

Noob

  • »jvbsl« ist männlich

Beiträge: 7 206

Dabei seit: 7. April 2010

Hilfreich-Bewertungen: 397

  • Private Nachricht senden

7

Donnerstag, 1. Juli 2010, 14:33

doppelklick auf den Button cmdSelect_Click....?^^
Ich wollte auch mal ne total überflüssige Signatur:
---Leer---

T1g0r

Registrierter Benutzer

  • »T1g0r« ist der Autor dieses Themas

Beiträge: 1 226

Dabei seit: 31. Januar 2007

Hilfreich-Bewertungen: 7

  • Private Nachricht senden

8

Donnerstag, 1. Juli 2010, 20:57

Hallo,
heute möchte ich beschreiben, wie man Daten in einer Datenbank einträgt, bzw ändert. Also INSERT bzw UPDATE.
Wie in der Abfrage.php zu sehen ist, ist der INSERT-Befehl dort bereits eingetragen. Das bedeutet, wir müssen nur noch die zu schreibenden Daten an das PHP-Skript übergeben.

Im Click-Event des Button des Button muss nun zuerst eine Verbindung Klasse cls_Datenbankzugriff hergestellt werden:

Visual Basic Quellcode

1
2
3
4
'Insert ausführen
'Verbindung definieren
Dim Verbindung As cls_Datenbankzugriff
Verbindung = New cls_Datenbankzugriff


Danach muss die Net.PostCollection definiert werden.
In dieser werden die Übergabeparameter zum PHP-Skript übergeben:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
'Aufruf der Klasse
Dim myCollection As Net.PostCollection = New Net.PostCollection
'Welcher Query soll den im Skript ausgeführt werden?
myCollection.Add("SQLQuery", "insert")
'Welche Daten sollen in der Dantebank eingefügt werden?
myCollection.Add("name", txt_Name.Text)
myCollection.Add("nachname", txt_Nachname.Text)
myCollection.Add("anrede", txt_Anrede.Text)
myCollection.Add("strasse", txt_Strasse.Text)
myCollection.Add("nr", txt_Nr.Text)

Zum Schluss kann die Verbindung zur Datenbank aufgebaut werden:

Visual Basic Quellcode

1
2
'Verbindung aufbauen und Daten holen/übergeben
Dim Rückgabewert As String = Verbindung.Zugriff(myCollection, "Abfrage.php", True)


Vergleicht man diesen Code mit dem Code des ersten Posts, so stellt man fest, dass hier nichts anderes gemacht wird. Es werden lediglich mehrere Parameter übergeben. Das selbe Prinzip wird beim UPDATE genutzt.

Der benötigte VB-Code für das Update:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'Update ausführen
'Verbindung definieren
Dim Verbindung As cls_Datenbankzugriff
Verbindung = New cls_Datenbankzugriff

'Aufruf der Klasse
Dim myCollection As Net.PostCollection = New  Net.PostCollection

'Welcher Query soll den im Skript ausgeführt werden?
myCollection.Add("SQLQuery", "update")
'Welche Daten sollen in der Datenbank bearbeitet werden?
myCollection.Add("name", txt_Name.Text)
myCollection.Add("nachname", txt_Nachname.Text)
myCollection.Add("anrede", txt_Anrede.Text)
myCollection.Add("strasse", txt_Strasse.Text)
myCollection.Add("nr", txt_Nr.Text)

'Verbindung aufbauen und Daten holen/übergeben
Dim Rückgabewert As String = Verbindung.Zugriff(myCollection, "Abfrage.php", True)

Folgendes muss in die Abfrage.php einfügen werden:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case "update"//Einträge bearbeiten
$abfrage "UPDATE Tabelle SET name='" mysql_real_escape_string($_POST['name']) . "',
nachname='" mysql_real_escape_string($_POST['nachname']) . "',
anrede='" mysql_real_escape_string($_POST['anrede']) . "',
strasse='" mysql_real_escape_string($_POST['strasse']) . "',
nr='" mysql_real_escape_string($_POST['nr']) . "',
WHERE id='irgendeine ID'";
  
if (!dbAbfrage($abfrage))
{
echo "Beim Update ist ein Fehler aufgetreten.";
}
else
{
echo "Update erfolgreich.";
}
break;

Nun sollte auch das Update und das Insert funktionieren.
Viel Spaß
www.wintoolz.de
  • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
  • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
  • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

Benutze auch du Ecosia

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »T1g0r« (1. Juli 2010, 21:52)


mirco_lu

Registrierter Benutzer

  • »mirco_lu« wurde gesperrt

Beiträge: 2

Dabei seit: 6. Juli 2010

  • Private Nachricht senden

9

Dienstag, 6. Juli 2010, 17:56

undefinierbare Zeichen in Rückgabewert

Hallo,

Habe mich nun stundenlang mit diesem Tut und der HTTPRequest.dll beschäftigt und bin über eine Merkwürdigkeit gestossen.

Es hat eine Weile gedauert dahinterzusteigen, es muss aber an VB.NET liegen. Folgendes:
Sinn des Ganzen ist es Login-Daten abzugleichen, wenn diese stimmen, gibt die PHP-Datei ein "yes" zurück. Lasse ich den Request in einer MessageBox anzeigen steht da wie erwartet yes. Anders in einer If-Schleife

Visual Basic Quellcode

1
2
3
4
5
If Rückgabewert = "yes" then
 MsgBox("ok")
else
 MsgBox("nicht ok")
End if


Ich konnte machen was ich will, ich bin immer in das Else gerannt, das Debugging ergab: If "yes" = "yes" then, und trotzdem wurde die Bedingung nicht erfüllt. Ergibt keine Logik. Ein Console.Write(Rückgabewert) ergab aber ??yes, womit natürlich klar ist: ??yes ist ungleich yes.

Ist schon jemand auf dieses Phänomen gestossen und hat eventuell ne Lösung parat?
Danke im Voraus...

:EDIT Die beiden ?? kommen nur am Anfang auch wenn ich mehrere String auspucken lasse (z.B. eine Datenbank-Abfrage wie im Tut)
Ich kenn das Phänomen was irgendwie mit UTF-8 zu tun hat. Dummerweise haben andere Webseiten die auf dem selben Server laufen dieses Problem nicht, ich forsche mal weiter

:Edit Habs gelöst, wollte schlau sein und die PHP-Dateien gleich mit im VB.Net Projekt programmieren, aber VB.NET hat wohl eine dumme Variante die Dateien zu speichern. Ein Öffnen in UltraEdit und speichern als UTF-8 ohne BOM hat das Problem dann gelöst.
Also den PHP-Part schön seperat schreiben...:-)
Alles kann, nix muss... :)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »mirco_lu« (6. Juli 2010, 19:04)


Homer

Registrierter Benutzer

  • »Homer« ist männlich

Beiträge: 83

Dabei seit: 14. Februar 2010

  • Private Nachricht senden

10

Sonntag, 25. Juli 2010, 00:02

Ich komme leider nur bis zu der Meldung von meiner Firewall ob der Zugriff erlaubt werden soll. Die Verbindung wird dann zu imap.meinserver.de aufgebaut (?). Anschließend passiert gar nichts mehr. Es kommt auch keine Fehlermeldung.
Weiß jemand was die Ursache sein könnte?
mfg Homer

//An der Firewall liegt es nicht!

T1g0r

Registrierter Benutzer

  • »T1g0r« ist der Autor dieses Themas

Beiträge: 1 226

Dabei seit: 31. Januar 2007

Hilfreich-Bewertungen: 7

  • Private Nachricht senden

11

Sonntag, 25. Juli 2010, 12:01

imap?
IMAP ist normal für das Empfangen von Emails zuständig...
Hast du die Verbindungsdaten korrekt angegeben?
Hast du mal die Empfangenen Daten ausgewertet, was die der Server zurückschickt? Vielleicht wirst du daraus schlauer.
www.wintoolz.de
  • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
  • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
  • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

Benutze auch du Ecosia

Homer

Registrierter Benutzer

  • »Homer« ist männlich

Beiträge: 83

Dabei seit: 14. Februar 2010

  • Private Nachricht senden

12

Sonntag, 25. Juli 2010, 19:35

Alle Daten sind korrekt angegeben. Im VB Code (cls_Datenbankzugriff) den Pfad, wo ich die PHP Scripte hochgeladen habe und in Connection_inc.php die Zugangsdaten.
Wie soll ich die empfangenen Daten auswerten, ich weiß ja nicht mal ob es überhaupt dazu kommt?
mfg Homer

T1g0r

Registrierter Benutzer

  • »T1g0r« ist der Autor dieses Themas

Beiträge: 1 226

Dabei seit: 31. Januar 2007

Hilfreich-Bewertungen: 7

  • Private Nachricht senden

13

Sonntag, 25. Juli 2010, 21:30

Wenn etwas vom Server zurückkommt, ist dies in "Rückgabewert" zu sehen...
www.wintoolz.de
  • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
  • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
  • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

Benutze auch du Ecosia

Homer

Registrierter Benutzer

  • »Homer« ist männlich

Beiträge: 83

Dabei seit: 14. Februar 2010

  • Private Nachricht senden

14

Montag, 26. Juli 2010, 16:39

Unter Rückgabewert wird folgende Meldung angezeigt:
Der Remoteserver hat einen Fehler zurückgegeben: (404) Nicht gefunden.
mfg Homer

T1g0r

Registrierter Benutzer

  • »T1g0r« ist der Autor dieses Themas

Beiträge: 1 226

Dabei seit: 31. Januar 2007

Hilfreich-Bewertungen: 7

  • Private Nachricht senden

15

Montag, 26. Juli 2010, 22:43

Die Meldung lässt darauf schliesen, dass du die Datei nicht richtig ansprichst.
Hast du den Pfad korrekt angegeben?
Du musst bedenken, in der Klasse cls_Datenbankzugriff wird der Ordner angegeben, in dem die Datei liegt.

Visual Basic Quellcode

1
Dim Ergebnis As String = myrequest.Create(IO.Path.Combine("http://www.DeineSeite.de/OrdnerInDemDieDateiLiegt", File), vPostCollection)

Erst beim Verbindungsaufbau wird die Datei angegeben. Und nur die Datei.

Visual Basic Quellcode

1
Dim Rückgabewert As String = Verbindung.Zugriff(myCollection, "Abfrage.php", False)

Du kannst es natürlich auch anders lösen, in dem du z.B. beim Verbindungsaufbau immer den kompletten Pfad angibst und in der Klasse den Teil weglässt, was aber unnötig ist.
www.wintoolz.de
  • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
  • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
  • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

Benutze auch du Ecosia

Homer

Registrierter Benutzer

  • »Homer« ist männlich

Beiträge: 83

Dabei seit: 14. Februar 2010

  • Private Nachricht senden

16

Dienstag, 27. Juli 2010, 14:42

Ich habe den Pfad angegeben, in den ich die 3 PHP Dateien hochgeladen habe. Meinst du mit "Die Datei" Abfrage.php?
Es kommt leider nach wie vor die selbe Meldung: Der Remoteserver hat einen Fehler zurückgegeben: (404) Nicht gefunden.
Außerdem wird laut Firewall immernoch auf imap. zugegriffen...?
Ich habe übrigens hier einen Server mit Datenbank: webgo24

T1g0r

Registrierter Benutzer

  • »T1g0r« ist der Autor dieses Themas

Beiträge: 1 226

Dabei seit: 31. Januar 2007

Hilfreich-Bewertungen: 7

  • Private Nachricht senden

17

Dienstag, 27. Juli 2010, 17:49

Mit Datei meine ich die Datei, welche du ansprechen möchtest...
Kannst du vielleicht mal den Teil deines Codes posten, welcher die Verbindung aufbaut. Inklusive der Datenbankzugiffsklasse?
Da würde womöglich weiterhelfen.
www.wintoolz.de
  • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
  • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
  • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

Benutze auch du Ecosia

Homer

Registrierter Benutzer

  • »Homer« ist männlich

Beiträge: 83

Dabei seit: 14. Februar 2010

  • Private Nachricht senden

18

Mittwoch, 28. Juli 2010, 11:54

Ok, wird gemacht.
Allerdings habe ich es in einem neuen Thread geschrieben, da ich zum einen das Tutorial hier nicht durcheinander bringen möchte, und zum anderen weil die Beiträge hier immer erst freigeschalten werden müssen.
Neuer Thread

SONiQ

Registrierter Benutzer

Beiträge: 131

Dabei seit: 8. Januar 2010

  • Private Nachricht senden

19

Montag, 2. August 2010, 20:35

Ungültige Konvertierung von der Zeichenfolge <?php //ini_set("display_errors in Typ Integer.

bei diesem Befehl:
Eintrag.ID = vSpalte(Spalte_ID)

Wie krieg' ich den Fehler weg?

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

20

Montag, 2. August 2010, 21:09

Stell deine Frage am besten ins Hauptforum und poste dort auch dein Code
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


Verwendete Tags

Connect, Database, Datenbank, MySQL, PHP, Verbindung

Social Bookmarks