Zied
April 25, 2009, 9:08pm
1
Salut,
j’ai un formulaire de recherche situé dans view qui contient ceci:
<% form_tag :action => ‘search’ do %>
nom:
<%= text_field :appls, :nom %>
<%= submit_tag 'search!' %>
<% end %>
le controleur contient la definition de l’action search
def search
@appls = Appl.find :all, :conditions=>[ “nom = ?”, params[:nom] ]
end
En jettant un coup d’oeil sur le log:
SQL (0.1ms) SET NAMES ‘utf8’
SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
Processing ApplsController#search (for 127.0.0.1 at 2009-04-25
18:44:15) [POST]
Parameters: {“commit”=>“search!”,
“authenticity_token”=>“rAH6e7qIF63+X53tZ2cwGcEKp5wmLOuhPXeqEy/ciDk=”,
“appls”=>{“nom”=>“aaaa”}}
Appl Load (26.2ms) SELECT * FROM appls
WHERE (nom = NULL)
Rendering template within layouts/appls
Rendering appls/search
Completed in 486ms (View: 391, DB: 26) | 200 OK [http://0.0.0.0/appls/
search]
Je pense que la valeur du formulaire n’a pas été envoyé ou n’a pas
bien reçu…
Merci d’avance
Zied
April 25, 2009, 9:15pm
2
Parameters: {“commit”=>“search!”,
“authenticity_token”=>“rAH6e7qIF63+X53tZ2cwGcEKp5wmLOuhPXeqEy/ciDk=”,
“appls”=>{“nom”=>“aaaa”}}
tu as la solution sous les yeux (-:
la valeur n’est pas dans params[:nom], mais dans params[:appls][:nom] ou
qqchose dans ce gout-là (j’avoue que je ne sais pas exactement)
gUI
–
Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/
Zied
April 25, 2009, 9:20pm
3
En effet, la réponse était devant toi.
Juste une petite note tout de même qui a son importance
@appls = Appl.find :all, :conditions=>[ “nom = ?”, params[:nom] ]
Tu devrais éviter ceci en validant le contenu de ton paramètre, ce
serait dommage que quelqu’un en profite pour injecter du sql dans ta
requête
Zied
April 25, 2009, 9:31pm
4
@appls = Appl.find :all, :conditions=>[ “nom = ?”, params[:nom] ]
Tu devrais éviter ceci en validant le contenu de ton paramètre, ce
serait dommage que quelqu’un en profite pour injecter du sql dans ta
requête
Il me semblait que justement l’utilisation du ‘?’ évitait l’injection
SQL,
et que ce qu’il faut absolument éviter (interdire ?) c’est :
@appls = Appl.find :all, :conditions=>[ “nom =”+params[:nom] ]
gUI
–
Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/
Zied
April 27, 2009, 5:16pm
5
Merci bcp pour les éclaircissments :)…
Là je tombe sur le même problème mais en travaillant avec date_select.
J’ai un formulaire qui contient date_select.
<td><%= date_select :appls, :date, :include_blank => true,
:order=>[:day,:month,:year],
:use_month_numbers=>true, :start_year=>2006,
:end_year=>2010 %></td>
<td><%= submit_tag 'Envoyer' %></td>
Mais en choisissant une date le log affiche ceci
Processing ApplsController#searchdate (for 127.0.0.1 at 2009-04-27
16:10:39) [POST]
Parameters: {“commit”=>“Envoyer”,
“authenticity_token”=>“HMuRzLZnh9ht0MoUUXRzNLUTV/TPjX3Tp0tDRFeBUvU=”,
“appls”=>{“date(1i)”=>“2009”, “date(2i)”=>“6”, “date(3i)”=>“5”}}
Appl Load (0.4ms) SELECT * FROM appls
WHERE (date > NULL)
mon action associé est
@appls = Appl.find :all, :conditions=>[“date > ?” , params[:appls]
[:date]]
C koi le paramètre exact?
Merci d’avance
Zied
April 25, 2009, 11:19pm
6
2009/4/25 Guillaume B. [email protected] :
gUI
2009/4/25 Tony C. [email protected] :
@appls = Appl.find :all, :conditions=>[ “nom = ?”, params[:nom] ]
Tu devrais éviter ceci en validant le contenu de ton paramètre, ce
serait dommage que quelqu’un en profite pour injecter du sql dans ta
requête
Ben non, c’est la magie du “?” je confirme
Zied
April 27, 2009, 6:00pm
7
Le 27 avr. 09 à 17:16, Zied a écrit :
:end_year=>2010 %></td>
mon action associé est
@appls = Appl.find :all, :conditions=>[“date > ?” , params[:appls]
[:date]]
C koi le paramètre exact?
Celui écrit qui est :
params[:appls]['date(1i)] etc…
Il suffit de regarder sur les params qui te sont envoyé. On ne va pas
te lire tous tes logs ?
–
Cyril M.
Zied
April 27, 2009, 6:49pm
8
Lis les chapitres à partir de 2.2.1
Active Record Query InterfaceThis guide covers different ways to retrieve data from the database using Active Record.After reading this guide, you will know: How to find records using a variety of methods and conditions. How to specify the order,...
Zied
April 28, 2009, 11:23am
9
@Cyril : merci
Bon ma question est : est ce que je vais prendre l’objet date en
totalité ou bien concaténer date(1i), date(2i) et date(3i). Si c le
cas, sous quelle forme je la traite et comment…
NB. La méthode to_date ne marche pas…
Merci
Zied
April 28, 2009, 4:18pm
10
undefined method `to_inspect’
Zied
April 28, 2009, 12:54pm
11
Le 28 avr. 09 à 11:22, Zied a écrit :
@Cyril : merci
Bon ma question est : est ce que je vais prendre l’objet date en
totalité ou bien concaténer date(1i), date(2i) et date(3i). Si c le
cas, sous quelle forme je la traite et comment…
Ma réponse est :
params.to_inspect
tu sauras ce que c’est au final. Après à toi de récupérer ce que tu veux
Cyril M.
Zied
April 28, 2009, 4:19pm
12
2009/4/28 Zied [email protected]
undefined method `to_inspect’
inspect
–
http://fabien.jakimowicz.com
Zied
April 28, 2009, 4:36pm
13
Le 28 avr. 09 à 16:17, Zied a écrit :
undefined method `to_inspect’
undefined method respond
–
Cyril M.
Zied
April 29, 2009, 12:23pm
14
bonjour,
j’ai essayé de travailler avec inspect mais ça pas marché…
j’ai obtenu comme log
SELECT * FROM appls
WHERE (date > ‘{“date(1i)”=>“2006”, “date
(2i)”=>“2”, “date(3i)”=>“1”}’)
et j’ai pas reçu de réponse à ma requete
Bon j’ai essayé de concaténer en premier lieu chaque variable envoyé
à part
i=params[:appls][‘date(1i)’]+"/"+params[:appls][‘date(2i)’]+"/"+params
[:appls][‘date(3i)’]
et utiliser par la suite
@appls = Appl.find :all, :conditions=>[“date > ?” , i ]
et ça a marché…
Mais je cherche encore comme utiliser inspect pour prendre en un seul
bloc la date envoyée par date_select… Peut être que je dois convertir
le hash en format date… En tt cas, j’ai pas trouvé la solution…
Est ce que je peux avoir encore plus d’éclaircissements…
Merci
Zied
April 29, 2009, 12:27pm
15
Le 29 avr. 09 à 12:22, Zied a écrit :
Bon j’ai essayé de concaténer en premier lieu chaque variable envoyé
à part
Est ce que je peux avoir encore plus d’éclaircissements…
http://ruby-doc.org/core/classes/Object.html#M000358
La documentation t’aidera à comprendre ce qu’est inspect. Après je ne
pourrais rien de plus pour toi.
–
Cyril M.