Du bist nicht eingeloggt! Möglicherweise kannst du deswegen nicht alles sehen.
  (Noch kein mods.de-Account? / Passwort vergessen?)
Zur Übersichtsseite
Hallo anonymer User.
Bitte logge dich ein
oder registriere dich!
 Moderiert von: Che Guevara


 Thema: MySQL Update
erste ungelesene Seite | letzter Beitrag 
Sec_Ret

UT Malcom
Hallo Zusammen

ich hab ne MySQL-DB, in die ich mittels Website Daten hinzufüge/bearbeite/lösche.

Nun hab ich eine Seite die so aussieht:

Alter Standort: *dropdown mit auslesen von aktuellen Standorten*
Neuer Standort: *Textbox*

-> Alter Standort-Name überschreiben mit neuem Standort-Namen.

Nun hab ich das Problem:
Unknown column 'testname' in 'field list'

SQL-Code:
$sqlupdate =
"UPDATE `standort`
SET `Standort` = " .$updatenewstandort. "
WHERE `STANDORT_ID` = " .$updatestandort1[0]. "
";

echo $updatenewstandort und
echo $updatestandort1[0] geben korrekte Werte aus.

Achtung: Wenn ich "Test" reinschreibe, erhalte ich das Problem. Wenn ich aber Zahlen reinschreibe "123", funktionierts.

Wieso nimmt er mir die Textbox als neue column statt als Wert?

Ich seh da irgendwie keinen Zusammenhang .. traurig
Bei einem anderen File funktioniert das so ganz gut..

PS: Tabelle heisst "standort", column heisst "Standort" (Typ: varchar) und IDcolumn heisst "STANDORT_ID".

Wäre sehr froh um Inputs!

Vielen Dank
Sec_Ret

/e: PS: Wenn ich den SQL-Code direkt in der DB einfüge, funktionierts auch mit Text.
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Sec_Ret am 11.08.2016 11:22]
11.08.2016 11:20:45  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Sec_Ret

UT Malcom
ich habs rausgefunden:

$sqlupdate =
"UPDATE `standort`
SET `Standort` = '" .$updatenewstandort. "'
WHERE `standort`.`Standort_ID` = '" .$updatestandort1[0]. "' ";

Die Lösung liegt in den ' ' bei '".$updatenewstandort."'.

Kann mir das jemand kurz erklären, wieso das bei dem anderen funktioniert (ohne ' ') und bei dem nicht?
Liegts dran, dass das $updatenewstandort ein String ist?
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Sec_Ret am 11.08.2016 13:26]
11.08.2016 13:25:17  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
derSenner

AUP derSenner 08.04.2020
Weil man so keine SQL Queries macht. Das ist ganz übel.

Stichwort:
http://php.net/manual/de/ref.pdo-mysql.php
http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers
http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Running_Statements_With_Parameters

Prinzipiell hast du aber die Variable direkt in den $sqlupdate-String mittels Konkatenation eingebunden. PHP setzt hier also 1:1 den Inhalt der Variable ein. Wenn du dort dann Anführungszeichen, Leerzeichen oder ähnliches hast, gibt's ein Problem. Mit extra Anführungszeichen umgehst du das Problem.
Aber nochmal: Niemals Queries so machen. Das ist super-kotzig.
[Dieser Beitrag wurde 7 mal editiert; zum letzten Mal von derSenner am 11.08.2016 13:30]
11.08.2016 13:27:26  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Sec_Ret

UT Malcom
 
Zitat von derSenner
Das ist ganz übel.



Wieso denn? Das hab ich so des öfteren im Internet gefunden ._. Hat man das früher mal so gemacht und heute nicht mehr, oder ist es einfach "Billig-Code" und nicht best practice?


Sorry schonmal falls das ne dumme Frage ist, ich hatte bisher so gut wie nix mit SQL/PHP zu tun, das ist mein kleines Starterprojekt. Ich such die Infos im Internet zusammen und versuch das zu verstehen & umzusetzen.

Danke für die Erklärung. Und natürlich die Links, ich werd mich da mal reinlesen.
11.08.2016 14:16:03  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
derSenner

