PHP ja mystiset ääkköset

Viestiketju alueella 'Ohjelmointi' , aloittaja Ingenjör, 01.11.2017.

  1. Ingenjör

    Rekisteröitynyt:
    27.11.2000
    Viestejä:
    815
    Mikähän tässä mättää ny kun phpexcel tekee csv-listan ja se näyttää ihan ok:lta. Mutta alla oleva php näyttää vähä mielensä mukaan ääkkösnimiä tai ei. Esim. Köntsä nimi ei löydy csv:stä vaikka se siellä on, mutta Kytölä ja Mäkinen löytyy. Tuossa siis haetaan sukunimen perusteella $data[2], jossa on sukunimi ja etunimi. Ilmeisesti preg_match('/\b'.$nimi.'\b/', $str ei nyt taho toimia ihan kaikissa tilanteissa.

    PHP:
    <?php
    error_reporting
    (E_ALL & ~E_STRICT & ~E_NOTICE);
    $nimi mb_strtolower($nimi);

    $tulos 0;

    if ((
    $handle fopen("ranking.csv""r")) !== FALSE) {
       
      while ((
    $data fgetcsv($handle2000",")) !== FALSE) {

            
    $str mb_strtolower($data[2]);

            
    $tulos 1;

                    if (
    preg_match('/\b'.$nimi.'\b/'$str)) {

                  if(
    $i == 0){
                    echo 
    "<table><tr><td class=\"tdotsikko\">Nimi</td><td class=\"tdotsikkomid\">Ranking</td><td class=\"tdotsikkomid\">Pisteet</td></tr>";
                    
    $i=1;
                      }            

                echo 
    "<tr><td>" $data[2] . "</td><td class=\"mid\">" .  $data[0] . "</td><td class=\"mid\">" $data[4] . "</td></tr>";
            }    
           
      }
       
            if ((
    $tulos == 0) && ($nimi <> NULL)) {
            echo 
    "<h2>Nimeä " $nimi " ei löytynyt</h2>";
        }
     
      
    fclose($handle);
    }

    echo 
    "</table>";
    ?>
     
  2. siperiankuu

    Rekisteröitynyt:
    13.12.2016
    Viestejä:
    439
    Dokumentin ja hakusyötteen merkistöt ovat erilaiset, joten ascii-taulukon ulkopuoliset kirjaimet eivät vastaa toisiaan kooditasolla. Ihan näitä perusjuttuja, mistä sun pitäisi vuosien kokemuksella olla jo kärryillä.
     
    Viimeksi muokattu: 01.11.2017
  3. Collusion

    Rekisteröitynyt:
    26.04.2002
    Viestejä:
    2 286
    preg_matchiin on syytä lisätä u modiferi, eli:

    if ( preg_match('/\b'.$nimi.'\b/u', $str) )
     
  4. Ingenjör

    Rekisteröitynyt:
    27.11.2000
    Viestejä:
    815
    Meinas limppari lentää näppikselle kun luin tuon. Tää hei oli päivän paras vitsi :D Kiitos siitä!
     
  5. mystikkogames

    Rekisteröitynyt:
    12.03.2017
    Viestejä:
    150
    En kyllä ole koskenut vuosiin PHP:n. Mutta on paskaa koodia tunkea iffiin statementteja.
    Ja mikä helvetti on !=========== ???
    Näin ja yllätys bugit katovat:
    $handle = fopen("ranking.csv", "r");
    if ($handle) {
    ...
     
    Viimeksi muokattu: 02.11.2017
  6. ontelo

    Rekisteröitynyt:
    22.11.2002
    Viestejä:
    4 338
    Kannattaako sitä kommentoida jos ei tiedä asiasta mitään.

    !== vertailee myös tyyppiä. Omassa esimerkissäsi tuo if käsittely menee siten pieleen.


    Mutta alkup viestiin. Laita headeri tohon filuun mikä vastaa csvn encoodausta.

    Tyyliin:
    header('Content-Type: text/html; charset=utf-8');

    Lisäksi ku käytät mb_strtolower (unicode), niin sen filun olisi syytä olla silloin utf8.
     
    Viimeksi muokattu: 02.11.2017
  7. mystikkogames

    Rekisteröitynyt:
    12.03.2017
    Viestejä:
    150
    heheh
    We don't think that the popularity of an error makes it the truth.- Richard Stallman
    Entäs tuo statementti if-statementin sisällä? Hyvää koodia?
    Paskalle koodille ottaisin esimerkkiä täältä: http://hg.icculus.org/icculus/lugaru/file/97b303e79826/Source/GameTick.cpp
     
  8. ontelo

    Rekisteröitynyt:
    22.11.2002
    Viestejä:
    4 338
    Mielummin "paskaa" ja toimivaa kuin päin helvettiä. ;)

    Esim jos tuolla sun tyylillä tuota tiedostoa ei olemassa niin se heittää saman tien virhettä.
     
  9. Phoenx

    Rekisteröitynyt:
    20.11.2007
    Viestejä:
    216
    Kerrotko vielä mikä sitten on parempi tapa tarkistaa onko tiedosto olemassa jos ei IF-lause? Tuossa koodinpätkässä on neljä IF-lausetta, sillä nyt ole mitään merkitystä kunhan kyseessä ei ole mikään miljoonan rivin IF-ELSE helvetti.

    Tässä luultavasti on se ratkaisu tähän hommaan.
     
  10. Ingenjör

    Rekisteröitynyt:
    27.11.2000
    Viestejä:
    815
    Kiitos asiallisista vastauksista :) Nyt pelittää. Verkkareiden repijöille tiedoksi, että on olemassa tuulipukusijoittajia ja itse olen lanseerannut tuulipukukoodaaja-termin.
     
  11. mystikkogames

    Rekisteröitynyt:
    12.03.2017
    Viestejä:
    150
    Itse olisin tehnyt eri tavalla. Mutta kukin tehköön niinkuin lystää.
    Olen hionut jseweliä tässä. Seuraavaksi kilpailuun koodaan entryn. Muiden bugeja en kerkiä katsomaan kuin rahasta.
     
  12. Phoenx

    Rekisteröitynyt:
    20.11.2007
    Viestejä:
    216
    Niinno, kysyinkin että mikä se toinen tapa on kun ei tule itselle mitään äkkiseltään mieleen. :D
     
  13. Collusion

    Rekisteröitynyt:
    26.04.2002
    Viestejä:
    2 286
    Kannattanee jättää neuvomiset viisaammille, jos ei tiedä edes mitä !== operaattori tarkoittaa ;)
     
    Viimeksi muokattu: 03.11.2017

Jaa tämä sivu

Alibi
Anna
Deko
Dome
Erä
Hymy
Kaksplus
Kippari
Kotilääkäri
Kotiliesi
Koululainen
Ruoka.fi
Parnasso
Seura
Suomen Kuvalehti
TM Rakennusmaailma
Tekniikan Maailma
Vauhdin Maailma
Golfpiste
Vene
Nettiauto
Ampparit
Plaza
Muropaketti