Brauche Dringend Hilfe für einen Guten Webhoster

  • Antworten:50
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 70

27.08.2016, 18:29:51 via Website

Hallo Leute nun bin ich endgültig am Limit angelangt.
Bisher habe ich meine SQL Datenbank immer bei 1und1 gestored. Leider haben die eine Begrenzung für Uris die man nicht umstellen kann. Also kann ich mit meinem Handy keine größeren Bilder mehr zur Datenbank senden als Base64String. Da kommt immer der Error:

System.Net.Http.HttpRequestException: 414 (Request-URI Too Long)

Leider lässt sich der Ramen nicht erhöhen bei den Kollegen von 1und1.
Deswegen bin ich gezwungen umzusteigen und suche einen Anbieter bei dem man es selbst einstellen kann den DatenRamen oder der schon von Grund auf einen genügenden Ramen hat.
Ersteres würde ich bevorzugen.
Preis ist mir egal!

Was ich halt dringend benötige: FTP Zugang, phpMyAdmin und SQL-Server.
Ist das nicht vorhanden ist der Anbieter für mich unbrauchbar.

Irgendwelche Vorschläge?
LG

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 18:37:28 via Website

Hallo Lukas,

ich verwende seit schon über 15 Jahren mehrere root von server4you ...

Keinerlei Probleme und da root, kannste dir freien lauf lassen ...

lg

— geändert am 27.08.2016, 18:39:15

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.08.2016, 18:40:00 via App

Das geht bei keinem.
Soweit ich weiss ist die Url länge auf 255 Zeichen beschränkt und zwar immer. Alles was länger ist darf nicht per http get sondern muss per http post übertragen werden. Ist eh die bessere Methode dann muss man kein UrlEncode etc. benutzen..

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 18:55:11 via Website

Dein Codeschnipsel aus deinem anderen Thread

string byteData = Convert.ToBase64String(picData);
uri = new Uri(urlAdress + "?Picture=" + byteData + "&Title=" + title.Text + "&Description=" + description.Text + "&Location=" + location.Text + "&FirstTag=" + tag1.Text + "&SecondTag=" + tag2.Text + "&CreationDate=" + datum + "&CreationName=LukasReiner" + "&CreationNameID=1" + "&ThumbUps=0" + "&ThumbDowns=0" + "&Requests=0")
var client = new System.Net.Http.HttpClient();
var result = client.GetStringAsync(uri).Result;

Das musste irgendwann schief gehen ...

Vorschlag :

Du könntest mittels (S)FTP-Verbindung den Content und Base64 Flagfile uploaden und lässt ein PHP script für
den Import in die DB laufen .

— geändert am 27.08.2016, 20:13:06

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.08.2016, 20:24:18 via App

Bei sowas benutzt man ganz klar http post oder gleich ne richtige API

Ps wenn schon so einen langen string dann bitte string..Format das belibt übersichtlicher als das ganze plus gendöns.

— geändert am 27.08.2016, 20:25:09

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 20:30:40 via Website

...... als das ganze plus gendöns

der war gut :-)

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

27.08.2016, 20:36:45 via App

swa00

Dein Codeschnipsel aus deinem anderen Thread

string byteData = Convert.ToBase64String(picData);
uri = new Uri(urlAdress + "?Picture=" + byteData + "&Title=" + title.Text + "&Description=" + description.Text + "&Location=" + location.Text + "&FirstTag=" + tag1.Text + "&SecondTag=" + tag2.Text + "&CreationDate=" + datum + "&CreationName=LukasReiner" + "&CreationNameID=1" + "&ThumbUps=0" + "&ThumbDowns=0" + "&Requests=0")
var client = new System.Net.Http.HttpClient();
var result = client.GetStringAsync(uri).Result;

Das musste irgendwann schief gehen ...

Vorschlag :

Du könntest mittels (S)FTP-Verbindung den Content und Base64 Flagfile uploaden und lässt ein PHP script für
den Import in die DB laufen .

Gibs dazu ein Sample? Dass was du empfiehlst habe ich noch nie gemacht :)

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 20:45:19 via Website

