-
Hallo,
Für ein kleines Projekt schreibe ich eine Komponente für mein Joomla 1.5 System. Dabei habe ich für das Frontend ein Formular programmiert. Die eingegebenen Daten sollen dann in der Datenbank gespeichert werden.
Leider klappt das nicht so wie es soll und dabei scheitert es wahrscheinlich an der ganz einfachen MySQL-Anfrage. Ich habe jetzt schon mehrere Stunden versucht den Fehler zufinden oder ihn zu umgehen, doch es klappt einfach nicht -.-
Deswegen möchte ich euch bitten kurz einen Blick darauf zu werfen, der Fehler ist bestimmt total offensichtlich.
Die Funktion ist aus meinem Model.
Die Mysql Datenbank funktioniert, denn die 2te Anfrage geht:PHP-Code:function store()
{
global $mainframe;
//Daten zum einfüllen laden
$user = JFactory::getUser();
$name = JRequest::getVar('name', 'null', 'post');
$family = JRequest::getVar('family', 'null', 'post');
$pupil = JRequest::getVar('pupil', 'null', 'post');
$subject = JRequest::getVar('subject', 'null', 'post');
$street = JRequest::getVar('street', 'null', 'post');
$town = JRequest::getVar('town', 'null', 'post');
$plz = JRequest::getVar('plz', 'null', 'post');
$birthday = JRequest::getVar('birthday', 'null', 'post');
$email = JRequest::getVar('email', 'null', 'post');
$id = JRequest::getVar('id', 'null', 'post');
$year = JRequest::getVar('year', 'null', 'post');
if(!isset($id))
{
//In die Datenbank schreiben
$query = "INSERT INTO `#__auto` SET
`user` = '$user->username',
`name` = '$name',
`family` = '$family',
`subject` = '$subject',
`street` = '$street',
`town` = '$town',
`plz` = '$plz',
`birthday` = '$birthday',
`email` = '$email',
`year` = '$year' ";
$db =& JFactory::getDBO();
$db->setQuery($query);
$result = $db->query();
}else
{
$query = "UPDATE `#__auto` SET
`user` = '$user->username',
`name` = '$name',
`family` = '$family',
`subject` = '$subject',
`street` = '$street',
`town` = '$town',
`plz` = '$plz',
`birthday` = '$birthday',
`email` = '$email',
`year` = '$year'
WHERE `id` = $id;";
$db =& JFactory::getDBO();
$db->setQuery($query);
$result = $db->query();
}
return $result;
}
PHP-Code:}else
{
$query = "UPDATE `#__auto` SET
`user` = '$user->username',
`name` = '$name',
`family` = '$family',
`subject` = '$subject',
`street` = '$street',
`town` = '$town',
`plz` = '$plz',
`birthday` = '$birthday',
`email` = '$email',
`year` = '$year'
WHERE `id` = $id;";
$db =& JFactory::getDBO();
$db->setQuery($query);
$result = $db->query();
}
Die Tabelle sieht so aus:
Feld Typ Null Standard Kommentare MIME
user text Nein
name text Nein
family text Nein
pupil tinyint(1) Nein
subject text Nein
street text Nein
town text Nein
plz int(11) Nein
birthday date Nein
published tinyint(1) Ja NULL
who text Ja NULL
email text Nein
id int(11) Nein
year int(11) Nein
So, von mir schonmal vielen Dank. Ich hoffe ihr könnt mir helfen
mfg Bollef1
-
Kenn mich jetzt nicht so mit der Api Programmierung aus, aber wo wird $id ermittelt? Muss man es selber eingeben oder woraus ermittelst du die?
-
Vielen Dank für deine Antwort!
Wenn ein Nutzer schon einen Eintrag in der Tabelle hat werden die Einstellungen geladen in die Form. Die ID liegt dann in einem Versteckten Feld und wird über den POST zum Model geleitet.
und so empfangen.PHP-Code:$id = JRequest::getVar('id', 'null', 'post');
-
Naja, dann könnte es noch an der sql Syntax liegen.
lass dir doch mal das erste query mittels query oder var_dump ausgeben und prüf dies vorausgesehen es kommt was an mittels phpmyadmin. Ansonsten probier mal folgenden Code:
PHP-Code:$query = "INSERT INTO #__auto VALUE(
`user` = '$user->username',
`name` = '$name',
`family` = '$family',
`subject` = '$subject',
`street` = '$street',
`town` = '$town',
`plz` = '$plz',
`birthday` = '$birthday',
`email` = '$email',
`year` = '$year' )";
-
-
var_dump zeigt dir was eine bestimmte Variable ausgib
hab ich das richtig verstanden das die else ausführung funktioniert und nur der if-Zweig ****t nichto der klappt garnichts?PHP-Code:var_dump($query)
-
Genau so ist es, genau das verwirrt mich ja so an der Sache

