noname: Perl Newbie Fragen

Hello Forum.

Ein paar (triviale) Perl Fragen.

1. Wie konvertiere ich (möglichst elegant ohne zusätzliche Module) von einem datetime "YYYY-MM-DD hh:mm:ss" nach "DD.MM.YYYY hh:mm:ss"?

2. Reicht es aus, SQL-Queries mittels

  
$query = $dbh->prepare("INSERT INTO foo (a, b) VALUES (?, ?)");  
$query->execute($foo, $bar) || die $query->errstr;  

gegen SQL-Injections zu "sichern"?

Das war es auch schon, vorerst. Danke!

  1. Hallo noname!

    möglichst elegant ohne zusätzliche Module

    »Elegant ohne Module« setzt voraus, dass Du kein Newbie mehr bist...

    Perl-Nicht-Mehr-Newbies nutzen allerdings die Module, die Perl bereithält, und darüber hinaus viele weiteren...

    von einem datetime "YYYY-MM-DD hh:mm:ss" nach "DD.MM.YYYY hh:mm:ss"?

    Du kennst split() [ ] Ja. [ ] Nein.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --
    _ - jenseits vom delirium - _

       Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
    1. Du kennst split() [ ] Ja. [ ] Nein.

        
      sub format_datetime {  
              my @datetime = split(/ /, $_[0]);  
              my @date = split(/-/, $datetime[0]);  
              return $date[2].".".$date[1].".".$date[0]." ".$datetime[1];  
      }  
      
      

      Daran hätte ich auch selbst denken können. Danke.

      Hinweise zu Frage 2?

      1. Hallo noname!

        Hinweise zu Frage 2?

        Von mir leider nicht, da ich mich mit Datenbanken noch nie beschäftigt habe. Bisher reichten Flatfiles für meine Belangen ;)

        Falls Du doch nicht so modulfeindig eingestellt bist, hilft Dir vielleicht Date::Today (klick in Sig auf »Heute«).

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --
        _ - jenseits vom delirium - _

           Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
      2. Hallo noname!

        sub format_datetime {
                my @datetime = split(/ /, $_[0]);
                my @date = split(/-/, $datetime[0]);
                return $date[2].".".$date[1].".".$date[0]." ".$datetime[1];
        }

        
        >   
        > Daran hätte ich auch selbst denken können. Danke.  
          
        Auch an join() und reverse() hättest Du denken können:  
          
        su~~~perl
        b format_datetimee {  
                my @datetime = split(/ /, $_[0]);  
                my @date = split(/-/, $datetime[0]);  
                return join(".", reverse @date)." ".$datetime[1];  
        }
        

        Damit lässt sich auch eine Zeile sparen:

        sub format_datetimeee {  
                my @datetime = split(/ /, $_[0]);  
                return join(" ", join(".", reverse split(/-/, $datetime[0])),$datetime[1]);  
        }
        

        Und wem die Index-Zahlen zuwider sind, kann es auch so machen:

        sub format_datetimeeee {  
                my ($dmy, $hms) = split(/ /, $_[0]);  
                return join(" ", join(".", reverse split(/-/, $dmy)),$hms);  
        }
        

        Just my 2 joints ;)

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --
        _ - jenseits vom delirium - _

           Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
      3. Du kennst split() [ ] Ja. [ ] Nein.

        sub format_datetime {
                my @datetime = split(/ /, $_[0]);
                my @date = split(/-/, $datetime[0]);
                return $date[2].".".$date[1].".".$date[0]." ".$datetime[1];
        }

          
        wenn es nur darum geht "-" furch "." zu ersetzen geht das auch einfacher :-)  
          
        $datetime =~ y/-/\./;
        
        1. $datetime =~ y/-/./;

          Stimmt, Danke!

  2. hi,

    1. Reicht es aus, SQL-Queries mittels

    prepared Statement und Platzhalter

    gegen SQL-Injections zu "sichern"?

    Das solltest Du im konkreten Fall mal selber prüfen: Ob es möglich ist, über einen Platzhalter 'code einzuschleusen.

    Unabhängig davon wirst Du Eingaben von Benutzern grundsätzlich filtern, beispielsweise um da alle unerlaubten Zeichen rauszunehmen. Wenn der Platzhalter z.b. für einen Integer steht, werden da nur Ziffern aus einer Benutzereingabe an SQL weitergereicht, sonst nix.

    Viele Grüße,
    Horst Hacke

  3. Moin!

    1. Wie konvertiere ich (möglichst elegant ohne zusätzliche Module) von einem datetime "YYYY-MM-DD hh:mm:ss" nach "DD.MM.YYYY hh:mm:ss"?

    Wenn die Info aus einer SQL-Abfrage kommt: Mit Formatierung in der SQL-Abfrage. DATE_FORMAT() liefert dir alle Möglichkeiten.

    1. Reicht es aus, SQL-Queries mittels

    $query = $dbh->prepare("INSERT INTO foo (a, b) VALUES (?, ?)");
    $query->execute($foo, $bar) || die $query->errstr;

    
    > gegen SQL-Injections zu "sichern"?  
      
    Prepared Statements sichern 100% gegen SQL-Injection ab, wenn man sie korrekt anwendet.  
      
     - Sven Rautenberg
    
    1. Hallo.

      1. Reicht es aus, SQL-Queries mittels

      $query = $dbh->prepare("INSERT INTO foo (a, b) VALUES (?, ?)");
      $query->execute($foo, $bar) || die $query->errstr;

      
      > > gegen SQL-Injections zu "sichern"?  
      >   
      > Prepared Statements sichern 100% gegen SQL-Injection ab, wenn man sie korrekt anwendet.  
        
      Wie sähe denn eine nicht korrekte Anwendung aus?
      
      1. Moin!

        $query = $dbh->prepare("INSERT INTO foo (a, b) VALUES (?, ?)");
        $query->execute($foo, $bar) || die $query->errstr;

        
        > >   
        > > Prepared Statements sichern 100% gegen SQL-Injection ab, wenn man sie korrekt anwendet.  
        >   
        > Wie sähe denn eine nicht korrekte Anwendung aus?  
          
        Ich kann mir tausend Methoden vorstellen, die allesamt auf genau ein zentrales Fail hinauslaufen: Dynamische Generierung des mit "Prepared Statements" abzusichernden Querystrings ohne korrekte Beachtung der SQL-Syntax bzw. deren Escaping-Regeln für Dinge, die eben nicht "Daten" sind.  
          
        Beispielsweise kriegst du die Liste der Felder ja nicht per Prepared Statement dynamisch zusammengesetzt.  
          
         - Sven Rautenberg