Nun , entweder du machst nen POST ( wie Pascal empfohlen hat ) oder

  • du baust dir einen schönen (S) FTP auf einem port auf, schiebst mittels AsyncTask oder guter Library das "grosse Image dahin
  • dann erstellst du auch da ein "FlagFile" , damit der Server erkennt , dass da was Neues gekommen ist.
    (kann ja verschlüsselt sein und Daten beinhalten - oder JSON oder oder oder ..... )
  • und auf dem Server machste ein getriggertes PHP script , der dir dann das Vorhandene in die DB einpflegt.

So ein Vorgang wird idR auch bei lokalen Mainframes verwendet, die Daten importieren ( z.b gescannte Dokumente)

lg
Stefan

— geändert am 27.08.2016, 20:51:21

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

27.08.2016, 20:51:30 via App

swa00

Nun , entweder du machst nen POST ( wie Pascal empfohlen hat ) oder

  • du baust dir einen schönen (S) FTP auf einem port auf, schiebst mittels AsyncTask oder guter Library das "grosse Image dahin
  • dann erstellst du auch da ein "FlagFile" , damit der Server erkennt , dass da was Neues gekommen ist.
    (kann ja verschlüsselt sein und Daten beinhalten)
  • und auf dem Server machste ein getriggertes PHP script , der dir dann das Vorhandene in die DB einpflegt.

So ein Vorgang wird idR auch bei lokalen Mainframes verwendet, die Daten einpflegen ( z.b gescannte Dokumente)

lg
Stefan

Ok schön und gut aber kann ich das auch bei 1und1 verwenden? ich habe ja keinen eigenen Server. Und die einzigen Möglichkeiten die ich bei 1und1 ist die Daten an PHP zu senden und von da mit SQL in die Datenbank einzufügen.

Pascal redete davon dass ein WebClient Domain Namen zulässt. Deswegen werde ich diese Methode morgen ausprobieren denn bei einem WebClient bei C# für Android gäbe es ein Post Upload Verfahren mit dem es funktionieren könnte. Nur dachte ich bis jetzt dass WebClient bei C# nur static IPs verwenden kann und keine Domains.

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 20:58:28 via Website

Ok schön und gut aber kann ich das auch bei 1und1 verwenden? ich habe ja keinen eigenen Server. Und die einzigen Möglichkeiten die ich bei 1und1 ist die Daten an PHP zu senden und von da mit SQL in die Datenbank einzufügen.

Öhm .... wieso dies ?

a) der FTP ist schon drauf und soweit ich mich nicht täusche kannst du jederzeit da noch andere Accounts hinzufügen
b) PHP's kannst du so viele wie möglich erstellen und auch dort laufen lassen

Anm:

Ganz oben warst du im übrigen bereit gewesen dir OHNE Kostenpunkt einen anderen Provider zuzulegen

Preis ist mir egal!

Warum diskutieren wir jetzt doch wegen 1und1 ? Es dachte es ginge dir um die Technik ....

Entscheide dich : Gute Technik , oder Technik für 1und1 ??? :-)
(Wenn das jetzt mal nicht Prügel aus Montabaur gibt)

— geändert am 27.08.2016, 21:01:10

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

27.08.2016, 21:01:57 via App

swa00

Ok schön und gut aber kann ich das auch bei 1und1 verwenden? ich habe ja keinen eigenen Server. Und die einzigen Möglichkeiten die ich bei 1und1 ist die Daten an PHP zu senden und von da mit SQL in die Datenbank einzufügen.

Öhm .... wieso dies ?

a) der FTP ist schon drauf und soweit ich mich nicht täusche kannst du jederzeit da noch andere Accounts hinzufügen
b) PHP's kannst du so viele wie möglich erstellen und auch dort laufen lassen

Anm:

Ganz oben warst du im übrigen bereit gewesen dir OHNE Kostenpunkt einen anderen Provider zuzulegen

Preis ist mir egal!

Warum diskutieren wir jetzt doch wegen 1und1 ? Es dachte es ginge dir um die Technik ....
Entscheide dich .......

Ich will beides wissen einerseits wie ich dieses Problem löse und anderer Seits welche Provider eigentlich besser für meine Vorhaben geeignet wären bei 1und1 bekomme ich maximal 1GB SQL Datenbanken. Dass ist mir zu wenig. Gibs provider die größere Anbieten zu einem fairen Preis?

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 21:05:29 via Website

@Lukas

Dass ist mir zu wenig. Gibs provider die größere Anbieten zu einem fairen Preis?