und was hat das für einen Sinn ich weiß doch was ich der Variable zugewiesen habe ?!var_dump zeigt dir was eine bestimmte Variable ausgib
EDIT:
Falls es etwas nützt das ist die Fehlermeldung von phpmyadmin zu dem Code
PHP-Code:$query = "INSERT INTO #__auto VALUE(
`user` = '$user->username',
`name` = '$name',
`family` = '$family',
`subject` = '$subject',
`street` = '$street',
`town` = '$town',
`plz` = '$plz',
`birthday` = '$birthday',
`email` = '$email',
`year` = '$year' )";
#1136 - Column count doesn't match value count at row 1Geändert von BolleF1 (11.11.10 um 19:01 Uhr)
-
Naja mit Var_dump siehst du aber, was übermittelt wird
Ich sehe gerade das ich nen Fehler drin hatte. Ändere mal VALUE in VALUES.
Ansonsten kann es sein, das du mehr Spalten in deiner Table als in deinem Query hast.
Versuch mal dies
php und sql sind bei sowas etwas zickigPHP-Code:$query= "INSERT INTO #_auto ('Spaltenname1', 'Spaltenname2',....) VALUES ('Wert1','Wert2',....)";
-
Das hat auch nicht geklappt. Ich hab diesmal den Code probiert:
Edit:PHP-Code:$query = "INSERT INTO `#__auto` (`user` ,`name` ,`pupil` ,`subject` ,`street` ,`town` ,`plz` ,`email` ,`year` ) VALUE('$user->username','$name','$pupil','$subject','$street','$town','$plz','$email','$year')";
Gut die Änderung in Values hab ich übernommen , geht aber trotzdem nicht. Schade ;/
Muss ich alle Felder aus der Tabelle nehmen oder kann ich nur die nehmen , die auch gefüllt werden sollen?Geändert von BolleF1 (11.11.10 um 19:17 Uhr)
-
Ansich müssten die reichen, die gefüllt werden sollen. Was ist mit denen, wo keine Zuweisung erfolgt? Ist dort Auto Increment eingestellt oder soll dort ein Null Wert gespeichert werden?
-
Die drei sind nicht angegeben und auf Null oder auto increment eingestelltFeld Typ Null Standard Kommentare MIME
user text Nein
name text Nein
family text Nein
pupil tinyint(1) Nein
subject text Nein
street text Nein
town text Nein
plz int(11) Nein
birthday date Nein
published tinyint(1) Ja NULL
who text Ja NULL
email text Nein
id int(11) Nein
year int(11) Nein
Hmm , jetzt haben wir fast alles durch nur den Fehler nicht
-
Irgendwie kann ich nachts besser denken

