php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.06.2009, 17:06  
Benutzer
 
Registriert seit: 20.08.2007
Beiträge: 33
Nightuser befindet sich auf einem aufstrebenden Ast
Standard Seltsames Problem mit preg_replace

Vorhaben:

Ich lese aus der Datenbank verschachtelte Links in Form von {link:ID} aus und möchte diese bei der Ausgabe umwandeln. In der Datenbank befinden sich also unterschiedlich viele Links mit unterschiedlichen ID's, als Platzhalter im WYSIWYG Modus sozusagen. Damit man beim Umzug die Links nicht immer neu aktualisieren muss. Die Links laufen intern übers CMS.

Code:

Folgendes hab ich mir dazu mit Hilfe eines Programmierers gebaut:

PHP-Code:
function getLink($id) {

    global 
$settings;
    global 
$optionen;
    
    
$sql mysql_fetch_assoc(mysql_query("SELECT * FROM pages WHERE id='".$id."'"));
    
    return 
$sql['id'];

}

function 
get_content_links($string) {
    
    
$string preg_replace('/{link:(.*)}/'getLink('\\1'), $string);    
    return 
$string;
    

Problem:

Er gibt mir immer die ein und selbe ID zurück. Irgendwas scheint bei getLink() zu fehlen. Der String ($id) wird richtig übergeben, raus kommt die korrekte ID vom Platzhalter. Aber sobald ich die SQL Abfrage darin mache, ist alles nur noch eine selbe ID für alle Links. Was mach ich falsch, was fehlt?

Beispiel:

Rufe Datenbankeintrag ab:
Code:
{link:1}
{link:2}
{link:16}
Dabei raus kommt am Ende der Ausgabe nur noch ID1.

Hilfe!



Geändert von Nightuser (17.06.2009 um 17:24 Uhr).
Nightuser ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.06.2009, 20:08  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.733
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Prinzipiell so:

PHP-Code:
error_reporting(E_ALL E_STRICT);

function 
getLink($matches) {
    
$id $matches[1];
    
$links = array('test.de''blub.de''bar.de''foo.de''bla.de');
    return 
'http://' $links[$id];
}

$string '{link:0} test {link:1} test {link:2} test {link:3} test {link:4}';

echo 
preg_replace_callback('/{link:(\d*)}/''getLink'$string); 
Tipp zur Datenbankabfrage: Nur das Feld selektieren, das wirklich benötigt wird, nicht "SELECT *". Außerdem bietet es sich eventuell an, einmal aufgelöste Link-IDs in einem Array zu cachen und nicht immer neu abzurufen.
mermshaus ist gerade online  
Alt 17.06.2009, 21:32  
Benutzer
 
Registriert seit: 20.08.2007
Beiträge: 33
Nightuser befindet sich auf einem aufstrebenden Ast
Standard

Nee, das geht so net, es steht doch immer was anderes drin.
Das ganze muss flexibel laufen, statisch wäre das kein Ding.

---

Im Datenbank Feld steht zum Beispiel folgendes:

Code:
Hier kommt ein Link: {link:1} sowie noch einer {link:14} und noch ein letzter {link:55} das wars.
Also im Prinzip funktioniert das:

PHP-Code:
<?php

// FUNCTION =>

function getLink($id) {

    global 
$settings;
    global 
$optionen;
    
    return 
$id;

}

function 
get_content_links($string) {
    
    
$string preg_replace('/\{link:([0-9]{0,})}/s'getLink('\\1'), $string);    
    return 
$string;
    
}

// STRING =>

$problem "Hier kommt ein Link: {link:1} sowie noch einer {link:14} und noch ein letzter {link:55} das wars.";

// AKTION AUSFÜHREN =>

echo get_content_links($problem);

?>
Ausgabe nach Aktion:

Code:
Hier kommt ein Link: 1 sowie noch einer 14 und noch ein letzter 55 das wars.
Problem ist nach wie vor aber die Datenbank Abfrage bei getLink();
Ändere ich nun getLink() wie folgt mit Datenbankabfrage in:

PHP-Code:
function getLink($id) {

    global 
$settings;
    global 
$optionen;
    
    
$sql mysql_fetch_assoc(mysql_query("SELECT * FROM pages WHERE id='".$id."' LIMIT 1"));
    
    return 
$sql['id'];


ist die Ausgabe nur noch so:

Code:
Hier kommt ein Link: 1 sowie noch einer 1 und noch ein letzter 1 das wars.
Er gibt also nur die ID #1 zurück, bei jedem Link.

Nightuser ist offline  
Alt 17.06.2009, 21:44  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.733
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Dann ersetz doch mal die letzten beiden Zeilen aus meiner Funktion durch die letzten beiden Zeilen aus deiner Funktion.
mermshaus ist gerade online  
Alt 17.06.2009, 21:49  
Benutzer
 
Registriert seit: 20.08.2007
Beiträge: 33
Nightuser befindet sich auf einem aufstrebenden Ast
Standard

Welche meinst Du denn genau?
Nightuser ist offline  
Alt 17.06.2009, 21:58  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.733
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Ich habe ja nicht deine Datenbank...

PHP-Code:
function getLink($matches) {
    
$id $matches[1];
    
$sql mysql_fetch_assoc(mysql_query("SELECT * FROM pages WHERE id='".$id."' LIMIT 1"));
    return 
$sql['id'];

mermshaus ist gerade online  
Alt 17.06.2009, 22:01  
Benutzer
 
Registriert seit: 20.08.2007
Beiträge: 33
Nightuser befindet sich auf einem aufstrebenden Ast
Standard

Is ja lustig, jetzt bekomme ich die erste und zweite, aber die dritte fehlt noch.

PHP-Code:
function getLink($matches) {

    
$id $matches[1];
    
$sql mysql_fetch_assoc(mysql_query("SELECT * FROM pages WHERE id='".$id."' LIMIT 1"));
    return 
$sql['id'];

}

function 
get_content_links($string) {
    
    
$links .= preg_replace_callback('/{link:(\d*)}/''getLink'$string);    
    return 
$links;
    

Funktioniert nur mit den ersten beiden Links, der dritte will wohl irgendwie nicht?!
Nightuser ist offline  
Alt 17.06.2009, 22:04  
Benutzer
 
Registriert seit: 20.08.2007
Beiträge: 33
Nightuser befindet sich auf einem aufstrebenden Ast
Standard

Ahhhhhhhhhhhhhhhhh es funktioniert!
Die letzte ID konnte er garnicht finden, weil es die ID garnicht gegeben hatte!

lol

Super, einwandfrei! Ich ich saß da heute 5 Stunden dran, um ne Lösung zu finden!

VIELEN VIELEN DANK !!!
Nightuser ist offline  
Alt 17.06.2009, 22:19  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ähhh? Das ist doch Bullshit!

Zitat:
$sql = mysql_fetch_assoc(mysql_query("SELECT * FROM pages WHERE id='".$id."' LIMIT 1"));
return $sql['id'];
Alias
Zitat:
$sql = mysql_fetch_assoc(mysql_query("SELECT id FROM pages WHERE id='".$id."' LIMIT 1"));
return $sql['id'];
Alias
Zitat:
return $id
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 17.06.2009, 22:21  
Benutzer
 
Registriert seit: 20.08.2007
Beiträge: 33
Nightuser befindet sich auf einem aufstrebenden Ast
Standard

Klar ist das so Bullshit, es war auch nur ein Beispiel.
Die ganze Abfrage sieht fertig wie folgt aus:

PHP-Code:
// GET CONTENT LINKS =>

// Wandelt die Link - Platzhalter von {link:ID} in richtige Links um.
// Man kann im WYSIWYG / CODE Modus diese Platzhalter verwenden.
// {link:ID} bei href verwenden ('ID' durch die ID der Seite ersetzen)

function getLink($matches) {
    
    global 
$settings;
    global 
$optionen;

    
$id $matches[1];
    
$sql mysql_fetch_assoc(mysql_query("SELECT * FROM pages WHERE id='".$id."' LIMIT 1"));

    if (isset(
$sql['id'])) {
        
        if (
$sql['type'] == "extern") {
            
            return 
$sql['inhalt'];
        
        } else {
            
            if (
$optionen['page_modrewrite'] == "1") {
            
                return 
$settings['page_dir']."/".$sql['id'].".".$sql['page']."/";
            
            } else {
                
                return 
$settings['page_dir']."/index.php?seite=".$sql['id'].".".$sql['page']."";
                
            }
            
        }
        
    } else {
        
        return 
"#";
        
    }

}

function 
get_content_links($string) {
    
    return 
preg_replace_callback('/{link:(\d*)}/''getLink'$string);    
    

Nightuser ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Basedir in PhP cmuch05 Datenbanken 9 08.01.2009 14:17
[Erledigt] Problem: PHP Selbe Datei mehr als 1 Mal soulan PHP Tipps 2008 13 28.11.2008 22:51
Problem Upload mehrere Dateien und schreiben in DB Lapje PHP Tipps 2008 1 22.10.2008 13:12
utf8 Problem (Daten aus DB auslesen) go1denboy PHP Tipps 2008 1 23.09.2008 12:19
Problem mit swfobjects R4v3r JavaScript, Ajax und mehr 8 21.09.2008 14:17
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
Array Problem [Ansatz ?] PHP Tipps 2005 0 27.01.2005 18:24
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
preg_replace platzhalter, preg_replace \\d problem, preg_replace für javascript, nightuser cms

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum