$_POST-Variablen bei mysql_query

Schon richtig, nur ging es hier ja konkret darum etwas zu loeschen.
Weiterhin find ich Dein erstes Beispiel allein aus aesthetischen Gruenden besser als die anderen beiden. ;)
 
Danke.

Die Überswchrift des Formus ist ja "$_POST Variablen bei mysql_query"
und die Frage war: "Darf man $_POST Variablen bei mysql_query Anweisungen benutzen?"

Ich sehe daran nicht, dass es konkret ums löschen geht.

Gruß Andrej
 
Aber es wird im Grunde im ersten Post deutlich. Deine Beispiele sind ja in sich korrekt. Jedoch ist es fuer einen Einsteiger auf jeden Fall erstmal leichter wenn man konkrete Beispiele zu seinem aktuellen Problem postet. Aber lassen wir das. Wir wollen uns ja nicht streiten (warum auch, wo wir ja im Grunde beide Recht haben), das wuerde hier niemandem helfen.
 
Dennis hat schon recht. Das ist vielleicht etwas verwirrend ichh kann euch ja mal alles erzählen. Also ich bin dabei einen kleinen admin berreich für die News auf meiner Homepage zu machen. Nur das problem ist das der Fehler immer in den Reihen wo $_POST steht ist ich habe 4 funktionen
also man gibt die ID in ein textfeld ein.
Und man kann man wählen zwischen ändern, löschen, alle löschen, und hinzufügen
(bei den fettgedruckten ist die ID nötig.)
 
PHP:
<?php
			$host="localhost";
			$username="******";
			$passwort="";
			$dbname="********";
	
		$connect = mysql_connect($host, $username, $passwort);
		include("/Connections/TEST.php");
		mysql_select_db($db_name);

		
		$res =	   "SELECT `ID` 
						
						FROM `News` 
						
						ORDER BY `ID` DESC
						";
		
		$del = "DELETE FROM
		 `News` WHERE `id`='".$_POST['id']."'"
		 ;
		
		$delall = 	"
						DELETE	`NEWS`
							 FROM	 `NEWS`
							 ";
							 
		$change = "		UPDATE
    					`News`
					SET
    					WHERE
    					`ID` = '"$_POST['ID']'"";
	
		$add = "	INSERT INTO `News`
    			`News`
					VALUES
					    '"$_POST['ID']'"";
							 
	//if bedingungen 
	if($_POST['delete'])
	{
	mysql_query($del, $connect)  OR die(mysql_error())
		echo "Der Datensatz mit der ID <strong>$_POST['ID']</strong> wurde gelöscht."
	;}
	
	if($_POST['deleteall'])
	{
		mysql_query($delall, $connect)  OR die(mysql_error())
	echo "Alle Datensätze wurden gelöscht!"
	;}
	if($_POST['change'])
	{
	mysql_query($change, $connect)  OR die(mysql_error())
	echo "Der Datensatz mit der ID $_POST['ID'] wurde geändert."
	;}
	if($_POST['add'])
	{
		mysql_query($add, $connect)  OR die(mysql_error())
	echo "Der Datensatz wurde hizugefügt."

	?>
Der Fehler wird in der fettgedruckten Line angezeigt.
 
wie wäre es denn, in deinen change query nach SET anzugeben, welche spalte er mit welchem wert ändern soll?!

Code:
$change = "UPDATE news SET spalte = 'inhalt'  WHERE id = '"$_POST['ID']'"";
 
Huhu,

nur kurzer Zusatz:

Da sich das ganze um einen String handelt und man durch die anfänglichen " schon die Anführungszeichen hat, reicht ein simples $_POST[id] ohne sonderliche Anführungszeichen. Also:

PHP:
<?php

$string = "DELETE FROM tabelle WHERE id = $_POST[id]";

?>

schöner Code ist das natürlich nicht, weswegen ich empfehle mal in die Funktionen printf bzw. sprintf reinzuschauen, die sowas viel angenehmer machen. Da kann man dann auch gleich das obligatorische mysql_real_escape_string mit unterbringen :-)
 
Also ich komme gradewegs aus dem PHP-Sicherheits-Thread hierher und dort hab' ich gelesen, man dürfe Fragesteller nachdem man deren Frage beantwortet hat auch gerne mal auf Sicherheitslücken in ihrem Code hinweisen, selbst wenn dies etwas off-topic ist.

Nachdem die grundsätzliche Frage ja nun beantwortet ist, möchte deshalb nicht unerwähnt lassen, dass direktes Einfügen von $_POST-Variablen in SQL-Statements generell als unsicher bezeichnet werden muss.
Bevor man also weiter diskutiert, ob die Verkettung eleganter ist als das direkte Einbetten, würde ich mal folgende Version zum Besten geben:

PHP:
$sql = "
  DELETE FROM `tabelle` WHERE `id` = '".mysql_real_escape_string($_POST['id'])."'
";

So kann auch nix passieren, wenn der böse User zum Beispiel 0' OR `id` LIKE '%' ins Formular eintippt...

PS/Nachtrag:
Uuups, habe grade gelesen, dass mein Vor-Poster Sir Robin dies im Prinzip schon geschrieben hat. Erst lesen, dann posten...
 
Zuletzt bearbeitet:
PHP:
$sql = "
  DELETE FROM `tabelle` WHERE `id` = '".mysql_real_escape_string($_POST['id'])."'
";

So kann auch nix passieren, wenn der böse User zum Beispiel 0' OR `id` LIKE '%' ins Formular eintippt...

PS/Nachtrag:
Uuups, habe grade gelesen, dass mein Vor-Poster Sir Robin dies im Prinzip schon geschrieben hat. Erst lesen, dann posten...

Danke schön. Ich wollte den "adminbereich" auch noch passwort schützen. Das soll verhindern das der böse User überhaupt was eintippt. ;)
 
Zurück