webclient spinnt?

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von markusfairp.

    webclient spinnt?

    Moin Moin
    Ich bin bei diesem Fehler absolut ratlos obwohl ich schon einge jahre erfahrung habe

    Ich versuche über ein webclient mit einen php script verbindung aufzubauen, das php script liest eine mysql db aus und gibt sie wieder
    das funktioniert auch so wie es ist wunderbar

    jetzt zum eigentlichen problem
    wenn ich mit diesem code versuche das php script aufzurufen funktioniert es nicht

    VB.NET-Quellcode

    1. Dim r_nr As String = DataGridView2.CurrentRow.Cells(0).Value.ToString
    2. Dim kunde As String = DataGridView2.CurrentRow.Cells(1).Value.ToString
    3. Dim datum As String = DataGridView2.CurrentRow.Cells(2).Value.ToString
    4. Dim full_r_nr As String = r_nr & "_" & kunde & "_" & datum
    5. Dim clearresult As String = wc.DownloadString("http://unbekannt/RechnungsProgramm/Bestellung/db_dump.php?r_nr=" & full_r_nr)
    6. MsgBox(clearresult)

    ich erhalte immer folgenden fehler in der msgbox(:

    Quellcode

    1. <b>Fatal error</b>: Call to a member function fetch_array() on a non-object in <b>/home/u403019572/public_html/RechnungsProgramm/Bestellung/db_dump.php</b> on line <b>11</b>


    wenn ich mir die url vom webclient ins clipboard hole mit

    VB.NET-Quellcode

    1. My.Computer.Clipboard.SetText("http://unbekannt/RechnungsProgramm/Bestellung/db_dump.php?r_nr=" & full_r_nr)

    und den obigen code mit der url aus dem clipboard probiere funktioniert es, genauso als ob ich die kopierte url im normalen webbrowser eingeben würde

    VB.NET-Quellcode

    1. Dim r_nr As String = DataGridView2.CurrentRow.Cells(0).Value.ToString
    2. Dim kunde As String = DataGridView2.CurrentRow.Cells(1).Value.ToString
    3. Dim datum As String = DataGridView2.CurrentRow.Cells(2).Value.ToString
    4. Dim full_r_nr As String = r_nr & "_" & kunde & "_" & datum
    5. Dim clearresult As String = wc.DownloadString("http://unbekannt/RechnungsProgramm/Bestellung/db_dump.php?r_nr=10_GB_21.01.2017")
    6. MsgBox(clearresult)



    ich verstehe jetzt bloß nicht warum die erste variante nicht funktioniert, weil die zweite variante, von der url her genauso ist wie die erste ?(
    mach ich irgendwas falsch? denk ich zu kompliziert? ich hoffe das mir jemand weiterhelfen kann

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Eddy schrieb:

    Zeig mal dein PHP-Script, denn da tritt der Fehler in Zeile 11 auf.

    wie oben schon steht, das script ansich funktioniert einwandfrei

    ErfinderDesRades schrieb:


    ich vermute unsichtbare Steuerzeichen im String, die beim Clipboard-Verfahren eliminiert werden.

    die frage ist bloß welche? weil die 3 variablen die ich verwende, werden zwar aus dem dgv geholt, aber sie werden in dem ich den mysql tablename(10_GB_21.01.2017) mittels split("_") hinzugefügt
    das dgv dient quasi nur als zwischenlager

    ich wüsste nicht wie dort steuerzeichen hinzugefügt werden könnten, gibt es eine möglichkeit die sichtbar zu machen?
    kenn mich mit steuerzeichen nicht wirklich aus und eine schnelle google suche hat mir auch nicht geholfen

    ErfinderDesRades schrieb:

    vergleiche die Länge der Strings - wenn einer länger ist, ansonsten aber gleich aussieht, enthält er ein unsichtbares Steuerzeichen.


    danke, das hat geholfen
    die variable r_nr enthält 2 unsichtbare zeichen
    gibts da eine einfach methode diese zeichen zu löschen? ansonsten würde ich mir da was mit substring basteln oder jedes zeichen einzelnt prüfen
    naja, am besten wäre wohl, sie würden ühaupt nie hineinkommen ins DGV, die bösen Zeichen.
    Da wäre wohl was zu untersuchen und evtl. ein Bug auszubessern.

    2 Zeichen sagst du? das könnten fälschlich eingelesene Leerzeilen sein, ein Zeilvorschub wird durch unsichtbare Cr und Lf codiert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ich hab gerade mal nach geguckt
    der tablename wird mit 16zeichen vom php script wieder gegeben

    PHP-Quellcode

    1. $result = $mysqli->query("SHOW TABLES FROM u403019572_best");
    2. while($row = $result->fetch_array()) {
    3. echo $row[0]."?";
    4. }


    der wc gibt aber 18 zeichen wieder

    VB.NET-Quellcode

    1. Dim result() As String = wc.DownloadString("http://unbekannt/RechnungsProgramm/Bestellung/db_dump_tables.php").Split("?")
    2. For i As Integer = 0 To result.Count - 1
    3. DataGridView2.Rows.Add(result(i).Split("_")(0), result(i).Split("_")(1), result(i).Split("_")(2))
    4. Next


    wüsste nicht wie ich das beheben sollte


    ich hab das jetzt so gelöst, ich weis zwar nicht ob das die feine englische art ist, aber es funktioniert

    VB.NET-Quellcode

    1. Dim result1() As String = wc.DownloadString("http://unbekannt/RechnungsProgramm/Bestellung/db_dump_tables.php").Split("?")
    2. For i As Integer = 0 To result1.Count - 1
    3. Dim splits() As String = result1(i).Split("_")
    4. Dim r_nr As String = splits(0).Substring(2, 2)
    5. DataGridView2.Rows.Add(r_nr, splits(1), splits(2))
    6. Next

    offsichtlich packt das php-echo zeilvorschübe zwischen die Zeilen, was ja auch sinnvoll ist, damit die Zeilen untereinander stehen.
    Du hängst ausserdem noch "?" hinten an - richtig? (ich kann ühaupt kein php).

    Beim Splitten splittest du aber nur die "?" weg, und die Zeilvorschübe bleiben drinne.
    Also lass das Anhängen von "?", und splitte dann auch nicht nach "?", sondern splitte nach Zeilvorschüben.
    Dazu musst du aber ühaupt mal die richtige Syntax der String.Split-Methode lernen - die macht nämlich was anneres als du denkst.

    Oder du lässt halt alles so, und bists erstmal zufrieden.
    genau das "?" benutzt ich immer damit ich eine untertrennung hab und es später wieder trennen kann

    die zeilenvorschübe hab ich gestern erst entdeckt, ich hab das bis jetzt immer mit dem "?" gemacht und das hat auch immer funktioniert. warum in diesem fall nicht, weis ich nicht

    ich denke ich werde das aber erstmal so lassen, ist zwar nicht schön aber für meine zwecke reicht es aufjedenfall erstmal