2010-10-25 3 views
1

Voici une situation, j'ai une liste de tickets de support que lorsque vous cliquez sur le titre du billet vous amène à une page qui affiche le ticket plus en détail. Si utilise des variables URL GET pour interroger la base de données. J'ai pris en compte l'injection SQL mais que se passe-t-il si quelqu'un modifie l'URL pour un identifiant qui n'existe pas? Quelle est la meilleure façon de faire face à cela?

Merci,

Jonesy

Répondre

5

Si l'ID n'existe pas, envoyer un 404 - Not Found tête avec une page d'erreur agréable indiquant à l'utilisateur qu'il n'a pas été trouvé.

0

Vérifiez si le ticket existe; sinon, réagissez en conséquence. Que signifie «réagir en conséquence» est déterminé par votre logique métier: créer un nouveau ticket? déclencher une erreur? emmener l'utilisateur à une liste de billets disponibles?

Un exemple en utilisant l'ancienne extension MySQL par souci de concision:

$sanitized_numeric_id = (int) $_GET['ticket_id']; // assuming id is numeric 
$query_resource = mysql_query('SELECT `somecolumn`, `column2`, `othercolumn` 
            FROM `tickets` 
            WHERE `id`= ' . $sanitized_numeric_id); 
if (mysql_num_rows($query_resource) > 0) { 
    // the ticket exists, do something with it 
} else { 
    // the ticket doesn't exist, react accordingly 
} 
3

Vous avez probablement faire une page de manipulation recherches infructueuses de toute façon; il suffit de l'acheminer là-bas. Ensuite, vous pouvez aider l'utilisateur à trouver ce qu'il cherche d'une manière cohérente, fournir des indices et "le plus recherché" et quoi d'autre.

1

Cela peut sembler trop simple, mais vous devez toujours valider votre variable GET (ou POST) avant de faire quoi que ce soit avec eux. Dans votre cas, vérifiez simplement que l'ID existe dans la base de données. Si ce n'est pas le cas, informez l'utilisateur.

1

Vous devriez toujours vérifier si votre requête a renvoyé quoi que ce soit. Si elle renvoie 0 lignes, l'ID n'existe pas.

<?php 

$result = mysql_db_query("your query", $link); 
$num_rows = mysql_num_rows($result); 

if($num_rows < 1) { 
    // row with that id doesnt exist 
    // do whatever you want 
} elseif($num_rows > 1) { 
    // you have problem with your ids in db 
} else { 
    // everything went fine 
    // do your thing here 
} 

?>