Es kann ja nur zwei Feherquellen geben. Entweder der sql-Code oder es liegt an der if-Bedingung. Tausche dochmal beide Bedingungen sprich
bzw. (ohne die id-Strktur zu kennen)PHP-Code:if(isset($id)){
update ...
}
else{
INSERT
}
Ansonstem wäre immer noch interessant, was rauskommt, sprich wenn du im if-Zweig einPHP-Code:if(id==0){INSERT}
else {UPDATE}
reinknallst um zu sehen, was rauskommt.PHP-Code:var_dump($query)
Wie prüfst du in der DB, ob schon die ID vorhanden ist?
-
Ohh , so spät noch auf ?
Das kann ich mir nicht leisten, dann hänge ich in der Schule durch. Das ganze soll früher oder später eine Nachhilfevermittlung für unsere Schülerfirma werden.
So , wenn ich vardump einbinde passiert garnichts ? Ich habe es so eingefügt :
PHP-Code:if(!isset($id))
{
//In die Datenbank schreiben
$query = "INSERT INTO `#__auto` (`user` ,`name` ,`pupil` ,`subject` ,`street` ,`town` ,`plz`,`birthday` ,`email` ,`year` )
VALUES('$user->username','$name','$pupil','$subject','$street','$town','$plz','0000-00-00','$email','$year')";
So , das mit dem vertauschen probiere ich auch gleich nochmal aus ;D
$db =& JFactory::getDBO();
$db->setQuery($query);
$result = $db->query();
//test
var_dump($query);
So das hab ich jetzt auch probiert
Ich habe es so umgesetzt:PHP-Code:if(isset($id)){
update ...
}
else{
INSERT
}
PHP-Code:if(isset($id))
{
$query = "UPDATE `#__auto` SET
`user` = '$user->username',
`name` = '$name',
`family` = '$family',
`subject` = '$subject',
`street` = '$street',
`town` = '$town',
`plz` = '$plz',
`birthday` = '$birthday',
`email` = '$email',
`year` = '$year'
WHERE `id` = $id;";
$db =& JFactory::getDBO();
$db->setQuery($query);
$result = $db->query();
}else
{
//In die Datenbank schreiben
$query = "INSERT INTO `#__auto` (`user` ,`name` ,`pupil` ,`subject` ,`street` ,`town` ,`plz`,`birthday` ,`email` ,`year` )
VALUES('$user->username','$name','$pupil','$subject','$street','$town','$plz','0000-00-00','$email','$year')";
$db =& JFactory::getDBO();
$db->setQuery($query);
$result = $db->query();
//test
var_dump($query);
}
Es funktioniert aber immer noch nicht , hmm ganzschön hartnäckig -.- Hasz du noch irgendeinen Tipp für mich ?
EDIt:
Also vllt war es vorhin schlecht von mir erklärt. Ziel ist es für angemeldete Nutzer ein Frontend-Formular zu erstellen wo sie sich als Nachhilfeschüler melden können. Bei der erstmaligen Anmeldung sind alle Felder leer, denn es können keine Einstellungen aus der Datenbank geladen werden.Wie prüfst du in der DB, ob schon die ID vorhanden ist?
// Das ist auch im Moment das Problem die Erstanmelddung funktioniert nicht
WEnn ein Nutzer sich schon einmal angemeldet hat und seine Einstellungen ändern will. Geht er auf bearbeiten... Das Formular wird wieder aufgerufen, aber diesmal wird in der Tabelle gesucht ob sich schon ein Nutzer mit dem User angemeldet hat. -Hat er ja auch. Dann werden alle Einstelllungen in das Formular geladen. Die ID steht dann in einem versteckten Feld.
Die ID wird dann per POSt zum Modelübertragen.Geändert von BolleF1 (12.11.10 um 17:17 Uhr)
-
Da hast du dir aber ein interessantes konstrukt ausgedacht.
Warum machst du es nicht mt 2 Button?
PHP-Code:if(isset($_POST['abschicken'])){INSERT INTO ....}
if(isset($_POST['bearbeiten'])){UPDATE ....}
-
Hmm. Aber , wenn ein Benutzer schon angemeldet ist, also in der Tabelle eingetragen ist und dann wieder auf Abschicken drückt, dann ist er ja dopppelt in der Tabelle oder ?
Ähnliche Themen
-
Suche Programmierer (PHP,MySQL -> Joomla)
Von sylvus im Forum Stellenangebote (entgeltlich)Antworten: 2Letzter Beitrag: 16.11.09, 16:43 -
Ajax in Modul, Fehler Joomla
Von =fire= im Forum Javascript & AjaxAntworten: 17Letzter Beitrag: 23.07.09, 16:26 -
Joomla auf vServer von Server4You keine Daten über Joomla speicherbar
Von interface im Forum Content Management Systeme (CMS)Antworten: 2Letzter Beitrag: 30.06.07, 20:56 -
Mysql fehler warum? Finde keinen Fehler
Von strex im Forum PHPAntworten: 6Letzter Beitrag: 12.06.07, 18:28 -
Anfänger Fehler[MySql/Switch Fehler?]
Von Rai im Forum PHPAntworten: 13Letzter Beitrag: 16.04.06, 20:28



7Danke

Zitieren
Login