AUP derSenner 08.04.2020
Ich nehme mal an, dass du $sqlupdate nimmst, und mittels mysql_query einfach ausführst. Natürlich funktioniert das, ist aber sehr unsicher, veraltet und nervig bei Änderungen im Nachhinein.
Da du noch dazu direkt Variablen aus Formularen (vermutlich) direkt in den Query einfügst, kann ich im Prinzip jeden gewünschten SQL-Befehl auf deiner Datenbank ausführen. Alles löschen, User verändern, Daten auslesen, was mir gerade einfällt.
Selbst wenn das ganze nur auf einem abgeschlossenen System läuft, gibt es keinen Grund, die SQL-Abfragen nicht trotzdem abzusichern und ordentlich zu gestalten.

http://php.net/manual/de/security.database.sql-injection.php

Um das zu verhindern, gibt es bei PHP mittels PDO oder MySQLi zwei Konstrukte, die Datenbankabfragen brauchbar gestalten sollen.
Ich persönlich empfehle PDO_MYSQL, MySQLi ist auch irgendwie Kacke.

Generell sollte man bei PHP-Tutorials im Internet immer etwas wachsam sein. Da postet halt jeder Hirs seine Codestücke, behauptet das wäre nice so, hat davon aber eigentlich keine Ahnung. Im Zweifel immer zuerst php.net besuchen, und Funktionen abchecken.
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von derSenner am 11.08.2016 14:44]
11.08.2016 14:42:24  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Sec_Ret

UT Malcom
 
Zitat von derSenner

Ich nehme mal an, dass du $sqlupdate nimmst, und mittels mysql_query einfach ausführst.


Jep.

 
Zitat von derSenner

Da du noch dazu direkt Variablen aus Formularen (vermutlich) direkt in den Query einfügst,..


Jep

Grob beschrieben:
formular textfeld id 'eintrag'
$eintrag = $_POST['eintrag'];
$sqlinsert = "insert into `tabelle` values ($eintrag)";
mysql_query($sqlinsert);


 
Zitat von derSenner

kann ich im Prinzip jeden gewünschten SQL-Befehl auf deiner Datenbank ausführen.



Logikfrage:

Der Grossteil der Abfrage ist ja vordefinierter Text, also

"SELECT * FROM `tabelle` WHERE ID = *variable*"

Wenn du nun Code einfügen würdest, gibts doch einen ungültigen SQL Code, oder? Oder würde das funktionieren:

Du füllst in das Formular (also *variable* = "1 AND DETELE * FROM `tabelle`)

ergibt das dann

"SELECT * FROM `tabelle` WHERE ID = 1 AND DELETE * FROM `tabelle`"

?

Zu deinem Link: Bei Text-Einträgen hab ich .mysql_real_escape_string( $variable ). vor dem Eintrag, was vor SQL-injection (hab deinen Link noch nicht durchgelesen) schützen soll - ist das auch veralteter nonsens?.


/e: Vielen Dank für deine Erklärungen. Langsam versteh ich, worauf du hinaus willst.
[Dieser Beitrag wurde 3 mal editiert; zum letzten Mal von Sec_Ret am 11.08.2016 15:21]
11.08.2016 15:18:12  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
derSenner

AUP derSenner 08.04.2020
Prinzipiell funktioniert das ungefähr so, ja. Ich kann ja beeinflussen, was dein php-Skript über POST oder GET bekommt, besonders bei einem Formular.

mysql_real_escape_string geht in die richtige Richtung. Aber wie gesagt, immer auf php.net checken:
http://php.net/manual/en/function.mysql-real-escape-string.php
 
Warning
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
mysqli_real_escape_string()
PDO::quote()


Mit PDO_MYSQL kannst du dir diese ganzen überfälligen, uralten Funktionen wie eben mysql_real_escape_string sparen.

Stichwort: Prepared Statements.

Probier einfach mal PDO_MYSQL testweise aus. Du wirst sehen, dass man damit einfach angenehmer und vor allen Dingen sicherer arbeiten kann, als sich mit Query-Strings herumzuschlagen . Außerdem wird man dabei vermehrt dazu gezwungen, sauberen Code zu schreiben (zumindest theoretisch).
[Dieser Beitrag wurde 5 mal editiert; zum letzten Mal von derSenner am 11.08.2016 15:26]
11.08.2016 15:21:08  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Sec_Ret

UT Malcom
Alles klar, jetzt versteh ich.
Ich werd mich die Tage mal durch deine Links lesen und das ausprobieren.

Danke sehr für all die Infos
11.08.2016 15:49:51  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
 Thema: MySQL Update


mods.de - Forum » Webdesign & Coding » 

Hop to:  

| tech | impressum