[REGEX] Angabe muss nicht vorhanden sein

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

  • [REGEX] Angabe muss nicht vorhanden sein

    Ich hab hier mal was gebastelt gehabt.

    Code:
                    $dbase = "mysql://user:passwort@localhost/database";
                    // $dbase = "mysql://user:@localhost/database";
    
                    $muster = "|^mysql://[a-z0-9\.\_\-]+(:[a-z0-9\.\_\-]+)?@[a-z0-9\.\_\-]+/[a-z0-9\.\_\-]+$|i"; // update: 04:04 Uhr
                    if(preg_match($muster, $dbase))
                    {
                        $data = preg_replace("/\mysql:\/\/(.*?):(.*?)@(.*?)\/(.*?)/si", "\\1:\\2:\\3:\\4", $dbase);
                        $e_data = explode(':', $data);
                        $db_host = $e_data[2];
                        $db_user = $e_data[0];
                        $db_pass = $e_data[1];
                        $db_name = $e_data[3];
                    }
                    else
                    {
                        Database::Error(2, 'Die Syntax der MySQL-Daten ist ungültig.');
                    }
    1) würde jede DB Bezeichnung durchgehen? oder würds bei irgendner Bezeichnung Fehler geben?

    2) in $data, das 2te (.*?), also das Passwort, muss ja ned unbedingt gegeben sein, nur es funktioniert nicht wenns ned gegeben ist. mit dem z.Zt. auskommentierten $dbase gehts ned!

    // BUG:
    wenn in einem [php] irgendwo nen \ auftritt wirds gekillt... musste nu schon [code] nehmen wegen den \ in $muster
    Zuletzt geändert von freq.9; 03.08.2004, 04:05.
    Admin of RealScripts

  • #2
    Re: [REGEX] Angabe muss nicht vorhanden sein

    1) würde jede DB Bezeichnung durchgehen? oder würds bei irgendner Bezeichnung Fehler geben?
    wer kann das schon mit bestimmtheit sagen? ich nicht ^^
    2) in $data, das 2te (.*?), also das Passwort, muss ja ned unbedingt gegeben sein, nur es funktioniert nicht wenns ned gegeben ist. mit dem z.Zt. auskommentierten $dbase gehts ned!
    also,

    wenn du deinen passwortlosen string so übergibst,
    Code:
    mysql://user@localhost/database
    dann paßt es mit
    Code:
    #mysql://([\d\w.\-]+):?([\d\w.\-]+)?@([\d\w.\-]+)/([\d\w.\-]+)#i
    du hast im zweiten unterausdruck das passwort (leer, wenn keins übergeben ...).
    willst du unbedingt
    Code:
    mysql://user:@localhost/database
    verwenden, also ein vorhandener : auch bei nicht vorhandensein des pw, paßt es mit
    Code:
    #mysql://([\d\w.\-]+):([\d\w.\-]+)?@([\d\w.\-]+)/([\d\w.\-]+)#i
    ...

    das anschließenden preg_replace kannst du dir sparen, preg_match gibt dir die teile doch schon wieder, wenn du ein $result angibst, ...
    damit sollte sich das
    nur es funktioniert nicht wenns ned gegeben ist. mit dem z.Zt. auskommentierten $dbase gehts ned!
    auch erübrigen ...

    // BUG:
    wenn in einem [php ] irgendwo nen \ auftritt wirds gekillt... musste nu schon [code ] nehmen wegen den \ in $muster
    ja, ... die code-tags bieten sich da an ... im quote findet man übrigens das original ...

    edit: ob meine regexp sicherer sind als deine, naja, glaub ich nicht ... eher unsicherer, ich hab halt nur aufs passwort geschaut ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Hi,

      schau mal bei PEAR vorbei, das DB Package macht es doch auch so. Vielleicht kannst Du ja noch was davon benutzen.

      Gruß GriZZ

      Kommentar


      • #4
        Also für mich sieht das so aus, als könntest Du für das verwendete Format auch » parse_url verwenden. Bei Deiner Methode vermisse ich übrigens den Port/den Socket, der manchmal ungemein praktisch sein kann.
        Zuletzt geändert von Cymon; 03.08.2004, 10:41.
        Happiness is an empty error log

        Kommentar


        • #5
          Original geschrieben von GriZZ
          Hi,

          schau mal bei PEAR vorbei, das DB Package macht es doch auch so. Vielleicht kannst Du ja noch was davon benutzen.

          Gruß GriZZ
          Ich werde mit PEAR nicht anfangen wenn ich beim Provider auch kein PEAR nutzen kann. Ich kanns druff packen aber nicht nutzen wegen dem safe_mode glaub. Da bringt mirs arbeiten mit PEAR nichts.

          @derHund:
          Okay danke ich werde es testen.
          Admin of RealScripts

          Kommentar


          • #6
            Hi,

            Du sollst auch nicht das PEAR nutzen sondern dir nur mal das DB Packet saugen, die haben dort auch funktionen dafür geschrieben, evtl hilf das weiter.
            Code:
            $dsn = 'mysql://user:password@host/database' in DB::parseDSN
            das war es auch schon. Nur ein Tipp.


            Gruß GriZZ

            Kommentar


            • #7
              aso ^^ naja aber es funzt nu
              Admin of RealScripts

              Kommentar


              • #8
                Funzt nicht... Wenn das Passwort nicht gegeben ist wird alles verschoben:

                $mysql_host = 'localhost';
                $mysql_user = 'root';
                $mysql_pass = 'hallo';
                $mysql_name = 'gbv6';

                -> e_data:
                $e_data[0] = root
                $e_data[1] = hallo
                $e_data[2] = localhost
                $e_data[3] = gbv6

                --------------------------------------------------------------

                $mysql_host = 'localhost';
                $mysql_user = 'root';
                $mysql_pass = '';
                $mysql_name = 'gbv6';

                -> e_data:
                $e_data[0] = root
                $e_data[1] = localhost
                $e_data[2] = gbv6
                $e_data[3] = NULL
                Admin of RealScripts

                Kommentar


                • #9
                  Funzt nicht... Wenn das Passwort nicht gegeben ist wird alles verschoben:
                  klar geht das, habs doch getestet

                  hast du das preg_replace noch drinne? nimms mal weg ... zeig mal aktuellen code ...

                  btw: aus pear-db ...
                  PHP-Code:
                       The format of the supplied DSN is in its fullest form:
                       *
                       *  
                  phptype(dbsyntax)://username:password@protocol+hostspec/database
                       
                  *
                       * 
                  Most variations are allowed:
                       *
                       *  
                  phptype://username:password@protocol+hostspec:110//usr/db_file.db
                       
                  *  phptype://username:password@hostspec/database_name
                       
                  *  phptype://username:password@hostspec
                       
                  *  phptype://username@hostspec
                       
                  *  phptype://hostspec/database
                       
                  *  phptype://hostspec
                       
                  *  phptype(dbsyntax)
                       *  
                  phptype 
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar

                  Lädt...
                  X