Wenn du einen root-Server hast (preis ist dir ja egal) dann ist die Grenze die deiner dort eingebauten (bestellten) Festplatte .. liegt um 25 Eus für 1 TB

Root / dedicated : Das ist dann dein eigener Rechner, da kannst du drauf installieren was du willst , ergo stellt sich nicht die frage , welcher "provider" richtig ist und was die können.

Der Rechner macht dann das , was DU willst

— geändert am 27.08.2016, 21:09:55

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

27.08.2016, 21:11:48 via App

swa00

@Lukas

Dass ist mir zu wenig. Gibs provider die größere Anbieten zu einem fairen Preis?

Wenn du einen root-Server hast (preis ist dir ja egal) dann ist die Grenze die deiner dort eingebauten (bestellten) Festplatte .. liegt um 25 Eus für 1 TB

Oha dass klingt gut. Und das machst du auch? 1TB ist schon schwer voll zu bekommen. Kannst du den link eines solchen Providers posten?

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 21:21:51 via Website

@Lukas

wie oben schon erwähnt halte ich bereits sei 15 Jahren mehrere Root server bei folgender Firma und bin bis dato
zufrieden - Service TOP

http://www.server4you.de/

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

27.08.2016, 21:27:59 via App

Ok danke und wie Verbinde ich mich da? Remote Desktop? Bekomm ich da die statische IP des Servers? mehr details pls bin ein Anfänger.

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 21:38:02 via Website

@Lukas

das wird wohl dann ein Linux Rechner sein , den kannst du per Konsole dann steuern (z.b. Putty) - eine GUI gibt es nicht.
Es gibt vereinzelnt auch Rechner mit Windows drauf, würde ich allerdings für dein Vorhaben NICHT empfehlen.
Du hast eine statische IP und im Preis ist eine (Wunsch) Domain dabei , die dann bei dir auf der IP aufschlägt.

Darauf kannst du dir den Webserver ( Apache, PHP 6x, Mysql installieren) den ggf mit einem EMailServer und FTP versehen etc etc.

Wenn du LINUX nicht mächtig bist , dann würde ich dir empfehlen VORHER zum Spielen und Ausprobieren , einen RaspBerry 3 (ca. 40 eus) zu besorgen und das Ganze erst mal zu Hause übst.
Übrigens kann man das Ding auch zu Hause via DYNDNS selbst anschliessen, dann hast du auch erst mal einen Server- bevor du 25 Eus im Monat ausgibst .

Dazu ist das Netz voll mit Beispielen

Noch ne Lösung : Zu Hause einen Win-Rechner der immer läuft , DYNDNS Verbindung und XAMMP mit Apache

lg
Stefan

— geändert am 27.08.2016, 21:54:39

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

27.08.2016, 21:55:16 via App

Hallo zusammen,

wie Pascal schon erwähnt, wäre ein Weg über Post der Kosten geringste Weg.

Und von GET zu POST umzuschreiben ist nun nicht der hit.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
swa00
  • Forum-Beiträge: 3.704

27.08.2016, 22:01:25 via Website

Und von GET zu POST umzuschreiben ist nun nicht der hit.

Ich glaube, der hadert jetzt auch mit seiner Speicherkapazität - deshalb bin ich darauf eingegangen .
(Bin mir allerdings mittelweile nicht mehr sicher) :-)

— geändert am 27.08.2016, 22:06:39

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 08:51:43 via Website

swa00

Und von GET zu POST umzuschreiben ist nun nicht der hit.

Ich glaube, der hadert jetzt auch mit seiner Speicherkapazität - deshalb bin ich darauf eingegangen .
(Bin mir allerdings mittelweile nicht mehr sicher) :-)

Da hast du vollkommen recht deswegen war deine Antwort schon sehr hilfreich.
Also habe ich jetzt 3 Möglichkeiten:
Ich miete mir einen Server und installieren das alles drauf. Kostenpunkt: 25 Euro im Monat +25 Aufschlag für 1T Festplatte.
Ich kaufe mir einen RaspBerry und probieren es da vorerst mal aus um mit Linux zurecht zu kommen.
Oder ich lasse einen Rechner zu Hause immer laufen und nutze den als Server.

