insertar javascript dentro de python

Antoni Aloy subscripcions en trespams.com
Dom Jul 13 11:34:20 CEST 2008


El Dissabte, 12-07-08 a les 01:09 escrigueres:
> hola amigos, tengo un problema hace dias y no doy con la solucion.
> tengo una base de datos hecho en mysql que consta de un diccionario, osea
> palabras y sus respectivas definiciones. Tengo una pagina html que consta
> de un formulario, en el cual ingreso la palabra que me interesa buscar ,
> apreto el boton buscar y luego me sale la respectiva definicion, al apretar
> el boton "buscar" envia la palabra que he ingresado via form a un script
> python en my servidor . El cual tiene un codigo mysql que hace la busqueda.
>
> Lo que quiero hacer es por ejemplo: insertar una palabra en mi buscador, y
> buscar su definicion , cuando me aparesca la definicion quiero dar dos
> clicks a cualquier palabra de la defincion para que vuelva a buscar esa
> palabra en la base de datos.
>
> algo como esto: http://dictionary.cambridge.org/
>
> para hacer esto he ingresado un codigo javascript en mi codigo python. El
> problema que tengo es que cuando ingreso el codigo javascript el motor de
> busqueda  deja de funcionarme . aca he subido dos versiones una con el
> codigo javascrip y otra sin el codigo javascript, pueden buscar en ambos la
> palabra "todo"
>
> http://www.ketaplex.net/ulttres.html    - con javascript
>
> http://www.ketaplex.net/ulttre.html    - sin javascript
>
> como veran en la version que tiene insertado el codigo javascript el motor
> de buscaqueda no funciona: alguien tiene alguna idea de porque?
>
> aca pego el codigo muchas gracias!!!
>
>
>
> #!/usr/bin/python
>
> import cgi, cgitb, MySQLdb
>
>
> print "Content-Type: text/html"     # HTML is following
> print                               # blank line, end of headers
>
> print """<script>
> /*
>
>   Script copyrighted Cambridge university press 2000
>   Do *not* modify without written permission to do so..
>
>    Usage of script :
>
>    * Place dictionary.js in the directory on your website
>    * Add following to your html file(s)
>
>
>   When a people doubleclick on a word that word will be looked up in our
>   online dictionary.
>
> */
>
> var NS = (navigator.appName == "Netscape") ? 1 : 0;
>  if (NS) document.captureEvents(Event.DBLCLICK);
>  document.ondblclick = dict;
>
> var dictvar;
> function dict() {
> if (NS) {
> t = document.getSelection();
> pass_to_dictionary(t);
> }
> else {
> t = document.selection.createRange();
> if(document.selection.type == 'Text' && t.text != '') {
> document.selection.empty();
> pass_to_dictionary(t.text);
>       }
>    }
> }
> function pass_to_dictionary(text) {
>  if (text > '') {
>
> var form = document.createElement("form");
>  form.setAttribute("action", "/cgi-bin/ulttres.py");
>  form.setAttribute("method", "post");
>  var div = document.createElement("div");
> div.innerHTML = '<input type="hidden" name="Name" />';
>
>  div.firstChild.value = text;
>  form.appendChild(div.firstChild);
>  document.body.appendChild(form);
>  form.submit();
>
>    }
> }
>
>
>
> </script> """
>
>
>
>
>
>
> form = cgi.FieldStorage()
> name = form.getvalue('Name')
> print name
>
>
> db=MySQLdb.connect(host='ketaplex.ketaplex.net',user='ketamina',passwd='asd
>asdd',db='nasdsde') cursor=db.cursor()

> sql='select definicion from d where palabra = "' + name +'"'
^^^^^^ 
Esto da lugar a ataques de inyección de código sql.
mucho mejor:
sql="select definicion from d where palabra = %s"
cursor.excecute(sql,  (name,))

prueba si esto te funciona. He visto en el mensaje posterior que el problema 
no era tanto de código como de la select que se genera. El código anterior 
hace que sea el interfaz el que tenga que preocuparse por escapar los valores 
de los parámetros y poner comillas dobles o simples según corresponda.

Saludos,

-- 
Antoni Aloy López
Binissalem - Mallorca
http://trespams.com
Soci de bulma #34
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es