
Problemas recoger variable string de C++ en CGI
Publicado por Raul (2 intervenciones) el 20/05/2016 11:27:43
Buenas,
estoy tratando de a partir de un archivo html que recoge el titulo de un disco pasarlo por get y al recogerlo en el archivo cgi con sscanf pasarlo a una variable y asi despues poder ejecutar una sentencia SQL para eliminar la fila que corresponde a ese titulo del album
No se si en sscanf debo formatear el titulo pasado por get.
El error que me lanza cuando envio los datos desde el html antes de abrirse el .cgi en el navegador me salta el error:
la instruccion "0x1f3d38" referenciada a la memoria "0xccccccc" la memoria no puede ser leida
* con variables de tipo integer no me ha dado problemas el programa ejecutado de forma similar, pero con variables string no hay forma.
Paso el codigo. Gracias :)
estoy tratando de a partir de un archivo html que recoge el titulo de un disco pasarlo por get y al recogerlo en el archivo cgi con sscanf pasarlo a una variable y asi despues poder ejecutar una sentencia SQL para eliminar la fila que corresponde a ese titulo del album
No se si en sscanf debo formatear el titulo pasado por get.
El error que me lanza cuando envio los datos desde el html antes de abrirse el .cgi en el navegador me salta el error:
la instruccion "0x1f3d38" referenciada a la memoria "0xccccccc" la memoria no puede ser leida
* con variables de tipo integer no me ha dado problemas el programa ejecutado de forma similar, pero con variables string no hay forma.
Paso el codigo. Gracias :)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <windows.h>
#include <sqlext.h>
#include <stdio.h>
main()
{
SQLHENV henv1;
SQLHDBC hdbc1;
SQLHSTMT hstmt1;
SQLRETURN estado;
SQLCHAR* sentencia;
SQLCHAR V_TITLE[20];
SQLINTEGER V_TITLEInd=SQL_NTS;
char *data;
SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv1);
SQLSetEnvAttr(henv1, SQL_ATTR_ODBC_VERSION,(SQLPOINTER*)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, henv1, &hdbc1);
estado=SQLConnect(hdbc1, (SQLCHAR*)"conexion_ODBC", 20,
(SQLCHAR*) "polly", 5,
(SQLCHAR*) "gone", 4);
printf("Content-type: text/html\n\n");
printf("<HTML><body>\n");
sentencia="DELETE FROM discs WHERE title=?";
data=getenv("QUERY_STRING");
if(data==NULL)
printf("Error al pasar los datos\n");
else if(sscanf(data,"title=%s",V_TITLE))
SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);
SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 20, SQL_NTS, &V_TITLE, 0, &V_TITLEInd);
estado=SQLExecDirect (hstmt1,sentencia,255);
if(estado==SQL_SUCCESS || estado==SQL_SUCCESS_WITH_INFO)
{
printf("the delated has been executed successfully\n");
}
else{printf("deleting failed\n");}
SQLEndTran(SQL_HANDLE_DBC,hdbc1, SQL_COMMIT);
SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv1);
printf("</body></HTML>\n");
}
Valora esta pregunta


0