Von der Einfachheit her würde ich jetzt eigentlich mal die erste Variente nehmen da es sehr wichtig ist dass mein Server NIE ausfällt. Also ist der Rechner zu Hause schon ein Risiko dass ich vermeiden könnte.

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 09:59:41 via Website

Ludy

Hallo zusammen,

wie Pascal schon erwähnt, wäre ein Weg über Post der Kosten geringste Weg.

Und von GET zu POST umzuschreiben ist nun nicht der hit.

Naja hier mal der aktuelle Code:

WebClient hab ich ausprobiert und wie sich wirklich herausstellte bei c# für Android funktioniert nur die static IP.
Mit Apache und Localhost funktionierte es aber mit einer richtigen Domain nichtmehr. Im Xamarin hab ich diesen Bug auch oft gelesen nur nie eine Workaround oder sonstiges.
So sah der Code aus:

            WebClient client = new WebClient();
            Uri uri = new Uri(urlAdress);

            NameValueCollection parameters = new NameValueCollection();
            parameters.Add("Picture", Convert.ToBase64String(picData));
            parameters.Add("Title", title.Text);
            parameters.Add("Description", description.Text);
            parameters.Add("Location", location.Text);
            parameters.Add("FirstTag", tag1.Text);
            parameters.Add("SecondTag", tag2.Text);
            parameters.Add("CreationDate", datum);
            parameters.Add("CreationName", "LukasReiner");
            parameters.Add("CreationNameID", "1");
            parameters.Add("ThumbUps", "0");
            parameters.Add("ThumbDowns", "0");
            parameters.Add("Requests", "0");

            client.UploadValuesAsync(uri, parameters);
            client.UploadValuesCompleted += client_UploadValuesCompleted;

 void client_UploadValuesCompleted(object sender, UploadValuesCompletedEventArgs e)
        {
            RunOnUiThread(() =>
            {
                Console.WriteLine(Encoding.UTF8.GetString(e.Result));
            });

        }

Also musste ich was anderes suchen und kam durchs Xamarin.Android forum auf HttpClient.
Der Code sieht so aus:

          using (HttpClient client = new HttpClient())
            {
                var postdataJson = JsonConvert.SerializeObject(new { Picture = byteData , Title = title.Text , Description = description.Text, Location = location.Text, FirstTag = tag1.Text, SecondTag = tag2.Text, CreationDate = datum , CreationName = "LukasReiner", CreationNameID = "1",  ThumbUps = "0", ThumbDowns = "0", Requests = "0" });
                var values = new Dictionary<string, string>();
                values.Add("json", postdataJson);
                var content = new FormUrlEncodedContent(values);
                var responseObj = await client.PostAsync(urlAdress, content);
                var responseString = await responseObj.Content.ReadAsStringAsync();
                var responseobject = JsonConvert.DeserializeObject(responseString);
                string respones = responseobject.ToString();
                Toast.MakeText(this, respones, ToastLength.Long).Show();
            }

Laut Xamarin sollte es so funktionieren da es ja client.PostAsync ist.
Nur irgendwie passiert nichts. Kein Error gar nichts. Hab ich was übersehen?

Die Php sieht zurzeit so aus:
$mPicture = $_GET["Picture"];
$mTitle = $_GET["Title"];
$mDescription = $_GET["Description"];
$mLocation = $_GET["Location"];
$mFirstTag = $_GET["FirstTag"];
$mSecondTag = $_GET["SecondTag"];
$mCreationDate = $_GET["CreationDate"];
$mCreationName = $_GET["CreationName"];
$mCreationNameID = $_GET["CreationNameID"];
$mThumbUps = $_GET["ThumbUps"];
$mThumbDowns = $_GET["ThumbDowns"];
$mRequests = $_GET["Requests"];
$mPicture = base64_decode($mPicture);
$mTitle = trim($mTitle);
$mDescription = trim($mDescription);
$mLocation = trim($mLocation);
$mFirstTag = trim($mFirstTag);
$mSecondTag = trim($mSecondTag);
$mCreationDate = trim($mCreationDate);
$mCreationName = trim($mCreationName);
$mCreationNameID = trim($mCreationNameID);
$mThumbUps = trim($mThumbUps);
$mThumbDowns = trim($mThumbDowns);
$mRequests = trim($mRequests);
$mDefaultPicture = "0";

