Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

24.04.2013, 17:11

PHP / MySql InsertInto erzeugt leere Zeilen

Hallo Community,

schon wieder ein komischer (?) Fehler von PHP:

Ich will in eine bestimmte Tabelle einen Datensatz einfügen, da die Tabelle sehr lang ist, will ich beim einfügen nur die Spalten nennen, für die ich auch einen Inhalt habe.
Die Tabelle sieht vereinfacht so aus: Spalte1 | Spalte2 | ... | Spalte9
Mein PHP-Code sieht so aus:

Quellcode

1
2
3
$sql = "INSERT INTO `Tabele1`(`Spalte2`, `Spalte4`, `Spalte9`) VALUES ('$Wert1','$Wert2','$Wert3')";
 
$eintragen = mysql_query($sql);


Komischerweise wird bei $eintragen immer true zurückgegeben, jedoch wenn ich die Tabelle in PhpMyAdmin betrachte, sehe ich nur eine neue leere Zeile. Woran könnte das liegen? Wenn ich die selbe Sql-Abfrage im PHPmyAdmin ausführen lasse (statt mit Variablen natürlich mit Testwerten) funktioniert es jedoch.

Danke schon mal für eure Hilfe.

Gruß,
MitgliedXYZ

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

2

24.04.2013, 17:29

Füg mal vor mysql_query ein var_dump($sql); ein und guck dir die Ausgabe an.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

3

24.04.2013, 19:10

OK, an der SQL-Abfrage hat es nicht gelegen.

Die Variablen konnten nicht übernommen werden, da ich diese so abfragen wollte: $Variable1 = $_POST["Wert1"];
Da die Daten an die URL angehängt waren kann es aber nur so funktionieren: $Variable1 = $HTTP_GET_VARS["Wert1"];

Danke für die Hilfe.

4

24.04.2013, 19:18

Dann doch bitte $_GET.
Und achte in diesem Fall besonders auf SQL Injections
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

5

24.04.2013, 19:20

HTTP_GET_VARS ist deprecated. Benutz am besten $_GET und mysql_real_escape_string!

Edit: zu spät

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

6

24.04.2013, 19:28

Dann doch bitte $_GET.

Ja, ist kürzer, aber es funktioniert ja beides.

@patrick246
Abgelehnt, oder veraltet? Also bei mir funktioniert es trotzdem.

Und achte in diesem Fall besonders auf SQL Injections

Ich dachte, dass es evtl. ein Problem sein könnte, dass Nutzer Variablenwerte abändern, aber das ist ja noch gefährlicher...
Jedoch würde es doch auch reichen, wenn ich einfach alle Variablen auf SQL Schlüsselwörter und Sonderzeichen überprüfe, und gegebenenfalls die Daten nicht annehme / keine Aktion ausführe (Meldung ausgebe)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

24.04.2013, 19:43

Nein. Vor allem stellt sich die Frage WARUM Du das selbst prüfen wollen würdest, wenn es dafür schon fertige Funktionen gibt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

8

24.04.2013, 19:43

Abgelehnt, oder veraltet? Also bei mir funktioniert es trotzdem.

Sobald es ans Web geht scheint es keine Sau mehr zu interessieren, ob man etwas machen sollte solang es funktioniert... traurig.

Jedoch würde es doch auch reichen, wenn ich einfach alle Variablen auf SQL Schlüsselwörter und Sonderzeichen überprüfe, und gegebenenfalls die Daten nicht annehme / keine Aktion ausführe (Meldung ausgebe)


Oder halt einfach mysql_real_escape_string benutzen wie von patrick vorgeschlagen :rolleyes:

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

9

24.04.2013, 19:45

Ich würde dir PDO mit Prepared Statements empfehlen. Dann bist du auf der sicheren Seite. Wenn du die Daten ablehnen würdest, kann niemand einen Apostroph verwenden.
Übrigens: deprecated im Sinne von veraltet.

C-/C++-Quelltext

1
2
3
4
5
6
char* getString()
{
  char str[100];
  strcpy(str, "Hello World");
  return str;
}

Also bei mir funktionierts...

Das Problem mit $HTTP_GET_VARS ist, dass es nicht superglobal wie $_GET ist und deprecated ist, es wird also demnächst entfernt. Wenn du gleich mit $_GET programmierst musst du nicht alles in $_GET umändern. Benutze beim entwickeln unbedingt ein Error-Reporting von E_ALL oder E_STRICT, besser E_STRICT!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »patrick246« (24.04.2013, 19:54) aus folgendem Grund: Mehr Gründe hinzugefügt


Werbeanzeige