Pb avec les formulaires

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 :slight_smile:

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/

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

@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/

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 :slight_smile:

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

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.

Lis les chapitres à partir de 2.2.1

@Cyril: merci :slight_smile:

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 :slight_smile:

undefined method `to_inspect’

Le 28 avr. 09 à 11:22, Zied a écrit :

@Cyril: merci :slight_smile:

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.

2009/4/28 Zied [email protected]

undefined method `to_inspect’

inspect


http://fabien.jakimowicz.com

Le 28 avr. 09 à 16:17, Zied a écrit :

undefined method `to_inspect’

undefined method respond


Cyril M.

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 :slight_smile:

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.