Je travaille donc avec un client pour implémenter un système similaire au système "badges and privileges" sur StackExchange. Bien que dans son système, elle cherche à utiliser des points et des récompenses pour son personnel. C'est le même principe de base. Les utilisateurs sont des points récompensés pour le bon travail d'équipe et gagnent des récompenses à partir de ces points. J'ai pensé qu'il serait utile d'ajouter le même type de fonctionnalité que SE utilise pour les afficher dans la barre de navigation supérieure, où il montre votre représentant et les badges dans l'ordre de la date à laquelle vous avez gagné l'un ou l'autre. C'est mon problème, j'ai trouvé de l'aide pour récupérer les données ensemble à partir des deux tables distinctes, mais je ne suis pas sûr de la façon dont je afficherais ces résultats dans l'ordre de la date d'obtention? A titre d'exemple:Données Echo SQL dans l'ordre de la date ajoutée en utilisant Union All
User ID #1 has earned 50 points on 18/12/2015
serait dans ap_user_points
tableau
User ID #1 has earned 'The Gift Voucher' reward on '17/12/2015'
Si je simplement:
echo $row8['reward'] . $row8['points_added']
Il écho:
The Gift Voucher 50
Là où je besoin dans l'ordre par date:
50
The Gift Voucher
Si vous regardez votre représentant et icône BADGE dans la barre de navigation, vous verrez ce que je veux en venir ici, c'est un système similaire.
<?php
$user_id = $_SESSION['userid'];
$sql8 = "
SELECT r.reward_id,
r.user_id,
r.reward as reward,
r.date_earned as date_earned,
r.badge_desc,
NULL AS points_added,
NULL AS added_for,
NULL AS date_added
FROM ap_user_rewards as r
WHERE r.user_id = '$user_id'
UNION ALL
SELECT NULL,
NULL,
NULL,
NULL,
NULL,
p.points_added AS points_added,
p.added_for AS added_for,
p.date_added AS date_added
FROM ap_user_points as p
WHERE p.user_id = '$user_id' ORDER BY date_earned DESC, date_added DESC;";
$result8 = $conn->query($sql8);
if ($result8->num_rows > 0) {
// output data of each row
while($row8 = $result8->fetch_assoc()) {
////// NOT SURE WHAT TO ECHO HERE?
}
}
?>
Ce code semble être VULNERABLE à l'injection SQL. Utilisez ** des instructions préparées ** avec ** des espaces réservés **. Si vous ne pouvez pas le faire, exécutez au minimum la valeur potentiellement dangereuse '$ user_id' via une fonction de type' mysqli_real_escape_string' avant qu'elle ne soit incluse dans SQL. Comment est-il possible en 2015 que nous écrivions encore du code qui soit si ouvertement vulnérable à l'injection SQL? – spencer7593
Ceci est juste un exemple de code pour avoir une idée approximative, c'est loin d'être terminé et j'ai juste besoin d'ajouter une idée de la façon dont je vais récupérer mes résultats. J'espère améliorer de manière significative les failles de sécurité avant la production. – Snappysites