tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
20
ZUGRIFFE
1452
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    BolleF1 BolleF1 ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    23
    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-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;
        } 
    Die Mysql Datenbank funktioniert, denn die 2te Anfrage geht:

    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
     

  2. #2
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    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?
    BolleF1 bedankt sich. 

  3. #3
    BolleF1 BolleF1 ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    23
    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-Code:
    $id JRequest::getVar('id''null''post'); 
    und so empfangen.
     

  4. #4
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    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' )"
    BolleF1 bedankt sich. 

  5. #5
    BolleF1 BolleF1 ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    23
    Zitat Zitat von Kalito Beitrag anzeigen
    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' )"

    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.
     

  6. #6
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    var_dump zeigt dir was eine bestimmte Variable ausgib

    PHP-Code:
    var_dump($query
    hab ich das richtig verstanden das die else ausführung funktioniert und nur der if-Zweig ****t nichto der klappt garnichts?
    BolleF1 bedankt sich. 

  7. #7
    BolleF1 BolleF1 ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    23
    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-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 1
    Geändert von BolleF1 (11.11.10 um 19:01 Uhr)
     

  8. #8
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    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-Code:
    $query"INSERT INTO #_auto ('Spaltenname1', 'Spaltenname2',....) VALUES ('Wert1','Wert2',....)"
    php und sql sind bei sowas etwas zickig
    BolleF1 bedankt sich. 

  9. #9
    BolleF1 BolleF1 ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    23
    Zitat Zitat von BolleF1 Beitrag anzeigen
    ich versuche gleich mal eine andere Syntax.
    Das hat auch nicht geklappt. Ich hab diesmal den Code probiert:

    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')"
    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?
    Geändert von BolleF1 (11.11.10 um 19:17 Uhr)
     

  10. #10
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    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?
    BolleF1 bedankt sich. 

  11. #11
    BolleF1 BolleF1 ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    23
    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
    Die drei sind nicht angegeben und auf Null oder auto increment eingestellt

    Hmm , jetzt haben wir fast alles durch nur den Fehler nicht
     

  12. #12
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    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
    PHP-Code:
    if(isset($id)){
         
    update ...
    }
    else{
         
    INSERT

    bzw. (ohne die id-Strktur zu kennen)
    PHP-Code:
    if(id==0){INSERT}
    else {
    UPDATE
    Ansonstem wäre immer noch interessant, was rauskommt, sprich wenn du im if-Zweig ein
    PHP-Code:
    var_dump($query
    reinknallst um zu sehen, was rauskommt.
    Wie prüfst du in der DB, ob schon die ID vorhanden ist?
    BolleF1 bedankt sich. 

  13. #13
    BolleF1 BolleF1 ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    23
    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

    PHP-Code:
    if(isset($id)){
         
    update ...
    }
    else{
         
    INSERT

    Ich habe es so umgesetzt:

    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:

    Wie prüfst du in der DB, ob schon die ID vorhanden ist?
    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.
    // 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)
     

  14. #14
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    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 ....} 
    BolleF1 bedankt sich. 

  15. #15
    BolleF1 BolleF1 ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    23
    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

  1. Suche Programmierer (PHP,MySQL -> Joomla)
    Von sylvus im Forum Stellenangebote (entgeltlich)
    Antworten: 2
    Letzter Beitrag: 16.11.09, 16:43
  2. Ajax in Modul, Fehler Joomla
    Von =fire= im Forum Javascript & Ajax
    Antworten: 17
    Letzter Beitrag: 23.07.09, 16:26
  3. Joomla auf vServer von Server4You keine Daten über Joomla speicherbar
    Von interface im Forum Content Management Systeme (CMS)
    Antworten: 2
    Letzter Beitrag: 30.06.07, 20:56
  4. Antworten: 6
    Letzter Beitrag: 12.06.07, 18:28
  5. Antworten: 13
    Letzter Beitrag: 16.04.06, 20:28

Stichworte