PHP-Funktion lässt falsche Werte in DB eintragen

l34trul3r

Grünschnabel
Hallo Community,

ich habe mal angefangen, ein wenig mit PHP zu arbeiten und komme nach ein paar Erfolgen nun wirklich nicht mehr weiter.

Momentan sitze ich an einer Todo-Liste, in der man halt "Todo's" eintragen und später dann auch ablesen kann.

Die Funktion hierfür:
PHP:
function todolist($todo)
{
    $sql="INSERT INTO todolist (todo) VALUE ('$todo')";
	mysql_query($sql) or die (mysql_error());

    if (mysql_query($sql))
	echo'Todoliste wurde aktualisiert';
}

Das Formular zum Eintragen der Todo's:
<form method="POST" action="index.php?site=admincenter">
<input name="todo" type="text" size="50"><br>
<input name="todosend" type="submit" id="todosend" value="Speichern">
</form>

Meine DB sieht folgendermaßen aus:
Ich habe eine Tabelle "todolist" und in dieser 2 Felder
1. nummer (int, 11, auto_increment, primary key) - soll dann später zum einfacheren Abrufen und Bearbeiten dienen.
2. todo (varchar, 255) - dort soll der Text enthalten sein, den ich aus obigem Formular in die DB eintragen lasse.

Nun zu meinem Problem:
Es wird ein DB-Eintrag getätigt, allerdings bleibt das Feld "todo" in der Tabelle "todolist" leer und dafür werden 2 Einträge erstellt mit laufenden Nummern im Feld "nummer".

Könnte mir vielleicht jemand sagen wo mein Fehler liegt?

Vielen Dank im Voraus,

Gruß
l34trul3r
 
Hi,

Code:
    $sql="INSERT INTO todolist (todo) VALUE ('$todo')";
    mysql_query($sql) or die (mysql_error());

    if (mysql_query($sql))
    echo'Todoliste wurde aktualisiert';

du rufst mysql_query() zweimal auf.
Deswegen werden auch zwei Einträge in die Datenbank geschrieben.

Wie sieht denn der Code aus, indem du deine Funktion aufrufst?
 
Zuletzt bearbeitet:
Wie übergibst Du die variable "todo"?

Mit $_POST oder mit $_GET?


Code:
if(isset($_POST["submit"])){
          $todo = $_POST["todo"];
          }

setze mal ein var_dump!
 
Gegen die leeren Einträge muss der Query korrigiert werden

PHP:
$sql="INSERT INTO todolist (todo) VALUES ('$todo')";

Es heißt VALUES nicht VALUE =)
 
Gegen die leeren Einträge muss der Query korrigiert werden

PHP:
$sql="INSERT INTO todolist (todo) VALUES ('$todo')";

Es heißt VALUES nicht VALUE =)

VALUE funktioniert auch.

http://dev.mysql.com/doc/refman/5.1/en/insert.html

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
 
Zuletzt bearbeitet:
Gnadenlos, da lernt man doch immer wieder dazu :eek:

Na dann, rein mit dem var_dump, und zeigen wie deine Funktion aufgerufen wird :rolleyes:
 
Hi und danke für die schnellen Antworten.

Hab ich doch noch was vergessen zu posten..
Hier der code für Funktionsaufruf:
PHP:
if (isset($_POST['todosend']))
	todolist($todo);

todolist($todo) soll hier meine Funktiohn sein.
Das 'todosend' ist ja der submit-button im Formular.

Bez.
PHP:
if (mysql_query($sql))
    echo'Todoliste wurde aktualisiert';
wusste ich nicht, dass hier "mysql_query" nochmals aufegrufen wird. Rein vom logischen Übersetzen heißt es doch eigentlich "Sofern mysql_query($sql) ausgeführt wurde, schreibe "..." " oder nicht? Da hängts wohl etwas bei mir ^^

Gruß
l34trul3r
 
Hi

mir fallen da 2 Fehler auf:
Zum einen
PHP:
if (isset($_POST['todosend']))
    todolist($todo);  // Wo ist denn $todo definiert?
//Mögliche Lösung
if( isset($_POST['todosend']))
  todolist($_POST['todoinhalt']);
Zum anderen
PHP:
$sql="INSERT INTO todolist (todo) VALUES ('$todo')";  //schreibt $todo in die Datenbank und nicht den Inhalt von $todo
$sql="INSERT INTO todolist (todo) VALUES ('".$todo."')";  //schreibt den Inhalt von $todo in die Datenbank

if( mysql_query($sql) ) //Hierbei wird die Funktion schon ausgeführt
  echo 'Query erfolgreich ausgef&uuml;hrt';
else
  echo 'Fehler beim Eintragen';
 
Zuletzt bearbeitet:
Bei deinem Funktionausaufruf benutzt du die Variable $todo, wo wird diese denn deffiniert?
Wenn sie nicht deffniert ist und du den übermittelten Wert von POST möchtest dann muss das heißen

PHP:
todolist($_POST['todo']);

die Funktion mysql_query(); führt eine Aktion aus und gibt etwas zurück. Du kannst den Rückgabewert in eine Variable speichern ($MySQLResult = mysql_query($Query);) und diese Variable dann mit IF überprüfen.
 
@Nord-Süd-Richtung
PHP:
$sql="INSERT INTO todolist (todo) VALUES ('$todo')";

kann man so benutzen, allerdings nur wenn man den String mit doppelten Anführungszeichen umschließt. Bei einfachen Anführungszeichen müsste man es so machen wie du geschrieben hast ;) Die einfachen Anführungszeichen um die Variable drumrum machen in dem Fall nichts aus.

Lg
 
Zurück