Joomla MySQl-Fehler

BolleF1

Mitglied
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.

PHP:
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;
	}

Die Mysql Datenbank funktioniert, denn die 2te Anfrage geht:

PHP:
 }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.

PHP:
$id = JRequest::getVar('id', 'null', 'post');

und so empfangen.
 
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:
$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' )";
 
Ansonsten probier mal folgenden Code:

PHP:
$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' )";


Den Code hab ich probiert er geht im phpmyadmin nicht , ich versuche gleich mal eine andere Syntax.

lass dir doch mal das erste query mittels query oder var_dump ausgeben

was meinste damit ,was ist vardump ? Sry, ich arbeite noch nicht sehr lange mit PHP.
 
var_dump zeigt dir was eine bestimmte Variable ausgib

PHP:
var_dump($query)

hab ich das richtig verstanden das die else ausführung funktioniert und nur der if-Zweig ****t nichto der klappt garnichts?
 
Genau so ist es, genau das verwirrt mich ja so an der Sache ^^

var_dump zeigt dir was eine bestimmte Variable ausgib

und was hat das für einen Sinn ich weiß doch was ich der Variable zugewiesen habe ?!

EDIT:

Falls es etwas nützt das ist die Fehlermeldung von phpmyadmin zu dem Code

PHP:
$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 1
 
Zuletzt bearbeitet:
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:
$query= "INSERT INTO #_auto ('Spaltenname1', 'Spaltenname2',....) VALUES ('Wert1','Wert2',....)";

php und sql sind bei sowas etwas zickig ;)
 
ich versuche gleich mal eine andere Syntax.

Das hat auch nicht geklappt. Ich hab diesmal den Code probiert:

PHP:
$query = "INSERT INTO `#__auto` (`user`            ,`name` ,`pupil` ,`subject` ,`street` ,`town` ,`plz` ,`email` ,`year` )							                                                                                              VALUE('$user->username','$name','$pupil','$subject','$street','$town','$plz','$email','$year')";

Edit:

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?
 
Zuletzt bearbeitet:
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?
 

Neue Beiträge

Zurück