Patrick: Frage zu split

Hi Forum,

bin eigentlich kein Perl-Freak, deswegen hab ich eine Frage dazu.
Ich hab hier ein script, welches ich ergänzen will. Hier das Script:

-- snipp --

@$domain = split(/@/,$email);

$sth = $dbh->prepare("INSERT INTO tickets (subject, name, email, cat, status, ID, priority, ip, timestamp, userid) VALUES ($eml_subj, $name, '$email', '$cat', 'open', $ticket, $pri, '" . $header{'X-Originating-IP'} . "', FROM_UNIXTIME('$gmtime') + 0, '$domain[1]')");
        $sth->execute();

-- snipp --

Die Variable $domain mit dem split ist von mir. Der Rest bis auf das userid und $domain[1] ist Teil des Scriptes, welches auch funktioniert.
Wenn ich das hier so ausführe, bleibt der Eintrag in der Zelle userid der Tabelle leer. Was mach ich da falsch?
Ich will eigentlich nur aus der Variable $email die Senderdomain rausziehen.

Vielen Dank
Patrick

  1. Hat sich erledigt.
    Danke
    Patrick

  2. Hell-O!

    @$domain = split(/@/,$email);

    Huch, das "@$var" kenne ich ja noch gar nicht (will aber nix heißen...)

    Wenn ich das hier so ausführe, bleibt der Eintrag in der Zelle userid der Tabelle leer. Was mach ich da falsch?

    So sollte es funktionieren:

    # Array-Variante  
    my @domain = split /\@/, $email;  
      
    # Skalar-Variante  
    my $domain = (split /\@/, $email)[1];
    

    Zur Erklärung:
    Die split-Anweisung liefert dir ein Array als Ergebnis. Also musst du links der Klammer entweder ein Array notieren (@domain) oder, falls du den Rest nicht brauchst, nur einen Skalar ($domain), in dem du das zweite Element speicherst. Nimmst du ein Array, steht deine Domain in $domain[1], verwendest du die Skalar-Variante, musst du $domain ohne Indexangabe verwenden.

    Siechfred

    --
    Hier könnte Ihre Werbung stehen.
    Schöne Wörter, Teil 1 || Geld stinkt nicht
    1. Hi Siechfred,

      danke für deine Hilfe.
      Und wieder bin ich ein bisschen schlauer...;-)

      Dank dir
      Patrick

  3. Hallo,

    gehört zwar nicht zu diesem Thema, aber bitte, bitte, verwende Platzhalter in den sql anweisungen, und mach dich schlau über sql injection.

      
    my $q = $db->prepare("insert into table (a, b) values (?, ?)");  
    $q->execute('a', 'b');  
      
    # oder  
      
    $db->do("insert into table (a, b) values (?,?)", undef, 'a', 'b');  
    
    

    falls du einen guten grund hast, das nicht zu tun, dann verwende bitte, bitte, trotzdem vorher $db->quote() für die eingesetzten variablen.

    gruss

    --
    Swiss Army Chainsaw
    Terrorific!
    Given a cow full of milk, should the milk un-cow itself, or should the cow milk itself?