Problem mit Formular, das Daten in einer Datenbank speichern soll

Naddl150

Mitglied
Hallo!

Also ich bin ein PHP-Anfänger und hab ein Formular erstellt, dass die eingegebenen Daten in einer Datenank speichern soll. Nur leider funktioniert es nicht. Ich hab schon überall gesucht, doch keine Lösung gefunden. Ich will die Daten auf der Datenbank "test" in die tabelle "aufgabenverwaltung" speichern. Die tabelle besteht aus 10 Feldern:

ID - int (10)
Bezugssystem - varchar (25)
Bereich - varchar (25)
Datensatz-ID - int (10)
Erfasser - int (10)
Datum - date
Status - varchar (50)
Prio - varchar (50)
Beschreibung - text
Adressat - varchar (100)


Ich kopiere mal den Code rein:



1) akt.php
HTML:
<html>
<head>

<title>Neue Aktivität hinzufügen</title>
</head>
<?php 

$datum = date("Y-m-d", time());
echo $datum;

?>

<body>
<form name="form1" method="post" action="ok.php">
  <table width="438" border="0">
    <tr>
      <td width="200">Bezugssystem </td>
      <td width="228"><input name="bzs"></td>
    </tr>
    <tr>
      <td>Bereich im Bezugssystem</td>
      <td><input name="b_bzs"></td>
    </tr>
    <tr>
      <td>Datensatz-ID im Bezugssystem </td>
      <td><input name="id_bzs"></td>
    </tr>
    <tr>
      <td>ID Erfasser der Aktivit&auml;t </td>
      <td><input name="id_erf"></td>
    </tr>
    <tr>
      <td>Datum der Erfassung</td>
      <td><input name="date" value = "<?php echo $datum ?>"></td>
    </tr>
    <tr>
      <td>Status</td>
      <td><select name="stat">
	  
        <option value="bearbeitet">in Bearbeitung</option>
        <option value="beendet">Beendet</option>
        <option value="offen">Offen</option>
      </select></td>
    </tr>
    <tr>
      <td>Prio</td>
      <td><select name="prio">
        <option value="Hoch">Hoch</option>
        <option value="Normal">Normal</option>
        <option value="Niedrig">Niedrig</option>
            </select></td>
    </tr>
    <tr>
      <td>Beschreibung</td>
      <td><textarea name="beschr"></textarea></td>
    </tr>
    <tr>
      <td>Adressat</td>
      <td><input name="adr"></td>
    </tr>
  </table>
  <input type="submit" value="OK">
  <p>&nbsp;</p>
</form>



</body>
</html>



2) ok.php

PHP:
<html>
<head>

<title>Unbenanntes Dokument</title>
</head>

<?php

include 'config.php';


$dbverbindung = mysql_connect ($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS);

$dbanfrage = "INSERT into aufgabenverwaltung VALUES ({0}, {$_POST['bzs']}, {$_POST['b_bzs']}, {$_POST['id_bzs']}, {$_POST['id_erf']}, 
{$_POST['date']}, {$_POST['stat']}, {$_POST['prio']}, {$_POST['beschr']}, {$_POST['adr']})";



if (mysql_query ($MYSQL_DATABASE, $dbanfrage, $dbverbindung)) {
print ("Datenbankeintrag erfolgreich.");
} else {
print ("Es traten Probleme auf.");
}


mysql_close ($dbverbindung);

?>


<body>

</body>
</html>


Kann mir bitte jemand weiterhelfen? ich bin mir ziemlich sicher, das es nur ien kleiner Fehler ist, denn ich übersehn hab, abe rich komm einfach nicht drauf :(
 
Hallo!

... nur mal schnelles drauf rum getippe an was es liegen könnte ...
In deiner Query gibst du "{0}" an .. ist denn ID kein auto_increment Wert? Wenn doch => Bitte diesen Wert in der Query nicht angeben (d.h. raus löschen).
Übrigens: Eine Konstante bitte nicht mit "{" "}" ummanteln - das soll nur PHP symbolisieren das sich innerhalb dieser Klammern variablen befinden die nicht als String interpretiert werden sollen.

Kannst du evtl. auch posten was sich denn in der Datenbank nach ausführen von ok.php befindet?

Sicher bin ich mir auch nicht bei deinen Arrays ... ich kenn zwar die "{" "}" ummantelung, aber wenn du ein Array in einem "" string verwendest, darfst du (meines Wissens nach) keine ' mehr als Hash-Bezeichner verwenden? D.h.

"{$_POST['prio']}" sollte eher so aussehen: "{$_POST[prio]}" ...


Schöne Grüße!
 
also einmal solltest du dir dringend Informationen zu SQL-Injections durchlesen um diese zu unterbinden und außerdem ist hier der Syntax von mysql_query() falsch oder?
einfach ein
PHP:
mysql_select_db($MYSQL_DATABASE);
eine Zeile drüber setzen, dann kannst du das Query mit
PHP:
mysql_query ($dbanfrage,$dbverbindung)
ausführen.

Außerdem lohnt es sich
PHP:
echo mysql_error();
zu nutzen, dann weißt du immer wo der Fehler liegt :)