$con = mysqli_connect ($host, $username, $pwd, $db) or die("Kann nicht verbinden!");
if(mysqli_connect_error($con))
{
    echo "Verbindungsversuch zur Datenbank fehlgeschlagen ".mysqli_connect_error();     
} 

//SQL Befehl um Daten in den Table hinzuzufügen mit den Variablen 
$sql = "INSERT INTO groups
                        (picture, title, description, createdby, IDcreatedby, creationdate, firsttag, secondtag, thirdtag, thumbups, thumbdowns, requests) 
                        VALUES ('".$mPicture."',
                                '".$mTitle."',
                                '".$mDescription."',
                                '".$mCreationName."',
                                '".$mCreationNameID."',
                                '".$mCreationDate."',
                                '".$mLocation."',
                                '".$mFirstTag."',
                                '".$mSecondTag."',
                                '".$mThumbUps."',
                                '".$mThumbDowns."',
                                '".$mRequests."');";
$result = mysqli_query($con,$sql);

if($result)
{
    echo "Guppe hinzugefügt";

} else 
{
    echo "Error";
}
mysqli_close($con); 
?>

ist hier Post überhaupt richtig? Oder muss ich _GET?

— geändert am 29.08.2016, 10:13:30

Antworten
swa00
  • Forum-Beiträge: 3.704

29.08.2016, 10:12:42 via Website

@Lukas

.. ich würde gerne helfen , aber Android /Xamarin /C# bin ich nicht mächtig.

Bei pure Java hätte ich für dich mehrere Lösungen direkt parat gehabt.

Ich bin raus ...

lg
Stefan

— geändert am 29.08.2016, 10:14:04

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 10:27:01 via Website

swa00

@Lukas

.. ich würde gerne helfen , aber Android /Xamarin /C# bin ich nicht mächtig.

Bei pure Java hätte ich für dich mehrere Lösungen direkt parat gehabt.

Ich bin raus ...

lg
Stefan

Kein Problem vielleicht findet ja wer anderes dazu etwas.

LG

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

29.08.2016, 11:18:47 via App

Du musst dein php Script auch auf Post umstellen.

OT:
Kleiner Tippe zum php Script, du kannst/solltest es nicht so verwenden, das bloße übergeben von Parametern ist tödlich, dein trim() entfernt nur Leerzeichen am Anfang und Ende. Dein Script ist sqlinjection anfällig.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 11:27:38 via Website

Ludy

Du musst dein php Script auch auf Post umstellen.

OT:
Kleiner Tippe zum php Script, du kannst/solltest es nicht so verwenden, das bloße übergeben von Parametern ist tödlich, dein trim() entfernt nur Leerzeichen am Anfang und Ende. Dein Script ist sqlinjection anfällig.

Ok mit Post passiert leider auch nichts.
Und wegen dem Script? Wie könnte ich es sicherer gestalten? Meine PhP Kenntnisse sind sehr gering.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 11:31:36 via App

Zuerstmal brauchst du nen debug skript, welches dir einfach alle patameter mit echo ausgibt.
Da würde auch schon nen var_dump($_POST) reichen.
Dann schickst du aus deiner App an dieses test php und schaust dir das Ergebnis an, ob die Daten ankommen. Wenn ja kannst du am aktuellen skript weitermachen wenn nein verschickst du Post mit deinem request falsch.

Zum Thema Sql Sicherheit: schau dir mal php pdo an, ist schön objektorientiert und man kann damit prima solchen injektions aus dem weg gehen wenn man es passend benutzt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Ludy

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 13:05:04 via Website

Pascal P.

Zuerstmal brauchst du nen debug skript, welches dir einfach alle patameter mit echo ausgibt.
Da würde auch schon nen var_dump($_POST) reichen.
Dann schickst du aus deiner App an dieses test php und schaust dir das Ergebnis an, ob die Daten ankommen. Wenn ja kannst du am aktuellen skript weitermachen wenn nein verschickst du Post mit deinem request falsch.

