Prácticas 1 y 2: Dudas Frecuentes

21 mayo 2019

PRÁCTICA 1

Al mostrar el precio de un vuelo por pantalla, éste aparece con demasiados decimales, ¿Cómo puedo mostrar el precio solamente con dos decimales? 

Para mostrar el precio de un vuelo con dos decimales en ASP, se puede emplear la función Round(), que permite redondear al valor más próximo, con los decimales indicados. Ejemplos:

  • Round (2.2) devuelve 2
  • Round (2.6) devuelve 3
  • Round (41.2855,3) devuelve 41.286
  • Round (41.2009,2) devuelve 41.2
  • Round (41.2009,3) devuelve 41.201

Si se trata de redondear en JavaScript para la parte de AJAX se podría hacer algo así:

  • precio = precio.toFixed(2);

¿Cómo puedo capturar el error que devuelve la base de datos cuando intento cancelar la reserva de un vuelo del que faltan menos de 48 horas para que salga?

Este error, como cualquier posible error que devuelva la base de datos al realizar una consulta sobre ella, puede ser capturado mediante Errors.Count.  Ejemplo:

on Error Resume Next

// Realizamos la consulta deseada sobre la base de datos, en este caso seria cancelar una reserva…

Set rs = Conexion.Execute(SentenciaSQL)

if Conexion.Errors.Count>0 then
for each objErr in Conexion.Errors
response.write(«<p>»)
response.write(«Error al Cancelar: «)
response.write(objErr.Description & «</p>»)
next
else
response.write(«Cancelacion OK»)
end if

Estoy trabajando con AJAX y quiero lanzar una petición con send(), mediante el método POST y adjuntando dos parámetros en la petición, ¿cómo puedo hacerlo?

Para lanzar una peticiónPOSTcon dos parámetros mediante send(), lo haremos de la siguiente forma:

oXML.setRequestHeader(«Content-Type», «application/x-www-form-urlencoded»);

// lanza la peticion enviando los parametros

oXML.send(‘parametrox=’+valorx+’&parametroy=’+valory );

En la página de servidor ServApplet.asp, ¿cómo puedo escribir saltos de línea en la respuesta que el servidor devolverá al applet?

Si queremos que el script ASP escriba un salto de línea, lo haremos mediante la constante vbCrLf. Por ejemplo:


do while not origen.EOF
Response.Write(origen(«IDVUELO») & vbCrLf)
‘Nos desplazamos por el RecordSet
origen.MoveNext
loop

Tengo un problema con el procedimiento Lista_Destino, ya que obtengo un error cuando le hago un Select.

Duda Planteada: Tengo un problema con el procedimiento Lista_Destino, ya que me sale error cuando le hago un Select. Te adjunto una imagen del error, a  ver si es que hago yo algo mal.

Solución: A ese procedimiento hay que pasarle como parámetro el id de la ciudad origen de la quieras ver los destinos. Por ejemplo:

select * from lista_destinos(1)

daría como resultado un listado de las ciudades destino de los vuelos que parten de la ciudad que tiene como origen la ciudad con id = 1.

La base de datos Firebird trabaja con el formato fecha de ‘MM/DD/YYYY’; sin embargo, al hacer un select para mostrar los datos de un vuelo en el applet, la fecha se muestra en formato ‘DD/MM/YYYY’. Esto provoca que al tratar de hacer un insert o un update desde el applet a la base de datos Firebird obtengo un error. ¿Cómo puedo solucionarlo?

Podemos solucionar este problema de manera sencilla, «montando» la fecha en el formato deseado antes de hacer el insert / update. Por ejemplo:

fecha=request.querystring(«fecha»)  ‘en fecha tendremos la fecha en formato dd/mm/aaaa, tal cual que viene del applet.

fecha2 = month(fecha) & «/» & day(fecha) & «/» & year(fecha)  ‘en fecha2 tendremos la fecha en formato mm/dd/aaaa

De esta forma, el valor de fecha2 debería entrar sin problemas en la BD Firebird a través de un insert o un update.

Estoy tratando de mostrar los datos de la reserva en JSP, pero cuando intento escribir si el vuelo está cancelado o no, obtengo un error al evaluar si el campo Cancelado es igual a 0 ó a 1.

Es posible que el error provenga de que, al realizar la consulta, el campo Cancelado (0 ó 1) haya llegado en forma de carácter en lugar de en forma de entero. De ahí que no puedas evaluar si es igual a 0 ó 1 mediante el signo = dentro del if. Prueba a evaluar su valor de esta manera:

if (cancelado.equals(«0»))
{
campoCancelado=»Reservado»;
} else{
campoCancelado=»Cancelado»;
}

PRÁCTICA 2

Guardar la fotografía en el campo BLOB la base de datos.

Solución encontrada para el problema de guardar la fotografía en el campo BLOB la base de datos en la parte de PHP.  La función «mysql_real_escape_string» está obsoleta en PHP 7.

El problema se soluciona creando una conexión con la BD con mysqli, añadiendo la siguiente linea:

$con = mysqli_connect(«localhost», «root», «», «taller»);  //Conexión con la Base de Datos

y modificando la linea problemática añadiendo una «i» al nombre de la función además de el link como parámetro:

$jpg=str_replace(‘##’,’\##’,mysqli_real_escape_string($con, $jpg));

Solución aportada por: Carlos Alberto García Marco ()

 

Problemas con el cotejamiento entre PHP y MySQL.

Solución para el problema del cotejamiento  de caracteres entre la base de datos MySQL y la conexión PDO de PHP.

El problema se soluciona añadiendo el juego de caracteres en la cadena de conexión. Ejemplo de Fichero de Conexión:

<?php
function dbConnect(){

$conn = null;
$host = ‘localhost’;
$db = ‘embarcaciones’;
$user = ‘root’;
$pwd = »;
try{
$conn = new PDO(‘mysql:host=’.$host.’;dbname=’.$db.’; charset=utf8′, $user, $pwd);
//echo ‘Conectado con exito.<br>’;
}
catch (PDOException $e){
echo ‘<p>No se puede conectar con la base de datos !!</p>’;
exit;
}
return $conn;
}
$conn = dbConnect();
?>

Solución aportada por: Domingo Nieto (domingo.nieto@goumh.umh.es)