tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von CPoly
  • 1 Beitrag von CPoly
  • 1 Beitrag von Raisch
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
345
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Hallöle

    Mit Preg Match hab ich so immer meine Schwierigkeiten.

    Ich möchte eine Tabelle auslesen und diese in Mysql schreiben, irgendwas hab ich aber bei der Pattern falsch eingegeben weil ich als Resultat die Namen mit der Tabelle geliefert bekomme.

    PHP-Code:
    preg_match_all('/<td class=\"column1\">(.*)<\/td>/isU'$table$treffer); 
      
      foreach (
    $treffer as $key => $value) {
        
        foreach (
    $value as $name) {
        
        echo 
    $name;
        
    //$insert = "INSERT INTO tabelle (name) values ('$name')";    
        //$db->query($insert);
        
    }
      } 
    $name liefert mir <td class="column1">NameXyz</td>

    ich brauch aber nur den NameXyz
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Moin,

    ich bin kein Regex-Experte, aber ich würde mal das hier versuchen:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    <?php
    $table = <<<EOT
    <table class="foo">
        <tr>
            <td class="column1">Zeile1 - Spalte1</td>
            <td class="column2">Zeile1 - Spalte2</td>
        </tr>
        <tr>
            <td class="column1">Zeile2 - Spalte1</td>
            <td class="column2">Zeile2 - Spalte2</td>
    </tr>
    </table>
    EOT;
     
    preg_match_all('/<td class="column1">([^<\/td>].+?)<\/td>/is', $table, $treffer);
    array_shift($treffer);
     
    foreach ($treffer as $key => $value) {
     
        foreach ($value as $name) {
     
            var_dump( $name );
            //$insert = "INSERT INTO tabelle (name) values ('$name')";
            //$db->query($insert);
        }
    }

    Du hast den Ungreedy-Modifier eingebaut, den würde ich weglassen, sonst bekommst du ungewollte Resultate.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Hier stand Unfug.
     

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Zitat Zitat von CPoly Beitrag anzeigen
    Interessant, ich bekomme mit exakt deinem Code "NameXyz" ausgegeben.
    Hast du auch mal den HTML-Source angeschaut?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  5. #5
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von saftmeister Beitrag anzeigen
    Hast du auch mal den HTML-Source angeschaut?
    Ja (siehe Edit :-D), aber trotzdem war die zweite Ausgabe ohne den HTML Teil (es sind ja zwei Gruppen). Also hat sein Code korrekt funktioniert, nur ohne "PREG_SET_ORDER" lässt sich mit Gruppen nicht intuitiv arbeiten.

    PHP-Code:
    <?php
    $table 
    = <<<EOT
    <table class="foo">
        <tr>
            <td class="column1">
                Zeile1 - Spalte1
            </td>
            <td class="column2">Zeile1 - Spalte2</td>
        </tr>
        <tr>
            <td class="column1">Zeile2 - Spalte1</td>
            <td class="column2">Zeile2 - Spalte2</td>
        </tr>
    </table>
    EOT;

    preg_match_all('/<td class=\"column1\">(.*)<\/td>/isU'$table$matchesPREG_SET_ORDER);

    foreach(
    $matches as $match) {
        echo 
    $match[1];
        echo 
    "\n";
    }
    ?>
    saftmeister bedankt sich. 

  6. #6
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Spitze ich danke euch beiden

    Funktioniert
     

  7. #7
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Jetzt hab ich aber noch ein kleines Problemchen, wie bekomme ich alles auf einmal in die Mysql Datenbank eingefügt ?

    PHP-Code:
     preg_match_all('/<td class=\"column1\">(.*)<\/td>/isU'$table$column1PREG_SET_ORDER);
      
    preg_match_all('/<td class=\"column2\">(.*)<\/td>/isU'$table$column2PREG_SET_ORDER);
    preg_match_all('/<td class=\"column3\">(.*)<\/td>/isU'$table$column3PREG_SET_ORDER);
      
    foreach(
    $column1 as $match) {
        
        echo 
    $match[1];
        echo 
    "\n";
        
        
    $insert "INSERT INTO tabelle (name) VALUES ('$match[1]')";    
        
    $db->query($insert);
        

     

  8. #8
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    PHP-Code:
    $query 'INSERT INTO t (name) VALUES ';

    foreach(
    $matches as $match) {
        
    $query $query."('".mysql_real_escape_string($match[1])."'),";
    }

    $query substr($query0strlen($query) - 1);

    $query .= ';';

    echo 
    $query
     

  9. #9
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Könnte man die preg-Aufrufe nicht zusammen in einen kombinieren, also etwa so:

    Code php:
    1
    
    preg_match_all('/<td class=\"column[1-3]\">(.*)<\/td>/isU', $table, $columns, PREG_SET_ORDER);

    Dann könntest du dir nämlich auch 3 foreach-Durchläufe sparen
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  10. #10
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Das geht nicht weil die Werte von column1 in eine Datenbank Spalte kommen und die von 2 in die 2te Spalte.

    Sonst hab ich ja alle 3 in einer Spalte oder ?
     

  11. #11
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Richtig, das konnte man aber nicht erkennen
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  12. #12
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Jap konnt man nicht
     

  13. #13
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Hatte das dann eben falsch verstanden. Ich dachte du wolltest die Datebank nicht zuspammen und nur eine einzige Anfrage schicken.

    Man nehme einfach noch zwei weitere Gruppen:
    PHP-Code:
    <?php
    $table 
    = <<<EOT
    <table class="foo">
        <tr>
            <td class="column1">Zeile1 - Spalte1</td>
            <td class="column2">Zeile1 - Spalte2</td>
            <td class="column3">Zeile1 - Spalte3</td>
        </tr>
        <tr>
            <td class="column1">Zeile2 - Spalte1</td>
            <td class="column2">Zeile2 - Spalte2</td>
            <td class="column3">Zeile2 - Spalte3</td>
        </tr>
    </table>
    EOT;

    preg_match_all(
        
    '/<td class=\"column1\">(.*)<\/td>\s*<td class=\"column2\">(.*)<\/td>\s*<td class=\"column3\">(.*)<\/td>/isU',
        
    $table,
        
    $matches,
        
    PREG_SET_ORDER);

    foreach(
    $matches as $match) {
        echo 
    $match[1];
        echo 
    "\n";
        echo 
    $match[2];
        echo 
    "\n";
        echo 
    $match[3];
        echo 
    "\n";
    }
    ?>
    Aber trotzdem sollte man das mit #8 kombinieren.
    Starfox2007 bedankt sich. 

  14. #14
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Ich denke mal, so sollte es passen:
    PHP-Code:
    function prepareQueryValues( array $matches )
    {
        
    $query '';
        foreach( 
    $matches as $match ) {
            
    $query.= '(\''.mysql_real_escape_string$match[1] ).'\',';
            
    $query.= '\''.mysql_real_escape_string$match[2] ).'\',';
            
    $query.= '\''.mysql_real_escape_string$match[3] ).'\'),';
        }

        return 
    substr$query0, - ).';';
    }

    preg_match_all(
        
    '#<td class="column1">(.*?)</td>\s*'.
        
    '<td class="column2">(.*?)</td>\s*'.
        
    '<td class="column3">(.*?)</td>#is',
        
    $table,
        
    $matches,
        
    PREG_SET_ORDER
    );

    $query 'INSERT INTO tabelle (spalte1,spalte2,spalte3) VALUES ';
    $query.= prepareQueryValues$matches );

    echo 
    $query;
    $db->query$query ); 
    Gruß
    Starfox2007 bedankt sich. 

  15. #15
    Avatar von Starfox2007
    Starfox2007 Starfox2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2010
    Beiträge
    87
    Jawohl jetzt funktionierts, wusste nicht das man alle 3 in eine preg_match Abfrage bekommt.

    Beide Script funktionieren Super

    Vielen Vielen Dank
    Geändert von Starfox2007 (08.01.12 um 16:31 Uhr)
     

Ähnliche Themen

  1. Preg Match
    Von Lektor21 im Forum PHP
    Antworten: 8
    Letzter Beitrag: 15.10.09, 11:16
  2. Preg match all Problem
    Von starfoxfs im Forum PHP
    Antworten: 2
    Letzter Beitrag: 11.05.09, 09:09
  3. preg match, anders rum?
    Von QUEST08 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 20.12.08, 13:33
  4. Preg Match
    Von Sturm im Forum PHP
    Antworten: 2
    Letzter Beitrag: 19.03.07, 15:23
  5. Preg-Match problem
    Von kevkev im Forum PHP
    Antworten: 2
    Letzter Beitrag: 12.07.05, 17:52