SSL

Inicio de Recorrido

string PHP_URL = "<https://e468-181-199-38-5.ngrok-free.app/appReportes/src/model/inicioRecorrido.php>"; // Cambia esta URL a donde esté alojado tu script PHP

default
{
    state_entry()
    {
        llSay(0, "Object ready.");
    }

    collision_start(integer num_detected)
    {
        // Iterar sobre todos los objetos detectados
        for (integer i = 0; i < num_detected; i++)
        {
            // Verificar si el objeto detectado no es un avatar
            if (!(llDetectedType(i) & AGENT))
            {
                // Obtener el nombre del objeto detectado
                string object_name = llDetectedName(i);

                // Asumimos que el nombre del objeto tiene el formato "Nombre Apellido"
                list name_parts = llParseString2List(object_name, [" "], []);
                if (llGetListLength(name_parts) == 2)
                {
                    string nombre_conductor = llList2String(name_parts, 0);
                    string apellido_conductor = llList2String(name_parts, 1);

                    string url = PHP_URL + "?nombre=" + llEscapeURL(nombre_conductor) + "&apellido=" + llEscapeURL(apellido_conductor);
                    llHTTPRequest(url, [], "");
                }
                else
                {
                    llSay(0, "El nombre del objeto debe tener el formato 'Nombre Apellido'.");
                }
            }
        }
    }

    http_response(key request_id, integer status, list metadata, string body)
    {
        // Manejar la respuesta del servidor
        if (status == 200)
        {
            llSay(0, "Respuesta del servidor: " + body);
        }
        else
        {
            llSay(0, "Error al contactar el servidor.");
        }
    }
}

Impacto con Cono

string PHP_URL = "<https://e468-181-199-38-5.ngrok-free.app/appReportes/src/model/insertarCono.php>"; // Cambia esta URL a donde esté alojado tu script PHP

default
{
    state_entry()
    {
        llSay(0, "Object ready.");
    }

    collision_start(integer num_detected)
    {
        // Iterar sobre todos los objetos detectados
        for (integer i = 0; i < num_detected; i++)
        {
            // Verificar si el objeto detectado no es un avatar
            if (!(llDetectedType(i) & AGENT))
            {
                // Obtener el nombre del objeto detectado
                string object_name = llDetectedName(i);

                // Asumimos que el nombre del objeto tiene el formato "Nombre Apellido"
                list name_parts = llParseString2List(object_name, [" "], []);
                if (llGetListLength(name_parts) == 2)
                {
                    string nombre_conductor = llList2String(name_parts, 0);
                    string apellido_conductor = llList2String(name_parts, 1);

                    string url = PHP_URL + "?nombre=" + llEscapeURL(nombre_conductor) + "&apellido=" + llEscapeURL(apellido_conductor);
                    llHTTPRequest(url, [], "");
                }
                else
                {
                    llSay(0, "El nombre del objeto debe tener el formato 'Nombre Apellido'.");
                }
            }
        }
    }

    http_response(key request_id, integer status, list metadata, string body)
    {
        // Manejar la respuesta del servidor
        if (status == 200)
        {
            llSay(0, "Respuesta del servidor: " + body);
        }
        else
        {
            llSay(0, "Error al contactar el servidor.");
        }
    }
}

Servicio PHP

Inicio de Recorrido

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "appconduccion";

// Crear conexión
$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar conexión
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Obtener datos desde el GET o POST
$nombre = $_REQUEST['nombre'];
$apellido = $_REQUEST['apellido'];

// Verificar si el nombre y apellido existen en la tabla conductores
$sql = "SELECT cedula FROM conductores WHERE nombre = ? AND apellido = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $nombre, $apellido);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $cedula = $row['cedula'];

    // Verificar si ya existe un reporte para este conductor
    $sql = "SELECT * FROM maestro_reportes WHERE cedula_conductor = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("s", $cedula);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows == 0) {
        // Insertar nuevo reporte en la tabla maestro_reportes
        $fecha_inicio = date('Y-m-d H:i:s');
        $puntuacion = 100;

        $sql = "INSERT INTO maestro_reportes (cedula_conductor, fecha_inicio, puntuacion) VALUES (?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("ssi", $cedula, $fecha_inicio, $puntuacion);

        if ($stmt->execute()) {
            echo "Reporte insertado correctamente.";
        } else {
            echo "Error insertando el reporte: " . $conn->error;
        }
    } else {
        echo "Ya existe un reporte para este conductor.";
    }
} else {
    echo "Conductor no registrado.";
}

$stmt->close();
$conn->close();
?>

Impacto de Cono

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "appconduccion";

// Crear conexión
$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar conexión
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Obtener datos desde el GET o POST
$nombre = $_REQUEST['nombre'];
$apellido = $_REQUEST['apellido'];

// Verificar si el nombre y apellido existen en la tabla conductores
$sql = "SELECT cedula FROM conductores WHERE nombre = ? AND apellido = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $nombre, $apellido);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $cedula = $row['cedula'];

    // Verificar si ya existe un reporte para este conductor
    $sql = "SELECT * FROM maestro_reportes WHERE cedula_conductor = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("s", $cedula);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows == 0) {
        // Insertar nuevo reporte en la tabla maestro_reportes
        $fecha_inicio = date('Y-m-d H:i:s');
        $puntuacion = 100;

        $sql = "INSERT INTO maestro_reportes (cedula_conductor, fecha_inicio, puntuacion) VALUES (?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("ssi", $cedula, $fecha_inicio, $puntuacion);

        if ($stmt->execute()) {
            $id_reporte = $stmt->insert_id;
            echo "Reporte insertado correctamente.";
        } else {
            echo "Error insertando el reporte: " . $conn->error;
        }
    } else {
        $row = $result->fetch_assoc();
        $id_reporte = $row['id_reporte'];

        // Disminuir la puntuación en maestro_reportes
        $sql = "UPDATE maestro_reportes SET puntuacion = puntuacion - 1 WHERE id_reporte = ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("i", $id_reporte);
        $stmt->execute();
    }

    // Verificar si ya existe un detalle para esta infracción y este reporte
    $sql = "SELECT * FROM detalle_reporte WHERE id_reporte = ? AND infraccion = 'Impacto con el Cono'";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $id_reporte);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows == 0) {
        // Insertar nuevo detalle en la tabla detalle_reporte
        $cantidad = 1;
        $ubicacion = "zona de aprendizaje";

        $sql = "INSERT INTO detalle_reporte (id_reporte, infraccion, cantidad, ubicacion) VALUES (?, 'Impacto con el Cono', ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("iis", $id_reporte, $cantidad, $ubicacion);

        if ($stmt->execute()) {
            echo "Detalle insertado correctamente.";
        } else {
            echo "Error insertando el detalle: " . $conn->error;
        }
    } else {
        // Actualizar el detalle existente incrementando la cantidad
        $sql = "UPDATE detalle_reporte SET cantidad = cantidad + 1 WHERE id_reporte = ? AND infraccion = 'Impacto con el Cono'";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("i", $id_reporte);

        if ($stmt->execute()) {
            echo "Detalle actualizado correctamente.";
        } else {
            echo "Error actualizando el detalle: " . $conn->error;
        }
    }
} else {
    echo "Conductor no registrado.";
}

$stmt->close();
$conn->close();
?>