So hab den Code nun geändert und anscheinend funktioniert wenigstens der Code jetzt:

Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("Picture", Convert.ToBase64String(picData));
parameters.Add("Title", title.Text);
parameters.Add("Description", description.Text);
parameters.Add("Location", location.Text);
parameters.Add("FirstTag", tag1.Text);
parameters.Add("SecondTag", tag2.Text);
parameters.Add("CreationDate", datum);
parameters.Add("CreationName", "LukasReiner");
parameters.Add("CreationNameID", "1");
parameters.Add("ThumbUps", "0");
parameters.Add("ThumbDowns", "0");
parameters.Add("Requests", "0");
FormUrlEncodedContent formContent = new FormUrlEncodedContent(parameters);
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsync(urlAdress, formContent);
Toast.MakeText(this, response.ToString(), ToastLength.Long).Show();

response was ich als Toast ausgebe gibt jetzt das hier aus:
Wie man darunter sieht der StatusCode 200 sagt dass der Request erfolgreich war.
Das einzige Problem jetzt nurnoch dass aber in der Datenbank nichts angekommen ist.
image

Antworten
swa00
  • Forum-Beiträge: 3.704

29.08.2016, 13:12:01 via Website

@Pascal

er schickt auf Seite 1 unten ein Json - sehe das aber nirgendwo im PHP .....

