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: 13.03.2025 um 19:03 Uhr
6 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 ;)