Ansonsten sieht der Code sehr vielversprechend für einen Anfänger aus, Respekt :)

@GeneSys386:
Welche Arrays denn? Und in Anführungszeichen darf man ' verwenden, der Unterschied zwischen den beiden ist bloß, dass wenn ein string in Anführungszeichen steht auch Informationen wie \r\n oder $variable wirklich umgewandelt werden, bei dem Minutenzeichen ( ' ) sind lediglich nur die Zeichen sichtbar die man auch eingegeben hat.

Also
PHP:
echo "das ist ein tab nach einem Zeilenumbruch in HTML: \r\n\t123
gibt aus:
PHP:
das ist ein tab nach einem Zeilenumbruch in HTML:
	123
allerdings mit Minutenzeichen wird ausgegeben:
PHP:
das ist ein tab nach einem Zeilenumbruch in HTML: \r\n\t123
 
Zuletzt bearbeitet:
Hallo,

damit wir dir helfen können, solltest du uns vielleicht noch schon mitteilen, wie die Fehlermeldung lautet und was in der config.php steht.

Der Fehler liegt warscheinlich in
Code:
$dbanfrage = "INSERT into aufgabenverwaltung VALUES ({0}, {$_POST['bzs']}, {$_POST['b_bzs']}, {$_POST['id_bzs']}, {$_POST['id_erf']}, 
{$_POST['date']}, {$_POST['stat']}, {$_POST['prio']}, {$_POST['beschr']}, {$_POST['adr']})";

Es fehlen die Namen, der Spalten.. Ein INSERT muss etwa so aussehen(Spaltennamen musst du allerdings noch anpassen):
Code:
$dbanfrage = "INSERT into aufgabenverwaltung  (id, bzs, b_bzs, id_bzs, id_erf,date, stat, prio, beschr, adr)VALUES ({0}, {$_POST['bzs']}, {$_POST['b_bzs']}, {$_POST['id_bzs']}, {$_POST['id_erf']}, 
{$_POST['date']}, {$_POST['stat']}, {$_POST['prio']}, {$_POST['beschr']}, {$_POST['adr']})";

Ansonsten versuche mal die geschweiften Klammern wegzulassen, also

Code:
$dbanfrage ='INSERT into aufgabenverwaltung  (id, bzs, b_bzs, id_bzs, id_erf,date, stat, prio, beschr, adr)VALUES ("0", "'.$_POST['bzs'].'", "'.$_POST['b_bzs'].'", "'.$_POST['id_bzs'].'", "'.$_POST['id_erf'].'"," 
'.$_POST['date'].'", "'.$_POST['stat'].'", "'.$_POST['prio'].'","'.$_POST['beschr'].'", "'.$_POST['adr'].'")';
Liebe Grüße Joe
 
Zuletzt bearbeitet:
wie oben schon gesagt sehr wichtig ist direkt nach dem query ein mysql_error zu setzten, is sehr hilfreich
beispiel:
PHP:
$variable=mysql_query($anforderung) or die(mysql_error());

Wenn du schließlich die SQL Syntax gut beherrscht, dann hilft es auch die variable $variable auszugeben, also bevor du den query schickst, weil dann siehste genau was an die datenbank geschickt wird, is mir heute auch passiert und hab gesehen dass ein Komma zu viel da war.

Zudem hats bei mir auch nicht oft funktioniert, weil die bei dem INSERT kommando folgende Syntax bei mir zulässig ist:

PHP:
$hans=" INSERT INTO `tabelle` (`name`,`adresse`) VALUES ('hans','lindenstraße') ";

Bei mir war es also das schiefe hochkomma.
Bei den Werten VALUES werden jedoch diese schiefen kommata nicht benutzt
 
die Fehlermeldung lautet :

Incorrect database name 'insert into aufgabenverwaltung values ({0}, sddas, fibu, 21, 21, 2007-10-16, bearbeitet, hoch, asd'

