PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formulardaten mittels php in mysql DB schreiben


aVenger
2006-09-26, 12:21:17
Das auslesen funktioniert jedoch net das reinschreiben.
Momentan sollte er einfach bei jedem aufruf etwas in die Datenbnk schreiben allerdings funktioniert beim INSERT INTO das $art nicht. Also schreibt er gar nichts rein.
Wie schreibe ich das was im Formular steht in die DB??

<html>
<head>
<title>Protokolldatenbank</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h2 align="center">Protokolldatenbank</h2>
<?php
error_reporting(E_ALL);
include 'C:\Programme\xampp\php\pear\config.php';

// definieren der MYSQL-Server Daten
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'root');
define('MYSQL_PASS', '123');
define('MYSQL_DATABASE', 'test');

//herstellen der Verbindung zum MYSQL-Server
$db_link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
if($db_link) {
echo "Verbindung wurde aufgebaut<br>\n";
echo "In der Variable steht folgendes: ".$db_link;
} else {
echo "Es konnte keine Verbindung aufgebaut werden";
}
// Auswahl der Datenbank am MYSQL-Server
if(mysql_select_db(MYSQL_DATABASE,$db_link)){
echo "<br>Die Datenbank ".MYSQL_DATABASE." wurde ausgewählt";
}
else{
echo "<br>Datenbank nicht gefunden";
}
// Abfragen der Datenbank
echo "<table border=1>";
echo "<tr><td>ID</td><td>Art</td><td>Von</td><td>Eintrag</td><td>Termin</td><td>Person</td><td>Erledigt</td></tr>";
$result = mysql_query("SELECT * FROM projekt ORDER BY ID");
if(!$result) {
echo "<br><br>Fehler beim mysql_query \n";
echo "<br>MySQL-Antwort: ".mysql_error();
die();
}
else{
while ($datensatz = mysql_fetch_assoc($result))
{

$id = $datensatz["ID"];
$art = $datensatz["Art"];
$von = $datensatz["Von"];
$ein = $datensatz["Eintrag"];
$te = $datensatz["Termin"];
$pe = $datensatz["Person"];
$er = $datensatz["Erledigt"];

echo "<tr><td>$id</td><td>$art</td><td>$von</td><td>$ein</td><td>$te</td><td>$pe</td><td>$er</td></tr> <br />";
}
}
echo "<form action='pd.php' method='post'>";
echo "<input type='text' name='art' value='muddi' />";
echo "<input type='password' name='von'/>";
echo "<input type='submit' />";
echo "</form>";
echo $_POST['art'];
echo $_POST['von'];
mysql_query('INSERT INTO `projekt` (`ID`, `Art`, `Von`, `Eintrag`, `Termin`, `Person`, `Erledigt`) VALUES (NULL, `$art` , \'bk\', \'test\', \'2006-09-20\', \'bk\', \'0\');');
?>
</body>
</html>

Flipper
2006-09-26, 13:38:47
Gib mal den mysql query-string mit echo aus und sieh ob der passt. Probieren kannst du das gut mit PHPMyAdmin.

darph
2006-09-26, 14:20:37
Ich war mal so frei, den entsprechenden Tag einzusetzen. Macht die Sache doch gleich viel lesbarer.

So. Und dann sieht man auch gleich, warum das nicht gehen kann.

Beispiel:

$x = "Hund";

$string1 = "Mein Tier ist ein $x!";
echo($string1); // Ausgabe: Mein Tier ist ein Hund.

$string2 = 'Mein Tier ist ein $x!';
echo($string2); // Ausgabe: Mein Tier ist ein $x.
Variablen innerhalb eines Strings werden nur verarbeitet, wenn es in doppelten Anführungszeichen steht. Du verwendest einfache. Wenn, dann mußt du es so machen (was meiner persönlichen Meinung nach auch deutlich ordentlicher ist und dank Syntax-Highlighting die Suche im Code entschieden vereinfacht):
$string3 'Mein Tier ist ein'.$x.'!';
echo($string3); // Ausgabe: Mein Tier ist ein Hund.

