PHP MySQL Insert innerhalb einer If-Abfrage

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
565
Hallo,

ich hänge gerade an einem Problem fest und hoffe auf eure Hilfe.
Anbei mal ein Codeschnipsel:

schnipsel aus dem formular.tpl
PHP:
 <form method="post" action="?action=insert">

 <input type="text" name="interpret" value="interpret"><br>

 <input type="text" name="titel" value="titel"><br>

 <input type="submit" name="button" value=" OK ">

 </form>

entsprechende php funktion
PHP:
		} elseif ($action == "insert") {
			$interpret = $_POST['interpret'];
			$titel = $_POST['titel'];
			
			# debug
			echo "$POSTS <br />";
			echo "$titel <br />";
			echo "$interpret <br />";	
			

			if ( $db_link ) {
			    echo "Verbindung zu '".MYSQL_DATENBANK."' erfolgreich: <br />";
				$eintrag = mysql_query("INSERT INTO $POSTS (titel,interpret) VALUES ('$titel','$interpret')");
			} else {
			    die('keine Verbindung möglich: ' . mysql_error());
			}
			mysql_close($db_link );
			
			include PATH_TPL . "/tpl.insert.vm";
			
		}

jetzt natürlich die ausgabe:
PHP:
m_posts
titel
interpret
Verbindung zu 'test' erfolgreich:
Die Daten wurden eingetragen


so und nun zu meinem problem:
es landet nichts in der datenbank ... warum nicht? :-(
 
mach doch mal statt ein insert ein echo.

PHP:
 echo "INSERT INTO $POSTS (titel,interpret) VALUES ('$titel','$interpret')";
 
PHP:
m_posts
ich kann kein mysql insert
hans wurst
Verbindung zu 'test' erfolgreich:
INSERT INTO m_posts (titel,interpret) VALUES ('ich kann kein mysql insert','hans wurst')Die Daten wurden eingetragen

kam beim echo raus ... also für mich alles ok.

PHP:
mysql_error();
zeigte mir keine fehler an :-(
 
sieht jetzt wie folgt aus:
PHP:
if ( $db_link ) {
			    echo "Verbindung zu '".MYSQL_DATENBANK."' erfolgreich: <br />";
				#echo "INSERT INTO $POSTS (titel,interpret) VALUES ('$titel','$interpret')";
				$eintrag = mysql_query("INSERT INTO $POSTS ('titel','interpret') VALUES ('$titel','$interpret')");
				mysql_error();
			} else {
			    die('keine Verbindung möglich: ' . mysql_error());
			}
			mysql_close($db_link );

aber keine änderung :-(
 
ich hab schon lang nicht mehr ohne datenbankklasse gearbeitet. was ist wenn du die resource der db_verbindung hinten anhängst? so von wegen
PHP:
$eintrag = mysql_query("INSERT INTO $POSTS ('titel','interpret') VALUES ('$titel','$interpret')",$db_link);
 
Was man bei deinem Code nicht sieht: Wie wird die verbindung zur db aufgebaut? Selektierst du überhaupt die richtige datenbank?
 
gib die query mal in PHPMYADMIN oder sowas ein und schau, was für ne fehlermeldung kommt :)
 
phpmyadmin:
PHP:
1 Zeile(n) eingefügt.
ID der eingefügten Zeile: 1 ( die Abfrage dauerte 0.0002 sek. )
INSERT INTO m_posts( titel, interpret )
VALUES (
'ich kann kein mysql insert', 'hans wurst'
)

datenbank connection
PHP:
// Zum Aufbau der Verbindung zur Datenbank
define ( 'MYSQL_HOST',      'localhost' );
define ( 'MYSQL_BENUTZER',  'root' );
define ( 'MYSQL_KENNWORT',  '' );
define ( 'MYSQL_DATENBANK', 'test' );

$db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
Ergänzung ()

sorry für den doppelpost:

@bu1137: vielen dank für die idee.

ich habe den code nun abgeändert, da der select tatsächlich gefehlt hat.

PHP:
			if ( $db_link ) {
			    echo "Verbindung zu '".MYSQL_DATENBANK."' erfolgreich: <br />";
			    $db_sel = mysql_select_db( $DB ) or die("Auswahl der Datenbank .'$DB'. fehlgeschlagen");
				$eintrag = mysql_query("INSERT INTO $POSTS (titel,interpret) VALUES ('$titel','$interpret')");
				mysql_error();
			} else {
			    die('keine Verbindung möglich: ' . mysql_error());
			}
			mysql_close($db_link );
 
fry2k schrieb:
Sei bitte so nett und lies dir zumindest das zum thema sql injections durch, z.b. hier bei wiki: http://de.wikipedia.org/wiki/SQL-Injection

Du schmeißt POST Parameter direkt gegen die Datenbank...ein absolutes no-go.

nicht wirklich. steht doch im ersten beitrag das ich die post nach variabeln speichere ...

PHP:
} elseif ($action == "insert") {
$interpret = $_POST['interpret'];
$titel = $_POST['titel'];
 
Blackbenji schrieb:
nicht wirklich. steht doch im ersten beitrag das ich die post nach variabeln speichere ...

PHP:
} elseif ($action == "insert") {
$interpret = $_POST['interpret'];
$titel = $_POST['titel'];

Ganz ehrlich: Hör auf mit deinem Rumgehampel und lies erst einmal die elementaren Sachen über SQL-Injections und wie sie funktionieren. Deine Zuweisung ist SOWAS von egal, die hättest du dir sparen können, kostet nur Rechenzeit ohne IRGEND etwas zu tun.
Wenn du so einen Code auf ein Live-System los lässt hast du ratzfatz einen derben Hack an der Backe und deine Datenbank ist wahlweise Freiwild oder gleich platt. Dann endest du wie Sony.
 
Nein, auch da musst du dich darum kümmern. Oder probier mal den folgenden Titel eingeben: Blubber's Blubb
 
bu1137 schrieb:
Nein, auch da musst du dich darum kümmern. Oder probier mal den folgenden Titel eingeben: Blubber's Blubb

dankeschön, damit konnte ich jetzt auch was anfangen.
sorry - bin halt noch blutiger anfänger ...

ich habe es nun wie folgt gelöst:
PHP:
				$interpret = mysql_real_escape_string($_POST['interpret']);
				$titel = mysql_real_escape_string($_POST['titel']);

ist es so richtig?

"Blubber's Blubb" funktioniert jetzt jedenfalls wieder!
 
Zurück
Oben