naja, also hab ich da einen Fehler gemacht. Ich hab schon verschiedenste Möglichkeiten probiert, hat aber nichts funktioniert. naja, aber intelligenter bin ich trotzdem schon geworden :) jetzt weis ich wenigstens, das der rest stimmt. Ich hab irgendwie schon die ganze Zeit Probleme mit dem Übertragen der Formularinhalte.
 
@GeneSys386:
Welche Arrays denn? Und in Anführungszeichen darf man ' verwenden, der Unterschied zwischen den beiden ist bloß, dass wenn ein string in Anführungszeichen steht auch Informationen wie \r\n oder $variable wirklich umgewandelt werden, bei dem Minutenzeichen ( ' ) sind lediglich nur die Zeichen sichtbar die man auch eingegeben hat.

Also
PHP:
echo "das ist ein tab nach einem Zeilenumbruch in HTML: \r\n\t123
gibt aus:
PHP:
das ist ein tab nach einem Zeilenumbruch in HTML:
	123
allerdings mit Minutenzeichen wird ausgegeben:
PHP:
das ist ein tab nach einem Zeilenumbruch in HTML: \r\n\t123


Hallo! :)

Also so gaaanz ohne weiteres glaub ich dir jetzt nicht *g* ;)
Du hast das Problem das ich (möglicherweise?) sah (oder eben nicht :-D) ganz gut beschrieben. Wenn ich jetzt wie folgt her gehe und sage

$myArray['Hallo']; ... wird hier als Hash Hallo eingesetzt

was passiert jetzt aber wenn ich sage

"$myArray['Hallo']"; ... wird hier dann nicht 'Hallo' als Hash eingesetzt?

deswegen binde ich einen Zugriff auf einen Hash-key in meinen "Strings" immer so ein

"$myArray[Hallo]"; ... hier sollte wieder Hallo als Hash eingesetzt werden.


Es kann jetzt natürlich sein das ich mich vollends täusche .. das mag ich nicht ausschließen ^^ Es wäre 'nen Versuch wert, das auszuprobieren ... bezüglich \r\n ...

Du hast recht - Hochkomma-Strings werden ohne Escape-Sequenzen interpretiert (während hingegen Anführungszeichen sehr wohl escape-Sequenzen aufnehmen können)

Deswegen hatte ich eine (mir begründete) Angst das könnte das korrekte Ansteuern der Arrays verhindern.
 
So, der Fehler ist noch immer nicht behoben.

bei dem typ int soll man ja die ' ' weglassen (zB $_POST[id_erf]), oder täusch ich mich da? Wie ist das dann bei einem datum?

Aber ihr seit wirklich super. so schnell bekommt man selten eine Antwort. Bin euch jetzt schon dankebar :)
 
So, der Fehler ist noch immer nicht behoben.

bei dem typ int soll man ja die ' ' weglassen (zB $_POST[id_erf]), oder täusch ich mich da? Wie ist das dann bei einem datum?

Aber ihr seit wirklich super. so schnell bekommt man selten eine Antwort. Bin euch jetzt schon dankebar :)

Hallo!

Du verwechselst das jetzt glaub ich zwischen PHP-Variable und SQL-Syntax, kann das sein? Bzw. darfst du den Array-Key nicht mit dem Wert verwechseln.

Integer (generell: Zahlentypen!) dürfen nicht in Hochkommas/Anführungszeichen stehen, das ist korrekt.
d.h.
PHP:
 $mein_integer = 5; // und nicht $mein_integer = '5';

Aaaaber...

PHP:
 $myArray['array_key'] = 5; // array_key in Hochkomma, da es sich hier um einen String handelt! 5 nicht, da es ein Zahlenwert ist

Einen speziellen Datums-Typ gibt es in PHP nicht (soweit ich weiß) -- da solltest du evtl. mit Timestamps arbeiten (siehe PHP-Funktionen mktime() und date()).

Wenn du SQL-Syntax meinst -- auch hier keine Hochkomma/Anführungszeichen bei Zahlenwerte verwenden. D.h. z.B.
Code:
SELECT * FROM tabelle WHERE userid = 5;

und nicht userid = '5';


Daten (plural von Datum?) werden (zumindest bei mySQL?) wie Strings behandelt, mit spezieller Formatierung. D.h. es kann wie folgt verwendet werden:

Code:
UPDATE tabelle SET datum='05-07-2007' WHERE id=5;


Um dann mit den Daten zu arbeiten gibt es spezielle SQL-Kommandos... siehe hier =>
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
 
Zurück