2009-09-13 26 views
0

J'ai un site Web où un utilisateur peut télécharger des images pour une propriété immobilière.
La structure de la table:Valeurs d'incrémentation à l'aide de Zend_DB_Table Raw SQL

image_id 
property_id 
userid 
filename 
thumbfilename 
display_order 
timestamp 

Le scénario: Lorsqu'un utilisateur télécharge plusieurs images, il/elle doit être en mesure de mettre la photo principale de leurs images téléchargées pour la propriété spécifiée.

Le code:

$sql = 'UPDATE property_images SET display_order = display_order + 1 WHERE property_id = "' . $this->_request->getParam('propertyid') . '"'; 
$images->getAdapter()->fetchAll($sql); 
$images->update(array("display_order" => 1), 'image_id = "' . $this->_request->getParam('imageid') . '"'); 

La question: Je reçois une "erreur générale" lorsque vous appelez images- $> getAdapter() -> fetchAll(); Le SQL est cependant exécuté avec succès mais Zend_DB_Table renvoie une exception et ne passera pas à la commande suivante. Toutes les idées/suggestions seraient appréciées.

Répondre

0

Nevermind

La solution:

$ MISE À JOUR « sql = property_images SET Display_Order = Display_Order + 1 Où property_id = "1004" ET Display_Order < 3 ; $ images-> getAdapter() -> requête ($ sql); $ images-> update (array ("display_order" => 1), 'image_id = "2003"');

Ceci va saisir la troisième image et la régler sur 1 après avoir réglé les images ayant un ordre d'affichage de 1 et 2 à 2 et trois respectivement.

0

1) Tout d'abord, sachez que vous devez corriger votre code afin d'échapper à l'entrée de l'utilisateur. Vous êtes actuellement très vulnérable à l'injection SQL.

2) Pourquoi transmettez-vous une requête UPDATE à fetchAll()?

3) Regardez Zend_Db_Expr

+0

Je ne suis pas vulnérable à l'injection SQL car cela se fait en utilisant les valeurs saisies dans le script lui-même avant que l'utilisateur obtienne l'information. Ils n'obtiennent rien d'autre que l'identifiant de la propriété et l'identifiant de l'image. Je vérifie que l'utilisateur connecté est également le propriétaire de la propriété et de l'image. Merci quand même. –

+0

Assez juste. J'échapperais encore aux choses explicitement, au cas où la logique externe changerait. Le code a tendance à être réutilisé, et vous vous reposez sur le code d'autorisation pour faire en sorte que les mauvais paramètres ne parviennent jamais à la base de données. – timdev