var postdataJson = JsonConvert.SerializeObject(new { P

— geändert am 29.08.2016, 13:25:59

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 13:31:24 via Website

swa00

@Pascal

er schickt auf Seite 1 unten ein Json - sehe das aber nirgendwo im PHP .....

var postdataJson = JsonConvert.SerializeObject(new { P

Schicke inzwischen kein Json mehr. Anstatt Json schicke ich es nun einfach als string:

parameters.Add("Picture", Convert.ToBase64String(picData));

Wie aus dieser Seite entnommen:
https://monkeyweekend.wordpress.com/2014/10/23/how-to-send-text-json-or-files-using-httpclient-postasync/

HttpFormUrlEncodedContent

Send a list of key-value pairs, better known as x-www-form-urlencoded:

Dictionary<string, string> pairs = new Dictionary<string,string>();
pairs.Add("Nameob");
pairs.Add("Age8");
pairs.Add("Genderale");
HttpFormUrlEncodedContent formContent =
    new HttpFormUrlEncodedContent(pairs);

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsync(uri, formContent);

This sends a POST request like this:

POST / HTTP/1.1
Accept-Encoding: gzip, deflate
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
Host: kiewic.com
Connection: Keep-Alive
Cache-Control: no-cache

Name=Bob&Age=18&Gender=Male

— geändert am 29.08.2016, 13:33:24

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 13:33:26 via App

Da was du in dem Tost anzeigst sind nur die Headers.
Das heisst nicht dass die Post daten passend ankommen.
Wie sieht denn der response body aus

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 13:39:38 via Website

Pascal P.

Da was du in dem Tost anzeigst sind nur die Headers.
Das heisst nicht dass die Post daten passend ankommen.
Wie sieht denn der response body aus

Wie könnte ich den am besten anzeigen lassen? Hab sowas noch nie gemacht :o

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 13:45:46 via Website

Irgendwie musst du doch die bekommenen Daten doch auch auswerten...
Beispielsweise so:
string res = response.Content.ReadAsStringAsync ().Result;

und dann nen toast von dem string

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 13:52:07 via Website

Wollte gerade schreiben :)

            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            Toast.MakeText(this, responseBody.ToString(), ToastLength.Long).Show();

Sehe nicht den ganzen Autput nur den Anfang weils zuviel ist für den Toast aber es beginnt so:
image

Da sieht man dass 12 Arrays sind was passen würde. Startend mit "Picture" das ein string mit 12000 Zeichen ist.
Das alles lässt doch darauf schließen dass die Daten korrekt sind?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 13:54:57 via Website

Jupp sieht wohl so aus, d.h. damit kannst du jetzt weiterarbeiten.
Ich würde dir aber empfehlen, das PHP Skript durch einen Desktopclient etc. mit Testdaten zu beliefern, damit du einfacher debuggen und das skript anpassen kannst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 14:00:01 via Website

Ok ich probiers, aber der Fehler müsste bzw kann jetzt nurmehr in der PHP file liegen oder?

EDIT Habe ein Data.txt output file mit php erstellen lassen. Das ist der output von der php file. Also alles passt:

Picture = /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCACvAK8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAVrRw8Y/hXjxhcspeHGc0s447p+HPBtWlXhxPi8syuhWz/OMNiXWdTIsjr1cZTo4XFZw3UpV6dPLswxmPjVqYeCo0niZ1P5m/jZ8BPHH7PWsaP4S+J154bsfHe==...........................
Title = asdfasdf
Description = asdfasdfasdf
Location = Global
FirstTag = asdf
SecondTag = asdfasdfasdf
CreationDate = 8/29/2016 11:27:26 AM
CreationName = LukasReiner
CreationNameID = 1
ThumbUps = 0
ThumbDowns = 0
Requests = 0

— geändert am 29.08.2016, 14:03:48

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 14:16:39 via Website

SO JETZT ENDLICH KOMMEN WIR NÄHER.

Ich hab jetzt in der PHP file die Zeile:

$mPicture = base64_decode($mPicture);

zu

  $mPicture = base64_encode($mPicture);

geändert und nun sind die Daten hier. Alle!

Das einzige was ich jetzt noch nicht begreife ist das feld "Pictures" in phpMyAdmin ist ein varbinary(255).
Also wenn ich jetzt im PHP Code diese Zeile *$mPicture = base64_encode($mPicture);* hinzufüge wird diese Zeichenfolge in Pictures gespeichert:

4c7a6c714c7a5242515646546131704b556d6442516b46525155464255554643515546454c7a4a33516b52425155564351562e2e2e

Lasse ich encode komplett weg in der PHP File wird diese Zeichenfolge gespeichert:

2f396a2f34414151536b5a4a5267414241514141415141424141442f327742444141454241514542415145424151454241512e2e2e

Welches von den zwei ist denn jetzt das Bild? Oder welches ist richtig? Wie kann ich das herausfinden?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 14:20:36 via Website

Jupp jetzt ist nur noch die Serverseitige Verarbeitung bei der es wohl hängt.
Aber:
Wenn man so eine API (was es im endeffekt ist) Schön und sauber machen will, muss das so aussehen ;):
https://www.nextpit.de/forum/721529/tutorial-fuer-fortgeschrittene-android-an-eine-php-rest-api-anbinden

Zum anderen: Wenn du die binärdaten in der db speichern willst, musst du das base64 natürlich decoden also base64_decode. Und da das dann binär ist, lässt es sich schlecht im Browser oder sonstwo als text anzeigen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 14:35:16 via Website

Ok wenn ich es decode funktioniert es nichtmehr.

Kann es eventuell daran liegen dass es ein varbinary(255) ist? und das zuwenig ist?
Oder fehlt hier noch irgendwie sowas in der Art?:

SET picture = CONVERT(VARBINARY(255), $mPicture)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 14:47:04 via Website

eigntlich nicht...
Müsste so gehen, aber du könntest deine DB entweder auf BLOB umstellen oder auf varbinary(max)
BLOB ist auf jeden fall nicht so schnell voll zu bekommen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 14:52:33 via Website

Hab mal den Error ausgeben lassen der passiert wenn ich den decode speichern will:
image

Müsste so gehen, aber du könntest deine DB entweder auf BLOB umstellen oder auf varbinary(max)

Ok kann ich das bei 1und1 überhaupt machen? Habe momentan noch 1und1. Dort steht mir eigentlich nur die phpMyAdmin Oberfläche zur Verfügung.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 14:54:24 via Website

Das hat mi 1&1 garnichts zurun, die phpMyAdmin oberfläche führt im hintergrund auch nur sql statements aus so wie du das machst..
Aber anscheinend stimmt da was mit der formatierung noch nicht so.
Am besten du googlest das mal wie man es richtig macht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 15:25:25 via Website

So jetzt hab ichs so gemacht
ich habe varbinary zu LARGETEXT ascii_general_cl und habe nun base64_decode zu base64_encode geändert.
Dadurch kann ich alles als ascii text speichern da meine Bilder sowiso selten über die 64 kilobyte steigen.

Das einzige was ich jetzt generell noch wissen möchte ist gibt es eine möglichkeit hier:
image

die gesamte Zeile anzeigen zu lassen? Wird hier ja ab den ... nicht mehr angezeigt.

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

29.08.2016, 15:31:51 via App

Meist liegt das an der Codierung, manche sqls arbeiten nicht auf utf-8 Basis. Oder dein php Script ist nicht utf-8 konform.
Wenn du das php Script schreibst achte drauf das es als utf-8 ohne bom gespeichert wird und die Codierung Unix entspricht, damit hast du weniger Probleme.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 15:34:56 via Website

Ludy

Meist liegt das an der Codierung, manche sqls arbeiten nicht auf utf-8 Basis. Oder dein php Script ist nicht utf-8 konform.
Wenn du das php Script schreibst achte drauf das es als utf-8 ohne bom gespeichert wird und die Codierung Unix entspricht, damit hast du weniger Probleme.

Oha das habe ich noch gar nicht bedacht?
Damit könnte es eventuell auch mit decode funktionieren.
Hast du eventuell ein Beispiel wie ich das machen kann?

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 16:08:01 via Website

Ich verstehe es einfach nicht ich hab es GENAU so wie der in dem Video:

Er hat auch genau die Lines im PHP File:

$mPicture = base64_decode($mPicture2);

und dann hat er diese line noch(ich hab sie halt noch auf meinen Code angepasst):

$query = "UPDATE groups SET picture = CONVERT(VARBINARY(60000), '".$mPicture."') WHERE title LIKE '".$mtitle."' AND description LIKE '".$mDescription."';";

Auch bei MySQL ist es auf varbinary(60000)eingestellt.

Und wenn ich es ausführe egal was ich ändere oder mache kommt immer der selbe Error:

MySQL #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for riight syntax to use near 'VARBINARY(60000)  at line 1

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 16:38:27 via Website

Schau dir mal die mysql doku an:
https://www.techonthenet.com/mysql/functions/convert.php
da steht:

CONVERT( value, type )

Also erst den Wert und nach dem Komma den typ angeben

— geändert am 29.08.2016, 16:38:41

LG Pascal //It's not a bug, it's a feature. :) ;)

Ludy

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

29.08.2016, 16:54:46 via Website

Ok dass stimmt.
Aber immernoch selbe Error und ich weis schon ca warum.
In der Error Meldung hats mir so komische Symbole angezeigt deswegen wurde ich skeptisch.
In meinem Code gehe ich ja her und mach als aller erstes einen decode.
Jetzt bin ich mal hergegangen und hab das was ich von der App mitschicke also die 12000 Zeichen online decodiert und mir den Output angeschaut. Der sah so aus sogar dieselben Zeichen drin wie bei der Errormeldung:
image

Wenn ich die Daten aber statt decode als erstes encode dann sieht der output so aus:

LzlqLzRBQVFTa1pKUmdBQkFRQUFBUUFCQUFELzJ3QkRBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJB
UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFR
RUJBUUgvMndCREFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFF
QkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSC93QUFSQ0FDdkFLOERBU0lB

Deswegen bin ich mir ziehmlich sicher dass ich es vorerst mal nicht decoden sollte.
Wenn Ich den Code jetzt ausführe kommt zwar derselbe Error aber alle komischen Zeichen sind weg und die Querie wird normal angezeigt wenigstens im Error.

image

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 17:46:42 via App

Ja denn bekommst ein error wenn du die Daten verwenden willst. Warim speicherst du nicht direkt den Base64 string in der DB und dekodierst ihn zu einem Bild wenn du das brauchst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 70

30.08.2016, 08:36:19 via Website

Pascal P.

Ja denn bekommst ein error wenn du die Daten verwenden willst. Warim speicherst du nicht direkt den Base64 string in der DB und dekodierst ihn zu einem Bild wenn du das brauchst.

Dass habe ich jetzt auch gemacht und es funktioniert anscheinend. Nur was mich stört oder verwirrt ist dass hier
image
nicht alles angezeigt wird sondern mit den Punkten abgetrennt wird.
Gespeichert ist doch alles oder? Oder wird hier wirklich ab hier abgetrennt?

Antworten
swa00
  • Forum-Beiträge: 3.704

30.08.2016, 08:46:52 via Website

.. der arme Pascal :-)

Lukas , die Einträge werden nur "abgeschnitten" dargestellt (Ellipsize).
Würden sie komplett dargestellt werden, dann müssest du ggf. 64K scrollen - das ist unsinnig ..

Wie schon Pascal geschrieben hat : wenn deine ausgelesenen Daten gültig sind und kein Error,
dann ist doch alles gut :-)

— geändert am 30.08.2016, 10:35:02

Liebe Grüße - Stefan
[ App - Entwicklung ]

Ludy

Antworten