Kalle_B: foreach-Problem

Hallole,

in allen Eingabefeldern möchte ich das Hohkomma durch ein Minuszeichen ersetzen.

Im Einzelfeld klappt das:
$_POST['firma1'] = str_replace( "'", '-', $_POST['firma1'] );

aber ich komme nicht drauf, warum dieses nicht funzt:
foreach($_POST   as $k => $v ) $_POST  ['$k'] = str_replace( "'", '-', $v );

Bitte um Hilfe.

Kieben Gruß, Kalle

  1. Hallo,
    Bei '$k' wird das $k nicht durch den Wert der Var ersetzt

    1. Bei '$k' wird das $k nicht durch den Wert der Var ersetzt

      Das war's, danke.

  2. Hallo Kalle,

    foreach($_POST   as $k => $v ) $_POST  ['$k'] = str_replace( "'", '-', $v );

    erstens halte ich es für keine gute Idee, auf die geschweiften Klammern für einen Anweisungsblock zu verzichten.

    zweitens vermeide ich nach Möglichkeit Variablensubstitution in Zeichenketten.
    Bei Dir geht es doppelt schief, weil Du zwei einfache Anführungszeichen verwendest, die einfach überflüssig sind.

      
    foreach ($_POST as $k => $v) {  
        $_POST[$k]  // nicht $_POST['$k']! Dein Code erzeugt damit genau einen neuen  
                    // Eintrag im Array $_POST - das willst Du jedoch nicht.  
            = str_replace("\'", '-', $v);  
    } 
    

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      erstens halte ich es für keine gute Idee, auf die geschweiften Klammern für einen Anweisungsblock zu verzichten.

      Ist okay, aber manchmal ist's einfach übersichtlicher:

        
      if ( get_magic_quotes_gpc() )  
      {  
        foreach($_GET    as $k => $v ) $_GET   [$k] = stripslashes($v);  
        foreach($_POST   as $k => $v ) $_POST  [$k] = stripslashes($v);  
        foreach($_COOKIE as $k => $v ) $_COOKIE[$k] = stripslashes($v);  
      }  
      
      

      Das hatte wegen meines Fehlers ['$k'] nicht geklappt.

      zweitens vermeide ich nach Möglichkeit Variablensubstitution in Zeichenketten.

      Okay, wie bekommst du die Firma Manni's Kneipe in die Datenbank?
      ... SET ...
      ,firma1   = '".$row_adr['firma1']."'

      Bei Dir geht es doppelt schief, weil Du zwei einfache Anführungszeichen verwendest, die einfach überflüssig sind.

      foreach ($_POST as $k => $v) {
          $_POST[$k]  // nicht $_POST['$k']! Dein Code erzeugt damit genau einen neuen
                      // Eintrag im Array $_POST - das willst Du jedoch nicht.
              = str_replace("'", '-', $v);
      }

        
      Das habe ich nicht verstanden.  
        
      Lieben Gruß, Kalle
      
      1. Mahlzeit,

        zweitens vermeide ich nach Möglichkeit Variablensubstitution in Zeichenketten.

        Okay, wie bekommst du die Firma Manni's Kneipe in die Datenbank?
        ... SET ...
        ,firma1   = '".$row_adr['firma1']."'

        Indem man den Inhalt der Variablen kontextbezogen sinnvoll maskiert:

        $sql = "... SET ... firma1 = '".mysql_real_escape_string($row_adr['firma1'])."' ...";

        Bei Dir geht es doppelt schief, weil Du zwei einfache Anführungszeichen verwendest, die einfach überflüssig sind.

        Das habe ich nicht verstanden.

        Preisfrage: wo liegt der Unterschied zwischen $k und '$k'?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Mahlzeit,

          Preisfrage: wo liegt der Unterschied zwischen $k und '$k'?

          Ach so, das war doch schon geklärt.

          LG Kalle

          1. Hallo Kalle,

            Preisfrage: wo liegt der Unterschied zwischen $k und '$k'?

            Ach so, das war doch schon geklärt.

            als ich mein Posting begann, war das noch nicht geklärt. Außerdem kann man nicht zu oft wiederholen:

            1.) "$i" statt $i zu schreiben ist in aller Regel schlechter Stil. Wie schnell
                wird aus $i über "$i" ein '$i' und aus schlechtem Stil wird ein Fehler,
                siehe Deinen eigenen Code.
            2.) Auf Blockbegrenzer zu verzichten ist in aller Regel schlechter Stil und
                führt oft zu schwierig zu entdeckenden Fehlern.

            Und nein, ich finde Deine Schreibweise _nicht_ übersichtlicher. Ich finde sie einfach nur fehleranfälliger. Dies gilt meiner Meinung nach für beide von mir angeführten Punkte. Sie führen zu Fehlern, zu hübsch versteckten Fehlern. Das Forumsarchiv belegt dies mit vielen netten Beispielen.

            Freundliche Grüße

            Vinzenz

            1. Hallo Vinzenz,

              ich habe den Thread verfolgt und gelesen.

              <<Auf Blockbegrenzer zu verzichten ist in aller Regel schlechter Stil..>>

              Was meinst du genau mit "Blockbegrenzer" in diesem Fall?

              viele Grüße
              hawk

              1. Hallo

                <<Auf Blockbegrenzer zu verzichten ist in aller Regel schlechter Stil..>>

                Was meinst du genau mit "Blockbegrenzer" in diesem Fall?

                in PHP sind das typischerweise geschweifte Klammern ({}), siehe auch Kontrollstrukturen. Es gibt aber auch eine alternative Syntax.

                In anderen Programmiersprachen kann es andere Blockbegrenzer wie z.B. Schlüsselworte BEGIN und END geben.

                Ach ja: Ich halte es auch für schlechten Stil, auf das Anweisungsendezeichen, in PHP typischerweise das Semikolon, zu verzichten - auch dann, wenn es erlaubt ist.

                Freundliche Grüße

                Vinzenz

      2. echo $begrüßung;

        Okay, wie bekommst du die Firma Manni's Kneipe in die Datenbank?

        Möglichkeit A: Benenn sie um, das ist sowieso eine falsche Genitivschreibweise.
        Möglichkeit B: Beschäftige dich mit dem Grundsatz, dass Daten immer kontextgerecht behandelt werden müssen, wenn sie in einen bestimmten Kontext eingefügt werden.
        Ein SQL-Statement mischt Befehls- und Datenbestandteile zu einem Text zusammen. Es gibt Regeln, wie die Daten und bestimmte Zeichen darin zu notieren sind, damit die Eindeutigkeit zwischen Befehl und Daten gewahrt bleibt. Diese heißen zum einen Quotierung und zum anderen Maskierung. Das Quotieren kennst du ja offensichtlich schon, zum Maskieren nimmt man für MySQL mysql_real_escape_string() oder eine gleichwertige Funktion der Datenbank-API.

        echo "$verabschiedung $name";