Je voudrais coder un bbcode avec la sélection SQL. Fondamentalement, je veux que l'utilisateur soit en mesure d'entrer [user]Anotheruser[/user]
dans un champ de texte, qui est ensuite converti en front-end à une URL qui ressemble à ceci: http://mydomain.com/user/[userid]/anotheruser
. Donc, pour obtenir l'ID utilisateur, je dois inclure une sélection SQL, et en plus, s'il existe une autre possibilité de trouver l'autre utilisateur. Est-ce que je peux faire ceci avec un preg_replace
comme habituellement utilisé pour créer le bbcode, ou dois-je faire quelque chose de plus complexe?PHP: BBCode avec sélection SQL?
1
A
Répondre
0
Pré-endroit devrait fonctionner, faire attention. Assurez-vous de réparer tous les trous ... attention à l'injection de sql en particulier.
0
Vous devriez éviter les injections POST-side, comme vous devriez le faire partout ailleurs.
Cette situation n'est pas différente du tout.
0
preg_match
la balise d'abord, obtenir le nom d'utilisateur, exécutez la requête (attention et faire ce pas en toute sécurité!) Et remplacer toute la chaîne en correspondance avec la nouvelle URL:
preg_match_all ('#\[user\](.*?)\[/user\]#i', $text, $matches, PREG_SET_ORDER);
for ($i = 0, $j = count($matches); $i < $j; $i++)
{
$userName = $matches[$i][1];
$userId = 0;
// query example with mysqli
$stmt = $sql->prepare('SELECT uid FROM users WHERE username = ? LIMIT 1');
$stmt->bind_param('s', $userName);
$stmt->execute();
$stmt->bind_result($userId);
if ($stmt->fetch())
{
$text = str_replace($matches[$i][0], "<a href=\"/user/$userId/$userName\" title=\"$userName\">$userName</a>", $text);
}
}
Questions connexes
- 1. PHP - BBCode parser - récursif [quote] avec regex et preg_replace
- 2. Poire HTML BBcode Hyperlien
- 3. BBcode regex
- 4. PHP - analyseur BBCode - Parsez balise link bbcode et non lien balisé
- 5. balises de style bbcode avec preg
- 6. Analyse du BBCode avec xslt 2.0
- 7. stockage de texte brut vs analyse de texte (BBCODE (PHP))
- 8. Regex pour supprimer BBCode
- 9. bbcode unparser regex aide
- 10. Fonction PHP bbcode make optionnel pour remplacer les smileys
- 11. Regex pour le BBCode imbriqué
- 12. SQL Sélection d'ordres finis avec plusieurs opérations
- 13. Convertir SQL avec sous-sélection dans HQL
- 14. Regex BBCode au format HTML
- 15. PHP - sélection d'une entrée particulière avec YQL
- 16. Combiner SQL avec PHP
- 17. Regex & BBCode - Perfecting Quote imbriqué
- 18. Sélection SQL simple en C#?
- 19. colonnes Sélection dans SQL
- 20. Sélection conditionnelle SQL View
- 21. Sélection SQL aide jointe
- 22. Sélection SQL Case
- 23. vBulletin BBCode sur la page externe
- 24. Problème avec PHP & SQL Query
- 25. Aide PHP/SQL avec fonction
- 26. PHP avec SQL Server 2005+
- 27. Conversion de postes BBCode phpBB en Markdown
- 28. php JSON et jquery boîte de sélection
- 29. SQL Sélection de plusieurs sommes?
- 30. BBCode vers XHTML: Deux possibilités, une regex?
bonne solution. Pour économiser des ressources, vous pouvez désinfecter chaque correspondance, puis 'implode()' the $ matches' et interroger 'WHERE nom d'utilisateur IN (..imploded matches ..)'. De cette façon, vous avez seulement besoin d'exécuter une requête * one *. – Alec
Ouais, je voulais juste montrer un code possible pour la requête SQL. Lors de l'utilisation d'instructions préparées, il serait encore mieux de préparer l'instruction une fois (avant la boucle) et de simplement mettre à jour le paramètre et l'exécuter. Les instructions préparées sont en fait assez rapides alors, et je crois que ce serait encore plus rapide que d'utiliser 'IN' (et probablement un peu plus sûr, car vous n'auriez pas besoin de vous échapper). – poke