Ankündigung

Einklappen
Keine Ankündigung bisher.

Eine Klasse für Formularinhalte

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eine Klasse für Formularinhalte

    Bin Anfängerin, also geht nicht zu hart mit mir um.
    Ich möchte eine Klasse schreiben, um die Inhalte von zwei verschiedenen Formularen in die jeweilige DB - Tabellen zu speichern.

    Datenbankverbindung ist vorhanden.

    classDaten.php
    PHP-Code:
    <?php
    class daten
    {    
        function 
    insert($table$inserts)
        {
            if (isset( 
    $_POST['speichern'] ))
            {
                
    $i 0;
                
    $insert "INSERT INTO ".$table." SET ";
        
                foreach (
    $inserts as $key => $value){
                    if(
    $i==0)
                    {
                        
    $insert .= $key." = '".$value."'";
                        
    $i=1;
                    }
                    else
                    {
                        
    $insert .= ", ".$key." = '".$value."'";
                    }
                }
                
                if(
    mysql_query($insert))
                {
                    print 
    "Daten wurden gespeichert";
                }
                else
                {
                    print 
    "Es konnten keine Daten gespeichert werden";
                }
            }
        }
    }
    ?>
    Die Datei wird in der Datei (neuerKunde.php) included.

    neuerKunde.php
    PHP-Code:
    <?php
    require_once('include/db.conf.php');
    require_once(
    'include/classDB.php');
    require_once(
    'include/classDaten.php');

    $DbCon = new DB($db_host$db_user$db_pass$database);

    $daten = new daten();
    $daten->insert('adressen'$insertarray);
    $insertarray = array(
                        
    'vorname'=>$_POST['vorname'],
                        
    'nachname'=>$_POST['nachname']
                        );

    ?>

    <form name="formular" action="<?php echo $SERVER['PHP_SELF']; ?>" method="POST">    
    <?php
    include "form/neuerKunde.php";
    ?>
    </form>
    Formular neuerKunde.php
    Code:
    <fieldset>
        <legend>Ansprechpartner</legend>
            <label for="vorname">Vorname </label> 
                <input type="text" name="vorname"> 
            <label for="nachname">Nachname</label> 
                <input type="text" name="nachname">
    </fieldset>
    Es wird mir folgender Fehler angezeigt:
    Warning: Invalid argument supplied for foreach() in … include\classDaten.php on line 11

    Was mach ich falsch, was muss ich ändern, damit das funktioniert?

  • #2
    Hallo babybone, ich muss schon im Vorfeld meckern. Dein Code hat grundlegende Probleme.

    1. DB Connection
    PHP arbeitet genügsam, was die Datenbankverbindung angeht und speichert sich die global weg. Du solltest Dich darauf aber nicht verlassen, sonder die Connection in Dein daten-Objekt übergeben. Den genauso funktioniert sinnvolles Zusammenarbeiten in der OOP. Konsequenterweise könntest Du auch gleich ein mysqli-Objekt verwenden.
    2. Datensicherheit
    Deine Eingabedaten werden nicht geprüft und Deine INSERTs werden beim Auftauchen des ersten Hochkommas fehlschlagen
    3. Datenprüfung
    Du prüfst die DB-Verbindung nicht, das INSERT wird auch nicht großartig geprüft und die Fehlerausgabe/Bestätigung gehört nicht in die Methoden.

    Kommentar


    • #3
      Zitat von babybone Beitrag anzeigen
      PHP-Code:
      $daten->insert('adressen'$insertarray); 
      $insertarray ist noch nicht definiert. Deshalb kann die foreach-Schleife in der Methode daten::insert nicht ausgeführt werden.

      Kommentar


      • #4
        wenn du das Array erst füllst, nachdem du es schon an die Methode übergeben hast, ist dein fehler nicht verwunderlich.

        PHP-Code:
        $insertarray = array( 
                            
        'vorname'=>$_POST['vorname'], 
                            
        'nachname'=>$_POST['nachname'
                            );
        $daten->insert('adressen'$insertarray); 

        Kommentar


        • #5
          Zitat von babybone Beitrag anzeigen
          PHP-Code:
                      $insert "INSERT INTO ".$table." SET ";
              
                      foreach (
          $inserts as $key => $value){ 
          Dein Problem ist, dass du ein Array ausliest, das gar nicht existiert. Mach mal das s bei inserts weg und schau dann, ob es funktioniert.

          Kommentar


          • #6
            Zitat von Jim Martens Beitrag anzeigen
            Dein Problem ist, dass du ein Array ausliest, das gar nicht existiert. Mach mal das s bei inserts weg und schau dann, ob es funktioniert.
            entschuldige - aber wenn du den Code ( ansatzweise ) gelesen hättest, wüsstest du, dass das vollkommener Schwachsinn ist.

            $insert ist 1) auch kein Array, und 2)dient die foreach-Schleife dazu, die einzelnen Felder/Werte für den insert-Befehl an $insert anzuhängen.

            Kommentar


            • #7
              Sehr ähnlich klingende Variablen solltest Du definitiv vermeiden.

              Kommentar


              • #8
                Zum Thema Variablennamensvergebung.

                Ich habe mir mittlerweile einen Stil angewöhnt mit dem ich sehr gut fahre.

                Hier mal mein Stil mittlerweile.

                Code:
                $arr_VarName = da steckt eine Array drin
                
                $str_VarName = da steckt ein String drin
                
                $chr_VarName = da steckt eine einzeles Charakter drin
                
                $cnt_VarName = da steckt ein Count / Zählwert drin
                
                $int_VarName = da steckt ein integer Wert drin
                
                $bool_VarName = da steckt ein boolscher Wert drin (true oder false)
                
                $dec_VarName = da steckt ein Wert als decimalzahl drin (nur sinnvoll in zusammenhang mit DB Abfragen)
                
                $flo_VarName = da steckt ein floatwert drin
                Und so weiter. Das vermeidet auf alle Fälle schon mal solche ähnlichkeiten die sich beim Code lesen schwerer entdecken lassen und du weist auch über sehr großen Code was für ein Datentyp in dieser Variablen drin steckt.

                Als Variablennamen solltest du dir auch wenns geht selbsterklärende Namen aussuchen wo du auch noch in der Lage bist nach einem Jahr vieleicht den Code zu lesen. Natürlich Kommentare sollten immer sein, aber selbsterklärende Namen sind trotzdem von großen Vorteil.

                Gruß Litter

                Kommentar


                • #9
                  Das Prinzip nennt sich „Ungarische Notation“. Weil ich recht sprechende Bezeichner verwende, benutze ich nur einen Einzelnen Buchstaben als Prefix.

                  Wie auch immer - das Problem dürfte hinreichend aufgeklärt sein.

                  Kommentar


                  • #10
                    FYI und um Offtopic vielleicht zu vermeiden: http://www.php.de/off-topic-diskussi...-notation.html

                    Edit: ↓↓↓ Ist so verlässlich wie der Programmierer.

                    Kommentar


                    • #11
                      Das Prinzip nennt sich eher "Microsoft'sche" Ungarische Notation: http://de.wikipedia.org/wiki/Ungarische_Notation

                      In einer dynamisch schwachen Typisierung wie bei PHP ist das eh nicht verlässlich.

                      Kommentar


                      • #12
                        Ich mache das in C++ oder C auch so und werde das auch in PHP so beibehalten. Es ist eine Notation die für mich ordentlich zu lesen ist. Ob das in einer schwach oder stark getypten Sprache ist, ist dabei egal.

                        Wichtig ist das man eine Notation strikt beibehält und nicht von da nach da mal ändert.

                        Gruß Litter

                        Kommentar


                        • #13
                          Ich wollte eigentlich eine Zweit-Diskussion in diesem Thread vermeiden.

                          In einer dynamisch schwachen Typisierung wie bei PHP ist das eh nicht verlässlich.
                          Genau das Gegenteil ist in meinen Augen der Fall. Die Notation hilft mir, in der untypisierten Sprache eine persönliche Konvention einzugehen und -halten, wozu mich die Sprache nicht zwingt. Konsequente Dateibenamungen, Endungen wie tmpl.php und inc.php oder bestimmte Verzeichnisstrukturen (wie sie viele beim MVC einsetzen) sind da nichts anderes. Zu CamelCase zwingt auch niemand oder zu Konstantenbezeichnern in Versalien. Letzten Endes sagt die Notation nichts über den Typ aus, aber über den erwarteten Typ (ähnlich wie ein Type Hinting in einer Methode). In seltenen Fällen, wo ich wirklich mal Typwechsel zulasse (bzw. verschiedene Typen erwarte), benutze ich auch durchaus den Pseudotyp mixed. Bin ja kein Spezifikations-Nazi.

                          Das Prinzip nennt sich eher "Microsoft'sche" Ungarische Notation
                          Nur weil Microsoft das „erfunden“ hat, finde ich es reichlich undifferenziert, das Wort „Microsoft“ zu benutzen, um Bashing von etwas zu betreiben, was Dir nicht gefällt.

                          Kommentar


                          • #14
                            Zitat von nikosch Beitrag anzeigen
                            Ich wollte eigentlich eine Zweit-Diskussion in diesem Thread vermeiden.
                            Ich wollte eigentlich auch keine Diskussion beginnen, sondern lediglich darauf hinweisen, dass das nicht die ursprüngliche Ungarische Notation im Sinne des Erfinders ist.
                            Ich selbst habe auch schon diese Notation benutzt, dann wieder alles klein mit Unterstrichen (keine Ahnung wie das heißt) und zur Zeit bin ich bei CamelCase - jeder wie er mag, ich habe nichts dagegen.

                            Zitat von nikosch Beitrag anzeigen
                            Nur weil Microsoft das „erfunden“ hat, finde ich es reichlich undifferenziert, das Wort „Microsoft“ zu benutzen, um Bashing von etwas zu betreiben, was Dir nicht gefällt.
                            Diese Aussage musste ich jetzt mehrmals lesen und komme trotzdem nicht mit.
                            "Microsoft'sche" steht selbst im Wikipediaartikel - und warum ist das undifferenziert? Und Bashing, siehe oben.

                            Wenn du dich angegriffen fühlst, ist deine Phantasie daran Schuld, ich ziehe mir die Jacke nicht an.

                            Kommentar


                            • #15
                              Oh, ok, dann habe ich Dich wohl mißverstanden. Hatte auch diesen Artikel gelesen: http://de.wikipedia.org/wiki/Namensk...ische_Notation Sorry dafür.

                              Kommentar

                              Lädt...
                              X