Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Aiuto php...

    Ciao a tutti,
    ho bisogno di una aiuto da qualche esperto, ma sinceramente non so bene se questo forum è quello giusto, ma spero molto di si.
    Sono membro dello staff di una compagnia aerea virtuale, e il nostro sito è stato realizzato da un programmatore di php, ma abbiamo un problema che nemmeno lui riesce a risolvere.
    Il domanda è questa:
    nella pagina delle rotte, il codice legge le latitudini degli aeroporti in gradi da 0 a 180 Est, e da 0 a -180 Ovest. Il problema è che leggendo i gradi riconosce solo 3 caratteri, quindi verso ovest riconosce solo le latitudini fino a -99°, a -100° il codice php da errore.
    Come posso modificare il codice per far riconoscere le latitudini oltre al -99°?
    Vi riporto tutto il codice della pagina, e ringrazio chiunque riesca a darmi un aiuto.
    Ciao a tutti.

    codice:

    <?php

    class Routes extends Controller {

    function Routes()
    {
    parent::Controller();
    if($this->session->userdata('pid') == "")
    {
    redirect('login');
    }
    }

    function index()
    {
    $this->template->write('title', 'Available Routes - Company Operations');

    $query = $this->db->query("SELECT * FROM `pilots` WHERE `pilot_id` = '".$this->session->userdata('pid')."'");
    $row = $query->row();
    // all routes
    $query2 = $this->db->query("SELECT * FROM `routes` WHERE `origin` = '".$row->location."'");
    $european = '';
    $american = '';
    $asian = '';
    foreach($query2->result() as $row2)
    {
    $query3 = $this->db->query("SELECT * FROM `airports` WHERE `ident` = '".$row2->destination."'");
    $row3 = $query3->row();
    $query4 = $this->db->query("SELECT * FROM `airports` WHERE `ident` = '".$row2->origin."'");
    $row4 = $query4->row();

    $tmprow = ' <tr>
    <td>'.$row3->name.' - '.$row3->ident.'</td>
    <td>'.round($this->distance($row3->lat,$row3->lon,$row4->lat,$row4->lon)).' nm</td>
    <td>'.ucwords($row2->flight_type).'</td>
    <td>Book Flight</td>
    </tr>';
    if(substr($row2->route_number,0,1) == "1" || substr($row2->route_number,0,1) == "3" || substr($row2->route_number,0,1) == "4")
    {
    $european .= $tmprow;
    }
    if(substr($row2->route_number,0,1) == "6" || substr($row2->route_number,0,1) == "7")
    {
    $american .= $tmprow;
    }
    if(substr($row2->route_number,0,1) == "2")
    {
    $asian .= $tmprow;
    }
    }

    $this->template->parse_view('content', 'lounge/routes', array('eu'=>$european,'us'=>$american,'as'=>$asian ));

    $this->template->render();
    }

    function distance($Aa, $Ba, $Ca, $Da){
    // this is just some basic error checking i'd normally put it into a seperate file but
    // for the purposes of this file... well you know.
    $input = array($Aa, $Ba, $Ca, $Da);
    foreach($input as $name){
    if (@ereg("[[:alpha:]]",$name)){
    echo "You cannot enter letters into this function
    \n";
    die;
    }
    if(@ereg("\.",$name)){
    $dot = ".";
    $pos = strpos($name, $dot);
    //echo $pos."
    \n";
    if($pos > 3){
    echo "The input cannot exceed more than 3 digits left of the decimal
    \n";
    die;
    }
    }
    if($name > 365){
    echo "The input cannot exceed 365 degrees
    \n";
    die;

    }
    }



    $A = $Aa/57.29577951;
    $B = $Ba/57.29577951;
    $C = $Ca/57.29577951;
    $D = $Da/57.29577951;
    //convert all to radians: degree/57.29577951

    if ($A == $C && $B == $D ){
    $dist = 0;
    }
    else if ( (sin($A)* sin($C)+ cos($A)* cos($C)* cos($B-$D)) > 1){
    $dist = 3963.1* acos(1);// solved a prob I ran into. I haven't fully analyzed it yet

    }else{

    $dist = 3963.1* acos(sin($A)*sin($C)+ cos($A)* cos($C)* cos($B-$D));
    }
    return ($dist);
    }
    }

    /* End of file routes.php */
    /* Location: ./system/application/controllers/routes.php */

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    il problema è qui:

    Codice PHP:
    if(@ereg("\.",$name))

       
    $dot ".";  
       
    $pos strpos($name$dot); 
       
    //echo $pos." 
    \n"; 
       if(
    $pos > 3)
       { 
          echo "
    The input cannot exceed more than 3 digits left of the decimal
    \n"; 
          die; 
       } 

    questo pezzo di codice controlla se a sinistra della virgola ci sono al più 3 caratteri.

    Naturalmente il - viene visto come carattere, e se immetti un numero negativo di tre cifre alla funzione risulta che a sinistra della virgola ci sono 4 caratteri e quindi da errore.

    Come risolvere?

    ci sono diversi modi, te ne dico uno:

    1) si controllano quanti caratteri ci sono a sinistra della virgola
    2) se sono 4, si controlla che il primo sia un trattino. Se è un trattino si va avanti
    3) se sono 3 si va avanti normalmente.
    Jekkil

  3. #3
    Ciao,

    innanzi tutto direi che prima di postare sul forum sarebbe "essenziale", quanto meno, leggere il regolamento così da evitare interventi da parte dei moderatori.

    Detto questo, i titolo contenenti le diciture "aiuto", "help", "urgente" con relativi sinonimi e/o simili, sono vietatissimi!

    Per questa volta sistemo io, ma maggiore attenzione per il futuro gentilmente.

    PS: mettere il codice tra tag php e tag code sarebbe una cosa buona perché rende il tutto molto più leggibile

  4. #4
    Ciao, chiedo scusa per il titolo, non ci ho pensato proprio.
    Grazie per la risposta ma non ho proprio capito come correggere il problema...
    I caratteri prima della virgola possono essere 3 o 4 (es: -99 o -100), non è che devo sostituire il "3" con un "4"? anche se questa soluzione mi sembra troppo facile.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    potresti farlo...
    ma poi leggerebbe anche numeri da 1000 a 9999...
    Jekkil

  6. #6
    comunque le latitudini possono essere al massimo composte da 4 caratteri (-180)

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    allora prova a mettere 4 e vedi se funziona...
    Jekkil

  8. #8
    ok, stasera provo e ti farò sapere. Grazie per l'aiuto.

    codice:
    if(@ereg(".",$name)) 
    { 
    $dot = "."; 
    $pos = strpos($name, $dot); 
    //echo $pos." 
    \n"; 
    if($pos > 3) 
    { 
    echo "The input cannot exceed more than 3 digits left of the decimal
    \n"; 
    die; 
    } 
    }
    il 3 da cambiare è questo? credo di si...

  9. #9
    Grazie per l'aiuto! ha funzionato perfettamente!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.