Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Brauche einen Leitfaden (str_replace)

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

  • [Erledigt] Brauche einen Leitfaden (str_replace)

    Hallo

    Ich möchte folgendes erstellen

    Ein User gibt einen Kommentar zu einem Bild ab. Darin kann er ein "sonderelement einbinden" so könnte ein kommentar dann aussehen

    Hallo dies ist ein tolles bild schau dir mal meines an [yp-120]

    Das[yp-120] wäre die ID seines Bildes

    Nun sollte an der Stelle wo [yp-120] steht das Bild angezeigt werden.

    Nun ich stehe ein wenig auf dem Schlauch wie ich es machen könnte.

    Hier mein Ansatz
    PHP-Code:
    str_replace("[yp-120]",'<a href=""><img src="images/uploads/pictures/TN{$pictures.file_name}" width="80" border="0" alt=""/></a>',$row[2])."<br>"
    das problem ist nun aber das ja [yp-120] auch yp 146 oder sonst eine zahl sein könnte.

    könnt ihr mir auf die Sprünge helfen wie ich das machen kann?
    Zuerst müsste ich herausfinden ob solch eine klammer mit yp vorkommt
    Danach müsste ich herausfinden welche id hinter yp- ist

    aber wie kann ich das machen?

    Grüsse aus der Schweiz
    Andi


  • #2
    mit nem regulären ausdruck

    Kommentar


    • #3
      ok

      was ich bisher nun habe ist folgendes
      PHP-Code:
      if(ereg('[^yp-p+]',$row[2]))
                   {
                  echo 
      "ja";
                  }
                  else
                  {
                  echo 
      "nein";
                  } 
      und da bekomme ich momentan ein JA was ja gut so ist

      wie kann ich jetzt die zahl hinter yp-p herausfinden?

      Kommentar


      • #4
        Hallo robydog,

        für deine Aufgabe sind ereg_replace und explode deine Freunde.

        Mittels ereg_replace kannst du das Vorkommen von Klammern überprüfen, die Klammern für die Auswertung entfernen lassen und du kommst direkt an yp-XYZ heran.

        Sofern das erfolgreich, splitte mittels explode("-", yp-XYZ) deinen zu überprüfenden Wert und du kannst dann array[0] auf Vorkommniss von yp und array[1] auf Vorkommnis XYZ überprüfen.

        Kommentar


        • #5
          Bitte preg_* verwenden. ereg ist veraltet.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            komplizierte Sache aber Danke für die Hilfe Solche netten Antworten wünscht man sich

            Kommentar


            • #7
              jo also ich hab das so in etwa hinbekommen

              PHP-Code:
              $sql "SELECT * FROM comment WHERE picture_id='$pic_id'";
                        
              $ergebnis mysql_query($sql);
                        while(
              $row mysql_fetch_array($ergebnis))
                        {
                      
                           
                       if(
              ereg('[^yp-p+]',$row[2]))
                       
                          
              $teile explode("yp-p"$row[2]);
                          
              $teile[0]; // Teil1
                          
              $teile[1]; // Teil2;
                          
              $geteilt str_replace("[",'',$teile[1]); 
                          
              $geteilt2 str_replace("]",'',$geteilt);
                          
                          
              $sql "SELECT file_name FROM pictures WHERE id='$geteilt2'";
                            
              $ergebnis mysql_query($sql);
                            while(
              $row2 mysql_fetch_object($ergebnis))
                          {
                          
              $row[2] = str_replace("[yp-p120]",'test',$row[2]); 
                          }
                       
                      
                      
              $comments[]=$row;
                       
                        
                      
              $smarty->assign('comments',$comments);    
                      } 
              aber nun wird [yp-p120] immer noch angezeigt auf der seite und nicht durch test ersetzt
              irgendwie hab ich das gefühl das ist weil ich ne sql abfrage noch eingebaut habe denn sobald ich die weg mache
              wird es ersetzt. aber die sql abfrage brauche ich damit ich die bild infos bekomme

              Kommentar


              • #8
                Hallo

                Wie schon von nikosch erwähnt: Bitte preg.. und nicht ereg.. verwenden!
                Heißt die Spalte deiner Tabelle wirklich "2" weil du sie mit $row[2] ansprichst.
                Dein if-Konstrukt enthält zudem keine geschweiften Klammern! Bitte mal korrigieren!
                Sind auch noch einige andere Dinge etwas suspekt.. Bitte denke den Code nochmal Zeile für Zeile durch - evtl. sind noch mehr solcher "Fehler" versteckt!

                Gruß, php2go

                Kommentar


                • #9
                  es geht nun hab den beitrag geschlossen
                  danke für die hilfe ereg hab ich ersetzt

                  Kommentar


                  • #10
                    öhm jo scheint anscheinend doch nicht so ganz zu funktionieren...
                    Das Bild wird mir nun so angezeigt wie es sollte. Jedoch ist nur noch ein Kommentar zu sehen auch wenn mehrere zu dem Bild vorhanden sind. Zusätzlich funktioniert es nur wenn [yp-p120] am schluss des kommentars erscheint und wenn es mehrmals erscheint funktioniert es auch nicht mehr

                    das ist der code den ich nun habe
                    PHP-Code:
                    $sql "SELECT * FROM comment WHERE picture_id='$pic_id'";
                              
                    $ergebnis mysql_query($sql);
                              while(
                    $row mysql_fetch_array($ergebnis))
                              {
                                
                    preg_match('[yp-p+]',$row[2]);

                                
                    $teile explode("yp-p"$row[2]);
                                
                    $teile[0]; // Teil1
                                
                    $teile[1]; // Teil2;
                                
                    $geteilt str_replace("[",'',$teile[1]); 
                                
                    $geteilt2 str_replace("]",'',$geteilt);
                                
                                
                    $sql "SELECT file_name FROM pictures WHERE id='$geteilt2'";
                                  
                    $ergebnis mysql_query($sql);
                                  while(
                    $row2 mysql_fetch_object($ergebnis))
                                
                    $file_name $row2->file_name;
                                
                    $row[2] = str_replace('[yp-p'.$geteilt2.']','<br/><a href="pictures.php?view=detail&id='.$geteilt2.'}"><img src="images/uploads/pictures/TN'.$file_name.'" width="80" border="0" alt=""/></a>',$row[2])."<br>"
                                
                                
                    $comments[]=$row;
                               
                                
                    $smarty->assign('comments',$comments);    
                            } 
                    wäre froh für weitere tips oder hilfen

                    Kommentar


                    • #11
                      Schau dir mal folgenden Schnipsel an und lass ihn am Besten auch einfach mal einzeln laufen:
                      PHP-Code:
                          $str "text text text text text text [yp-123] text text text text [yp-2467] text text text";
                          if( 
                      preg_match_all"/\[yp-[0-9]+\]/"$str$match ) )
                          {
                              
                      var_dump$match );
                          } 
                      Anschließend verwende mal das Suchmuster "/\[yp-([0-9]+)\]/" und vergleiche das Ergebnis mit dem anderen! Wie du das Ergebnis verwendest solltest du nun alleine hinbekommen...

                      Kommentar


                      • #12
                        hmm leider kann ich nicht erkennen was du mir damit sagen willst da ich die ausgabe schlicht und einfach nicht wirklich begreiffe

                        Kommentar


                        • #13
                          Die Funktion, die du suchst, ist immer noch PHP: preg_replace - Manual. Das Beispiel von Sirke kann dir helfen zu verstehen, was du mit regulaeren Ausdruecken erreichen kannst. Es ist nur ein erster Ansatz, keine Loesung.

                          Fuer dich heisst es jetzt, dass Handbuch (php.net) zu lesen und ein Tutroial zu regulaeren Ausdruecken zu machen.
                          http://hallophp.de

                          Kommentar


                          • #14
                            Zitat von Asipak Beitrag anzeigen
                            Die Funktion, die du suchst, ist immer noch PHP: preg_replace - Manual. Das Beispiel von Sirke kann dir helfen zu verstehen, was du mit regulaeren Ausdruecken erreichen kannst. Es ist nur ein erster Ansatz, keine Loesung.

                            Fuer dich heisst es jetzt, dass Handbuch (php.net) zu lesen und ein Tutroial zu regulaeren Ausdruecken zu machen.
                            ok dass es keine lösung ist das dachte ich mir...


                            was ich aber nicht verstehe... das ersetzen der nummer mit dem bild das hab ich ja bereits hinbekommen. Aber was ich nicht verstehe ist aus welchem Grund die anderen Kommentare nicht mehr angezeigt werden und warum es nur funktioniert wenn [yp-p112] am ende eines kommentares ist

                            Kommentar


                            • #15
                              Du machst dir mit dem Ansatz ueber str_replace unnoetig das Leben schwer.

                              PHP-Code:
                              $string 'The Quick 15 Brown Fox Jumped Over The Lazy Dogs.[yp-p123]
                              The Quick Brown Fox Jumped[yp-p456] Over The Lazy 30 Dogs.'
                              ;

                              echo 
                              preg_replace('/\[yp\-p([0-9]+)\]/''<img src="image_$1.png" alt="" />'$string); 
                              koennte dir eventuell weiterhelfen.

                              Oder, wenn ich deinen Code richtig verstehe und du zuerst die IDs der Bilder ermitteln und dann den Dateinamen aus der Datenbank auslesen moechtest, kannst du es besser so machen:

                              PHP-Code:
                              // zuerst alle IDs im Text ermitteln 
                              preg_match_all('/\[yp\-p([0-9]+)\]/'$string$matchesPREG_SET_ORDER);

                              foreach (
                              $matches as $match) {
                                
                              // ID in $match[1] fuer die Datenbankabfrage verwenden
                                // Bildpfad z.B. in $row['img'] speichern

                                // str_replace mit der ermittelten ID und dem Dateinamen aus der Datenbank ausfuehren.
                                
                              $string str_replace('[yp-p' $match[1] . ']''<img src="' $row['img'] . '" alt="" />'$string);
                              }

                              echo 
                              $string
                              Der Code soll nur als Denkanstoss dienen und ist ungetestet.
                              http://hallophp.de

                              Kommentar

                              Lädt...
                              X