Entwickler-Ecke
Programmiersprachen (Server) - Php soll Datenbank koordinieren
Csharp-programmierer - Do 15.09.16 20:10
Titel: Php soll Datenbank koordinieren
Hallo Forum,
ich habe bis jetzt einen PHP Script, der so aussieht:
PHP-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| <?php
$Server = "localhost"; $Username = "web26282455"; $Password = "Passwortderdatenbank"; $Database = "usr_web26282455_1";
$con = mysqli_connect($Server, $Username,$Password,$Database); if($con) { $sqlquery = "SELECT * FROM DB_Accessdata"; $result = mysqli_query($sqlquery); while($row = myssqli_fetch_ssoc($result)) { echo $row['row name']; } } ?> |
Wenn ich diesen Script mit C# über WebRequest anspreche, dann kommt diese Meldung:
Letzendlich möchte ich erstmal alle Daten aus der Datenbank rauspulen. Wo liegt in diesem Script der Fehler?
FinnO - Do 15.09.16 20:21
Genau dort, wo die Fehlermeldung besagt, dass ein Fehler vorliegt. Die PHP-Funktion
mysqli_query() braucht (im prozeduralen Stil) zwei Parameter, wie
hier [
http://php.net/manual/de/mysqli.query.php] zu entnehmen. Der erste Parameter muss deine Datenbankverbindung sein.
Die zweite Fehlermeldung (ebenfalls deinem Screenshot zu entnehmen) weist dich darauf hin, dass es die Funktion
mysql_fetch_ssoc() nicht gibt. Das ist korrekt, sie
lautet korrekt [
http://php.net/manual/de/mysqli-result.fetch-assoc.php]:
mysqli_fetch_assoc() - konsequent, schließlich möchtest du ja scheinbar auf ein assoziatives Array (In C# wäre das am ehesten ein
Dictionary<string, object>) zugreifen.
BTW:
- PHP-Skripte sollte man grundsätzlich nicht mit ?> abschließen.
- Wenn du mit deiner C#-App kommunizieren willst, solltest du eher JSON als Ausgabeformat wählen, nicht Plain-Text.
Gruß
Csharp-programmierer - Do 15.09.16 20:34
PHP-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| <?php $Server = "localhost"; $Username = "web26282455"; $Password = "Passwortderdatenbank"; $Database = "usr_web26282455_1";
$con = mysqli_connect($Server, $Username,$Password,$Database); if($con) { $sqlquery = "SELECT * FROM DB_Accessdata"; mixed mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) while($row = mysqli_fetch_assoc($result)) { echo $row['row name']; } } |
Da kommt jetzt ein Fehler. Ich weiß aber nicht, wie ich die Variable mysqli$link befülle.
Palladin007 - Do 15.09.16 21:36
Im ersten Link von Finn= zu mysqli_query ist ein komplettes Beispiel zum erstellen einer Verbindung, absenden eines SQL-Statements und freigeben der Daten sowie der Verbindung im objektorientierten und prozeduralem Stil.
Deine Frage wird dort beantwortet.
Csharp-programmierer - So 18.09.16 16:56
Also ich habe es jetzt geschafft, dass in der DB ein Item als PrimaryKey definiert ist, und sich selbstständig erhöht. Desweiteren wurden nun die ersten Daten in die DB geschrieben. Aber wie kann ich nun der PHP Datei die Daten von der C# Anwendung mitgeben?
Csharp-programmierer - So 18.09.16 19:39
Ah okay. Es gibt aber ein Problem. Die Daten der C# Anwendung werden nicht in die DB geschrieben.
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:
| <?php $servername = "localhost"; $username = "web26282455"; $password = "Passwort"; $dbname = "usr_web26282455_1";
$conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
$sql = "INSERT INTO NewAccessdata(Name, Vorname, Geburtsdatum) VALUES ('$_POST['Name']', '$_POST['Vorname']', '$_POST['Geburtsdatum']')";
if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error HERE: " . $sql . "<br>" . $conn->error; }
$conn->close(); ?> |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| private void button1_Click(object sender, EventArgs e) { using (WebClient client = new WebClient()) {
byte[] response = client.UploadValues("http://www.server.de/InsertData.php", new NameValueCollection() { { "Vorname", this.textBox1.Text }, { "Nachname", this.textBox2.Text }, { "Geburtsdatum", this.maskedTextBox1.Text } });
string result = System.Text.Encoding.UTF8.GetString(response); } } |
In der C# Amwemdung kommt zwar kein Fehler, aber es werden keine Daten in die DB geschrieben. Wo ist nun noch der Fehler?
Moderiert von Narses: Realen Hostnamen anonymisiert. :?
Palladin007 - Mo 19.09.16 02:10
Lass dir doch mal per
var_dump [
http://php.net/manual/de/function.var-dump.php] den Inhalt der POST-Variable ausgeben.
Dann siehst Du was dein C#-Programm dir wie schickt und eventuell klärt sich das Problem da dann schon auf.
Und Du solltest auch nicht direkt die Strings in die Datenbank schreiben, das wäre nämlich ein Parade-Beispiel für SQL-Injection.
Es wäre so einfach, dein Programm zu decompilen oder mit entsprechenden Tools nachzuvollziehen wo es die Daten hin schickt und dann einfach einen Wert zur selben Adresse zu schicken, der dir deine kompplette Datenbank löscht :P
Besser sind da Insert-Statements mit entsprechenden Parametern:
PHP Prepared Statements [
http://www.w3schools.com/php/php_mysql_prepared_statements.asp]
Wenn bei dem Insert Statement ein Fehler auf tritt, müsstest Du das auch sehen können, Du schreibst es ja per echo.
Aber ich weiß gerade nicht, wie man das abgreift, das müsstest Du aber wissen, schließlich hast Du das auch mit der Fehlermeldung im Eingangs-Post gemacht ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!