Ankündigung

Einklappen
Keine Ankündigung bisher.

Name von Hash Feld auslesen

Einklappen

Neue Werbung 2019

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

  • Name von Hash Feld auslesen

    Gute Tag Leute

    Hab eine kleine Frage. Wie komme ich in einem Hash an den Bezeichner ran?

    Hash:
    PHP-Code:
    $hash["Titel"] = "Hi there!";
    $hash["Category"] = "Greetings";
    $hash["Body"] = "Greetz from anywhere"
    Das möchte ich jetzt in einer Methode so aufschlüsseln, dass ich damit ein Insert-Statement machen kann.

    INSERT INTO table (Titel, Category, Body) VALUES ('Hi there!', 'Greetings', 'Greetz from anywhere')

    Den Query zu bauen ist kein Problem. Nur weiss ich nicht, wie ich an die Werte Titel, Category und Body komme, die ja die Row-Bezeichner für die MySQL-Tabelle sind.

    Gibts eine einfachere Lösung als foreach und dann array_keys? Das wäre so der Lösungsansatz, der mir vorschwebt.

    Grüsse Igäl
    Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
    Mark Twain

  • #2
    wo steht denn das hasch feld?? - kleiner scherz...
    statt foreach kannst du auch die numerischen Arrays, die array_keys () und array_values () liefern per implode (',' , ... ) in SQL Bestandteile umwandeln.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      PHP-Code:
      <?php
      $sql 
      sprintf("INSERT INTO `table` (`%s`) VALUES ('%s')",
        
      implode('`, `'array_keys($hash)),
        
      implode("', '"array_values($hash)));
      ?>
      um array_keys() und array_values() könntest du noch ein array_map('mysql_real_escape_string', ..) legen, um die Daten abzusichern.

      Edit: zu langsam ..

      Kommentar


      • #4
        Naja foreach brauch ich halt, um die Values einzeln prüfen zu können. Ich habe dafür ne adaptierte Version von PsychoEagle's sql_protect-Funktion

        Wobei ich ja einfach array_values() durch eine Schlaufe lassen kann und da alle Werte mit der Funktion überprüfe.

        Herzlichen Dank für die Input's. Werd meine Lösung dann kurz posten für Leute mit dem selben Problem, oder um von Euch auf strukturelle Unlogik aufmerksam gemacht zu werden
        Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
        Mark Twain

        Kommentar


        • #5
          schade dass du mir nicht zuhörst

          Kommentar


          • #6
            Entschuldige bitte. Habe das array_map völlig übersehen, dann doch gesehen, nachgeschaut und jetzt kurz was gebastelt:

            PHP-Code:
                function sql_check_fields($value) {
                    if(
            get_magic_quotes_gpc()) {
                        
            $value stripslashes($value);
                    }

                    if(!
            is_numeric($value)) {
                        
            $value "'"mysql_real_escape_string($value) ."'";
                    }
                    return 
            $value;
                }

                require_once(
            "functions/Mysql.class.php");
                
            $con Mysql::db_connect("localhost""root""""beathirt_zwiigstell");


                
            $ins_hash["Titel"] = "Hi there!";
                
            $ins_hash["Category"] = "Greetings";
                
            $ins_hash["Body"] = "Greetz from anywhere";

                
            $cols implode(","array_keys($ins_hash));
                
            $data implode(","array_map("sql_check_fields"array_values($ins_hash)));

                
            $sql "INSERT INTO ".$table." (".$cols.") VALUES (".$data.");";

                echo 
            $sql;
                
                
            Mysql::db_close($con); 
            Ergibt die Ausgabe:
            Code:
            INSERT INTO (Titel,Category,Body) VALUES ('Hi there!','Greetings','Greetz from anywhere');
            Wie gewollt. Herzlichen Dank.

            Zusatzfrage: Wie rufe ich eine Callback-Funktion auf, die public static ist?

            Geht das mit:
            PHP-Code:
                array_map("Class::function_name"array_values($ins_hash)); 
            ?
            Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
            Mark Twain

            Kommentar


            • #7
              in php5
              PHP-Code:
              class Foo{
                public static function 
              quadrat($a){return $a*$a;}
              }
              print_r(array_map(array('Foo','quadrat'),array(1,2,3,4,5))); 
              Slava
              http://bituniverse.com

              Kommentar


              • #8
                na also, geht doch

                Versuch mal um deiner Effizienz willen, zuerst ins Manual zu schauen, wenn du eine Frage zu einer Funktion hast:
                http://de.php.net/callback
                // Aufruf einer statischen Klassenmethode ohne Instanzierung
                // eines Objekts
                call_user_func(array('MeineKlasse', 'meineCallbackMethode'));

                Kommentar


                • #9
                  Ja das stimmt wohl. Allerdings wars grad so bequem auch gleich danach zu fragen ... Aber Danke Slava
                  Naja wie auch immer. Ich beschäftige mich zur Zeit einfach mit der Optimierung meiner Scripts, was man nicht einfach so ohne weiteres nachschlagen kann und wollte euch fragen, ob eine Update-Funktion wie die Folgende okay ist:


                  PHP-Code:
                          //Funktion sql_check_fields aus oberem Beispiel wäre hier
                      
                  function prepare_hash($val1$val2)    {
                          return 
                  $val1."=".sql_check_fields($val2);
                      }

                      
                  //Beliebiger Hash im Stile $hash['RowName'] = "String" | int | float | etc.

                      
                  $table "table";
                          
                  $condition "ID=1";
                      
                  $temp array_map("prepare_hash"array_keys($ins_hash), array_values($ins_hash));
                      
                  $settings implode(","array_values($temp));
                      
                  $sql "UPDATE ".$table." SET ".$settings." WHERE ".$condition;

                      
                  //mysql_query, Error-Handling, etc. 
                  Ausgabe entspricht meinen Vorstellungen...
                  Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
                  Mark Twain

                  Kommentar


                  • #10
                    Ja ist doch eine runde Sache dein Skript.

                    Kommentar

                    Lädt...
                    X