Hier öffnest du aber SQL Injections Tür und Tor. Schaue dir in der PHP Doku mal sprintf() (http://de.php.net/manual/de/function.sprintf.php) und mysql_real_escape_string() (http://de.php.net/manual/de/function.mysql-real-escape-string.php) an, sowie diesen Thread

Gast42
2006-09-26, 14:29:23
$art ist leer? (kein wunder, ist ja auch nirgendwo definiert)
$_POST['art'] hat den richtigen Wert?
dann ein
$art1=$_POST[art];
vor
mysql_query('INSERT INTO `projekt` (`ID`, `Art`, `Von`, `Eintrag`, `Termin`, `Person`, `Erledigt`) VALUES (NULL, `$art1` ...
die anführungszeichen um den Tabellennamen (projekt) sind m.E. auch hyperfluid

darph
2006-09-26, 14:36:21
$art ist auf jeden Fall definiert, schlimmstenfalls aus dem vorhergehenden Query aus dem $datenbestand gezogen.

Gast42
2006-09-26, 14:59:57
Auch nach zwischendurch erfolgtem Aufruf der Eingabemaske??
Ist übrigens auch Abhängig von Servereinstellungen zu globalen Variablen.

darph
2006-09-26, 15:58:47
Auch nach zwischendurch erfolgtem Aufruf der Eingabemaske??
Ist übrigens auch Abhängig von Servereinstellungen zu globalen Variablen.
In diesem Script schon.

aVenger
2006-09-27, 14:42:06
Bis jetzt hat mir kein Kommentar geholfen leider.
Ich habe das ganze mal etwas übersichtlicher geschrieben. Zurzeit ist es so das ich keine Fehlermeldung kriege er aber auch keinen Eintrag in die Datenbank macht.

<HTML>
<HEAD>
<TITLE>test</TITLE>
<LINK REL=stylesheet TYPE="text/css" HREF="../style.css">
</HEAD>

<BODY>

<TABLE CLASS=std WIDTH="100%">
<TR><TD><P CLASS=std>
testtest<BR><BR>
</P></TD></TR>
<TR><TD WIDTH="100%">


<DIV ALIGN="center"><FIELDSET><FORM NAME="signup" METHOD="post" ACTION="signup.php">

<TABLE class=std WIDTH="100%">
<TR>
<TD ALIGN="left"><H2>Eintrag:</H2></TD>
</TR>
</TABLE>

<TABLE class=std WIDTH="100%">
<TR>
<TD ALIGN="left"><P CLASS=std><I>Eintrag:</I></P></TD>
<TD ALIGN="left"><INPUT SIZE="30" NAME="eintragformular"></TD>
</TR>

</TABLE>

<TABLE class=std WIDTH="100%">
<TR>
<TD ALIGN="center" WIDTH="100%"><INPUT TYPE="submit" VALUE="eintragen"></TD>
</TR>
</TABLE>

</FORM></FIELDSET></DIV>
</TD></TR>
</TABLE><BR>


<?php
error_reporting(E_ALL);
include 'C:\Programme\xampp\php\pear\config.php';


// definieren der MYSQL-Server Daten
//////////////////////////////////////////

define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'root');
define('MYSQL_PASS', '123');
define('MYSQL_DATABASE', 'test');

//herstellen der Verbindung zum MYSQL-Server
///////////////////////////////////////////

$db_link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
if($db_link) {
echo "Verbindung wurde aufgebaut<br>\n";
echo "In der Variable steht folgendes: ".$db_link;
} else {
echo "Es konnte keine Verbindung aufgebaut werden";
}

// Auswahl der Datenbank am MYSQL-Server
////////////////////////////////////////

if(mysql_select_db(MYSQL_DATABASE,$db_link)){
echo "<br>Die Datenbank ".MYSQL_DATABASE." wurde ausgewählt <br><br>";
}
else{
echo "<br>Datenbank nicht gefunden";
}


// AUSGABE DER TABELLE
//////////////////////////////////////////////

$result = mysql_query("SELECT * FROM `testtabelle`");

if(!$result){
echo "<br><br>Fehler beim mysql_query \n";
echo "<br>MySQL-Antwort: ".mysql_error();
die();
}
else{
while ($datensatz = mysql_fetch_assoc($result))
{
$eintrag = $datensatz["Eintrag"];
echo "$eintrag <BR>";
}
}


// IN TABELLE SCHREIBEN
//////////////////////////////////////////////////

//echo $_POST['eintragformular'];

$Eintragformular1 = $_POST['eintragformular'];
echo "$Eintragformular1 <BR><br>";

mysql_query('INSERT INTO `testtabelle` (`Eintrag`) VALUES (` .$Eintragformular1. `);');
mysql_error();


?>

</BODY>

</HTML>

aVenger
2006-09-27, 15:06:37
hat sich erledigt
habs gerade selbst geschafft
die zeile muss wie folgt aussehen

mysql_query("INSERT INTO testtabelle VALUES('$Eintragformular1')") or die(mysql_error());

The_Invisible
2006-09-27, 15:51:05
ich persönlich würde ja eher zur Syntax

"INSERT INTO [TABLE] SET [TABKEY]=[VALUE], [TABKEY2]=[VALUE2], ..."

raten, ist einfach übersichtlicher wenn man viele Einträge hat und zuerst nicht alle Felder nutzt

mfg

darph
2006-09-27, 15:59:33
hat sich erledigt
habs gerade selbst geschafft
die zeile muss wie folgt aussehen

mysql_query("INSERT INTO testtabelle VALUES('$Eintragformular1')") or die(mysql_error());Zum Glück hab ich nicht genau darauf hingewiesen. ;(

Übrigens kann ich den Inhalt von Eintragsformular wunderbar nutzen, um deine ganze DB zu löschen.

Was passiert, wenn ich in das Formular etwas in der Richtung schreibe?
"-');DROP TABLE testtabelle; INSERT INTO testtabelle VALUES('alles weg" ;( Injections ahoi.

clm[k1]
2006-09-27, 17:33:41
Was passiert, wenn ich in das Formular etwas in der Richtung schreibe?
"-');DROP TABLE testtabelle; INSERT INTO testtabelle VALUES('alles weg" ;( Injections ahoi.
Vermutlich gar nichts!
Weil nämlich mysql_query aus Sicherheitsgründen nur eine Query ausführt - egal wieviele noch hinter einem etwaigen semikolon stehen.


just my 2 cent
clm[k1]

darph
2006-09-27, 20:08:21
Oh. Nagut. Wieder was gelernt.

Bleibt trotzdem das grundsätzliche Problem, daß man da werweißwas reinschreiben könnte.

clm[k1]
2006-09-28, 13:33:14
Bleibt trotzdem das grundsätzliche Problem, daß man da werweißwas reinschreiben könnte.
Ja, und in der Hinsicht sind SELECT-statements noch gefährlicher, weil man dem da mittels UNION alles mögliche unterschieben kann - bei INSERT sind die Möglichkeiten da doch recht begrenzt.


clm[k1]