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:
1

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

user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Wo liegt in diesem Script der Fehler?


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<stringobject>) zugreifen.

BTW:


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?


Palladin007 - So 18.09.16 17:03

http://stackoverflow.com/questions/4088625/net-simplest-way-to-send-post-with-data-and-read-response

Den Link hab ich dir aber auch im anderen Thread schon geschrieben

In der PHP-Datei musst Du dann die POST-Variable abgreifen.


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";

// Create connection
$conn = new mysqli($servername$username$password$dbname);
// Check connection
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 user profile iconNarses: 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 ;)