Zum Inhalt springen

Monty82

Mitglieder
  • Gesamte Inhalte

    643
  • Benutzer seit

  • Letzter Besuch

Beiträge von Monty82

  1. Wie gesagt, vermute ich, dass man das doch sicher "schöner" und schneller mit einem oder zwei regex hinbekommt, oder?

    Ich hab mich mal dran versucht und würd's so machen:


    <?php
    $string = "<p>ARTICLE[id=4 format=html]</p>HEADER[id=1 format=html transform=upper]<div><p>ARTICLE[id=4 format=csv]</p></div><br><p>ARTICLE[id=5]</p>";


    $arrRes = array();

    if (preg_match_all('/([\w]+)\[([^\]]+)\]/s', $string, $arrPregRes) > 0) {
    foreach ($arrPregRes[1] as $key=>$val) {
    if (!array_key_exists($val, $arrRes)) {
    $arrRes[$val] = array();
    }
    if (preg_match_all('/([^\s=]+)=([^\s]+)/s',$arrPregRes[2][$key], $arrInnerPregRes) > 0) {
    $arrTmp = array();
    foreach ($arrInnerPregRes[1] as $iKey=>$iVal) {
    $arrTmp[$iVal] = $arrInnerPregRes[2][$iKey];
    }
    $arrRes[$val][] = $arrTmp;
    }
    }
    }

    echo "<pre>";
    print_r($arrRes);
    echo "</pre>";
    ?>
    [/PHP]

  2. Ich habe im Netz gelesen, dass es spezielle Operatoren für Matching gibt, mit deren Hilfe, dieses Problem zu lösen ist. \Q\E aber was ist das und wie kann ich es nutzen?

    Kann mir bitte jemand bei diesem Problem helfen?

    
    if ($line =~ m/^\Q$input\E/){...}
    
    

    Das \Q sorgt dafür, das alle nachfolgenden Zeichen, die in Perl bzw. im Regulären Ausdruck eine besondere Rolle spielen könnten, bis zum eventuellen Vorkommen von \E mit \ escaped werden.

  3. Du könntest preg_replace_callback() benutzen:


    <?php

    function _replaceVar($_arrMatch) {
    $mixRes = '';
    if (isset($GLOBALS[$_arrMatch[1]])) {
    $mixRes = $GLOBALS[$_arrMatch[1]];
    }
    return $mixRes;
    }


    $strVarTest = 'test';
    $intVarTest = 1;

    $strTest = 'Das ist ein Test mit den Werten {${strVarTest}} und {${intVarTest}}.';

    echo $strTest."<hr>";

    $strTest = preg_replace_callback('/\{\$\{([^\}]+)\}\}/','_replaceVar',$strTest);

    echo $strTest;

    ?>
    [/PHP]

    Edit:

    Ich habe mir gerade mal den e-Modifier angeschaut.

    Es geht auch so einfacher:

    [PHP]
    $strTest = preg_replace('/\{\$\{([^\}]+)\}\}/e','\$GLOBALS[\\1]',$strTest);

    Ich vermute, Du müsstest in Deinem Beispiel das Dollar-Zeichen escapen und für die Back-Referenz zwei Escape-Zeichen verwenden.

  4. preg_quote() maskiert alle Zeichen, die in RegEx eine besondere Funktion haben. Daher auch '\.'.

    Du hast noch zusätzlich das Problem, dass du die '/' maskieren müsstest, da du diese als Begrenzer für deinen RegEx nimmst. Alternativ kannst du auch '§' oder ein anderes beliebiges Zeichen als Begrenzer nehmen, dass nicht innerhalb deines RegEx vorkommt.

    Alternativ kann man der Funktion preg_quote() auch als zweiten Parameter den Begrenzer übergeben, der dann automatisch mit maskiert wird.

  5. - Virenscanner-Updates

    - Spamassassin Rules-Updates

    - Mailfetcher

    - MRTG

    - Spamassassin Autolearner (HAM/SPAM Klassifizierung anhand eines bestimmten IMAP-Ordners)

    - Update der Distributions-Paket-Listen

    - Logrotate

    - Zeit-Synchronisation

    - AwStats

    - DynDns

  6. Mit PHP ist das definitiv nicht möglich, da das Script erst geparst wird, wenn der Datei-Upload fertig ist.

    Ich hab's damals so gelöst, dass ich den Datei-Upload mit Perl realisiert habe und beim Aufruf des Perl-Scripts die aktuelle PHP-Session-ID mit übergeben habe.

    So konnte ich den Upload-Status durch das Perlscript regelmäßig in eine temporäre Session-abhängige Datei schreiben lassen, und mittels PHP/Ajax auslesen.

  7. Noch ein Tipp!

    Aus dem "[...]LIKE '%M%' [...]" in Deiner Query mach bitte unbedingt ein "[...] =".$_POST['tag]."' [...]", weil ein "Like" immer sehr viel an Performance kostet.

    Wo wir hier gerade bei Tipps sind:

    Gebe niemals Benutzereingaben ungefiltert an die Datenbank weiter!

    SQL-Injection

    
    "[...] ='".mysql_real_escape_string($_POST['tag'])."' [...]"
    
    

    Zusätzlich sollte man vorher noch die Gültigkeit der Eingabe überprüfen.

  8. Mit regulären Ausdrücken hätte es so aussehen können:


    <?php
    $strTmp = 'das ist ein {5,0,1} test {5,0,0} zum ersetzen von bildern';

    $arrReplace = array();
    if (preg_match_all('/{([0-9]+),([01]),([01])}/s',$strTmp,$arrPregRes) > 0) {
    if (is_Array($arrPregRes) && is_Array($arrPregRes[0])) {
    foreach ($arrPregRes[0] as $key=>$val) {
    if (is_Array($arrReplace) && !array_key_exists($val,$arrReplace)) {
    $intImgId = intval($arrPregRes[1][$key]);
    $intBorder = intval($arrPregRes[2][$key]);
    $intSize = intval($arrPregRes[3][$key]);
    if ($intSize == 1) $strFile = 'bild_mit_id_'.$intImgId.'_gross.jpg';
    else $strFile = 'bild_mit_id_'.$intImgId.'_klein.jpg';
    $arrReplace[$val] = '<img src="'.$strFile.'" border="'.$intBorder.'">';
    }
    }
    }
    }

    if (is_Array($arrReplace)) {
    foreach ($arrReplace as $key=>$val) {
    $strTmp = str_replace($key,$val,$strTmp);
    }
    }

    echo $strTmp;
    ?>
    [/PHP]

  9. <?php

    $pwe=mysql_query("SELECT pw FROM users WHERE user_id = $user");

    if($pass == $pwe)
    {
    echo"Der geschützte Bereich.";
    }
    ?> [/PHP]

    Es wird wohl daran liegen, dass $pwe nur eine Resource ist, und nicht das ausgelesene Passwort aus der DB beinhaltet.

    [PHP]<?php

    $pwe=mysql_query("SELECT pw FROM users WHERE user_id = $user");

    if($pwe && ($arrRow = mysql_fetch_assoc($pwe)) && ($pass == $arrRow['pw']))
    {
    echo"Der geschützte Bereich.";
    }
    ?>

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...