PHP Werte auslesen und als Hyperlink geändert ausgeben
Hallöchen.
Folgendes, ich hab eine Userliste in MySql,
User_list
nun zu dem text/code:
wird hierüber ausgelesen und gibt hyperlinks mit den namen in html aus, was auch soweit funktioniert.
(<a href"view_user.php?user_id=1>Hans</a> gibt <a href"view_user.php?user_id=2>hubert</a> die Hand)<-als hyperlink
das problem an dem script ist nur, wenn der link mehrmals im Text vorkommt, dann gibt er mehrmals "<a href="view_user.php?user_id=".$row3['id']."'>".$row3['handle']."</a>" hintereinander aus und die schleife dauert ewig bis er es generiert hat.
jetzt meine Frage, ist es kleiner oder besser lösbar als über die schleife (for ($i=0;$i < count($group_typeb);$i++){)?
greets
Folgendes, ich hab eine Userliste in MySql,
User_list
id | user_name |
---|---|
1 | hans |
2 | hubert |
nun zu dem text/code:
<?PHP
$text "http://127.0.0.1/view_user.php?user_id=1 und http://127.0.0.1/view_user.php?user_id=2 geben sich die Hand."
$group_typeb = get_numerics($text);
for ($i=0;$i < count($group_typeb);$i++){
if (strpos($text, "view_user.php?user_id=") !== false) {
if ($row3id == $group_typeb[$i]){
}ELSE{
$sql = 'SELECT * FROM handle_user WHERE id = "'.$group_typeb[$i].'"';
foreach ($pdo->query($sql) as $row3) {
$text = str_replace("view_user.php?user_id=".$row3['id'], "<a href="view_user.php?user_id=".$row3['id']."'>".$row3['handle']."</a>", $text);
$row3id = $row3['id'];
}}
}
}
?>
(<a href"view_user.php?user_id=1>Hans</a> gibt <a href"view_user.php?user_id=2>hubert</a> die Hand)<-als hyperlink
das problem an dem script ist nur, wenn der link mehrmals im Text vorkommt, dann gibt er mehrmals "<a href="view_user.php?user_id=".$row3['id']."'>".$row3['handle']."</a>" hintereinander aus und die schleife dauert ewig bis er es generiert hat.
jetzt meine Frage, ist es kleiner oder besser lösbar als über die schleife (for ($i=0;$i < count($group_typeb);$i++){)?
greets
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 671923
Url: https://administrator.de/forum/php-werte-auslesen-und-als-hyperlink-geaendert-ausgeben-671923.html
Ausgedruckt am: 25.03.2025 um 18:03 Uhr
11 Kommentare
Neuester Kommentar
Hallo,
ich steh vielleicht gerade auf dem Schlauch. Aber ich verstehe nicht was du vor hast.
Was ist $text und was ist get_numerics? Das scheint mir eine Funktion von dir selbst zu sein?
Kannst du vielleicht noch mehr details geben?
Ist $text die aufgerufene URL?
ist auch komisch.
Ich nehme an du hast den code für uns vereinfacht - das macht es aber irgendwie nicht einfacher ;)
mfG
ich steh vielleicht gerade auf dem Schlauch. Aber ich verstehe nicht was du vor hast.
Was ist $text und was ist get_numerics? Das scheint mir eine Funktion von dir selbst zu sein?
Kannst du vielleicht noch mehr details geben?
Ist $text die aufgerufene URL?
$text "http://127.0.0.1/view_user.php?user_id=1 und http://127.0.0.1/view_user.php?user_id=2 geben sich die Hand."
Ich nehme an du hast den code für uns vereinfacht - das macht es aber irgendwie nicht einfacher ;)
mfG
Also ich habe mir den Code jetzt mal genauer angeschaut und 1 zu 1 umgesetzt. und durch ChatGPT verbessern lassen. von ihm kommt der Ansatz mit der parseURL.
Ich habe den Code nicht getestet aber der ansatz scheint mir gut. Es sei den hinter $text hängt noch ein riesen Rattenschwanz den wir nicht kennen.
EDIT: Um den Cache teil erweiter...
mfG
Quelle: ChatGPT KI
$finaltext = "";
$explode = explode("http://", $text);
$Cache = [];
for ($i = 0; $i < count($explode); $i++) {
if (strpos($explode[$i], " ") !== false) {
$link = substr($explode[$i], 0, strpos($explode[$i], " "));
// Extrahiere UserID aus URL
$urlParts = parse_url("http://".$explode[$i]);
parse_str($urlParts['query'], $queryParams);
$UserID = $queryParams['user_id'] ?? null;
if ($UserID) {
// Prüfen, ob die UserID bereits im Cache ist
$foundKey = array_search($UserID, array_column($Cache, 'UserID'));
if ($foundKey !== false) {
// Name aus dem Cache verwenden
$Databasename = $Cache[$foundKey]['UserName'];
} else {
// Name aus der Datenbank holen
// $SQL = "SELECT name FROM table WHERE id = $UserID"
$Databasename = "Beispielname"; // Hier simuliert
// Im Cache speichern
$Cache[] = array("UserID" => $UserID, "UserName" => $Databasename);
}
$finaltext .= str_replace(
$link,
'<a href="view_user.php?user_id=' . $UserID . '">' . $Databasename . '</a>',
$explode[$i]
);
}
}
}
Ich habe den Code nicht getestet aber der ansatz scheint mir gut. Es sei den hinter $text hängt noch ein riesen Rattenschwanz den wir nicht kennen.
EDIT: Um den Cache teil erweiter...
mfG
das sollte durch die Funktion parse_url automatisch kommen.
https://www.php.net/manual/en/function.parse-url.php
Hier ist die Ausgabe des Scriptes mit deinem $text input.
Welche Version von PHP nimmst du den?
Edit: Passt so nicht - ich muss da dann doch noch mal ran..... Gib mir ne Minute.
https://www.php.net/manual/en/function.parse-url.php
Hier ist die Ausgabe des Scriptes mit deinem $text input.
<a href="view_user.php?user_id=1 und ">Beispielname</a> und <a href="view_user.php?user_id=2 geben sich die Hand.">Beispielname</a> geben sich die Hand.
Welche Version von PHP nimmst du den?
Edit: Passt so nicht - ich muss da dann doch noch mal ran..... Gib mir ne Minute.
Hier ist der ganze Code:
Der Code funktioniert - Aber fairnesshalber: Credit geht jetzt komplett an Chatgpt ;)
Quelle: ChatGPT KI
<?PHP
$text = "http://127.0.0.1/view_user.php?user_id=1 und http://127.0.0.1/view_user.php?user_id=2 geben sich die Hand.";
$finaltext = $text;
$Cache = [];
// Regex zur Erkennung von URLs mit 'user_id'
preg_match_all('/http:\/\/[^\s]+/', $text, $matches);
foreach ($matches[0] as $link) {
// Extrahiere UserID aus URL
$urlParts = parse_url($link);
parse_str($urlParts['query'] ?? '', $queryParams);
$UserID = $queryParams['user_id'] ?? null;
if ($UserID) {
// Prüfen, ob die UserID bereits im Cache ist
$foundKey = array_search($UserID, array_column($Cache, 'UserID'));
if ($foundKey !== false) {
// Name aus dem Cache verwenden
$Databasename = $Cache[$foundKey]['UserName'];
} else {
// Name aus der Datenbank holen
$Databasename = "Beispielname"; // Hier simuliert
// Im Cache speichern
$Cache[] = array("UserID" => $UserID, "UserName" => $Databasename);
}
// Text sauber ersetzen
$finaltext = str_replace(
$link,
'<a href="view_user.php?user_id=' . $UserID . '">' . $Databasename . '</a>',
$finaltext
);
}
}
echo $finaltext;
?>
Der Code funktioniert - Aber fairnesshalber: Credit geht jetzt komplett an Chatgpt ;)
Hallo,
sowas macht man aber nicht so. Dafür baut man sich templates und füllt die dann mit Daten. Schau dich mal bei anderen Plattformen um. Meist ist es z.B. oder was dann aus dem Beitrag gefiltert und zu deinem Ergebnis geparst wird. Du kannst ja nicht den Usern zumuten ihren "Text" mit deinen Links zu spicken!
Und deine "View_user" Links sind gefährlich. Da kann man nämlich einfach die ID's durchgehen und sich von allen Usern die öffentlichen Daten ziehen (was auch crawler und bots tun werden). Deshalb vielleicht lieber ne UUID als User-ID statt nem Integer. Das macht das abgrasen sehr viel schwerer.
sowas macht man aber nicht so. Dafür baut man sich templates und füllt die dann mit Daten. Schau dich mal bei anderen Plattformen um. Meist ist es z.B.
#Username
@Username
Und deine "View_user" Links sind gefährlich. Da kann man nämlich einfach die ID's durchgehen und sich von allen Usern die öffentlichen Daten ziehen (was auch crawler und bots tun werden). Deshalb vielleicht lieber ne UUID als User-ID statt nem Integer. Das macht das abgrasen sehr viel schwerer.
Red den Wert der Daten mal nicht klein. Du weisst was heutzutage mit Algorithmen möglich ist, wenn das dann mit anderen Daten verknüpft wird kann man da schon ggf. Rückschlüsse ziehen. Von daher solltest du das Aufrufen dieser view_user oder view_event links auch an einen eingeloggten User als Bedingung koppeln.
Ja klar kann man auch Lookup-Tabellen basteln aber eigentlich geht das effizienter sowas on the fly zu generieren.
Gibt auch die ein oder andere PHP-Lib die du einbinden könntest die so einen "BB-Code" bzw. "Forum-Code" parsen kann. Auch für Formatierungen, Fett, Kursiv usw. ...
sowas z.B. erster Google-treffer, sieht modern und clean aus: chriskonnertz/bbcode
Ja klar kann man auch Lookup-Tabellen basteln aber eigentlich geht das effizienter sowas on the fly zu generieren.
Gibt auch die ein oder andere PHP-Lib die du einbinden könntest die so einen "BB-Code" bzw. "Forum-Code" parsen kann. Auch für Formatierungen, Fett, Kursiv usw. ...
sowas z.B. erster Google-treffer, sieht modern und clean aus: chriskonnertz/bbcode