PHP Address Book telefonszám formátumának megváltoztatása
2021-11-19T20:28:57+01:00
2021-11-21T11:27:40+01:00
2022-08-12T05:45:29+02:00
benedekp
Sziasztok!

Szükségem lenne egy kis nonprofit cégnél egy PHP-MySql telefonszám-email cím nyilvántartó megoldásra a belső hálón, amihez találtam is egy viszonylag jól használható többfelhasználós megoldást (Address Book Express - Contact Manager)
Viszont van vele egy olyan probléma, hogy a telefonszámok formátuma nem igazodik a magyar nyelvterülethez, ezért beírás után érdekes a végeredmény (például ilyen: (065) 6111-11).
Számomra az lenne a kívánatos, ha ezen a mezőn nem végezne ellenőrzést a program, tehát nyugodtan elfogadhatná a 06 (56) 111-111 és mobilnál a 06 (70) 555-555, vagy ehhez hasonlókat.
Mivel nem vagyok programozó, ezért három kérdésem lenne:
1) Használja közületek valaki ezt a nyilvántartót, esetleg megoldotta benne ezt a problémát?
2) A PHP-ban létezik valamiféle nyomkövetési funkció, amivel meg lehet találni, hogy a kód hol végzi a beírt adat validságának ellenőrzését? Ki lehet ezt a kódrész büntetlenül kommentelni?
3) Esetleg nincs valakinek kész megoldása egy kapcsolat nyilvántartó oldalra, aminek forrása még közkinccsé is tehető? Ha magyar nyelvű az külön plusz pont.

Köszönöm előre is a segítséget!
Mutasd a teljes hozzászólást!
A telefonszám-megjelenítési problémának megtaláltam a nyitját. Ezért a classes/controls/ViewPhoneNumberField.php fájl a felelős, ugyanis van ennek az osztálynak egy getTextValue-ja, ami így néz ki:

/** * @param &Array data * @return String */ public function getTextValue(&$data) { $result = $data[ $this->field ]; if( strlen($result) == 7 ) return substr($result, 0, 3)."-".substr($result, 3); if( strlen($result) == 10 ) return "(".substr($result, 0, 3).") ".substr($result, 3, 3)."-".substr($result, 6); return $result; }
Ezt kell így módosítani, hogy "kikapcsold" a formázást:

/** * @param &Array data * @return String */ public function getTextValue(&$data) { return $data[ $this->field ]; }
Az ellenőrzésnek a helyét még meg kell találnom.
Mutasd a teljes hozzászólást!

  • Hát, én felküzdöttem ezt a csodát, de esze ágában sincs formázni semmilyen telefonszámot sem. Milyen beállításokat kell eszközölnöm, hogy reprodukálhassam a problémát? Mellékeltem képet, hogy én mit látok.

    Mivel nem vagyok programozó

    Ha nem vagy programozó, akkor szerintem a második kérdést felejtsd el. Mire beindítottam, már addigra megizzadtam vele. Legyünk őszinték, még akkor is, ha a readme.txt leírja, hogy ebben a PHP fájlban - aminek a nevéből egyébként nem következik az, hogy ott van a konfiguráció - írd át a 254-258 sorokat, ez akkor sem utal jól átgondolt szervezésre. Az pedig megerősíti ezt, hogy ha ezt nem teszed meg, ahelyett, hogy kiírná, hogy "baj van, nem tudtam kapcsolódni az adatbázishoz", csak annyit ír, hogy "valami nem oké", és nyomozz. (Bár ez valamilyen szinten az én hibám is, hogy brute force módon estem neki, ahelyett, hogy olvasnék...)

    Alternatívát pedig talán tudnánk ajánlani, de nem írtál semmit se arról, hogy mit vársz el egy ilyen rendszertől, a helyes formátumon kívül.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Példának okáért a sima előhívós városi számokkal csinál érdekes dolgokat:
    0656555444 ebből lesz valami ilyesmi (065)65554-44. De van benne korlátozás is, például ha jól emlékszem a telefonszámnak 10 jegyűnek kell lennie (szerinte), így ezt el sem fogadta: 56555444, és a mobilokat sem lehet előhívó nélkül beírni: 701555444.
    Nem feltétlenül értem, hogy mi a fenének ellenőrzi a telefonszámnál a beírt adatot
    Legszívesebben ezt az ellenőrzést egy az egyben kivenném belőle, és had tárolja csak le úgy ahogy minden normális ember le szokta jegyezni ezeket a számokat: 06 (70) 1 555-444 (és ehhez hasonló emberközeli módon).

    ...és persze köszönöm, hogy ránéztél!
    Mutasd a teljes hozzászólást!
  • Ha nem vagy programozó, akkor szerintem a második kérdést felejtsd el. Mire beindítottam, már addigra megizzadtam vele.

    ...hát nem tudom. Nem volt vele különösebben problémám, röccent elsőre.

    Alternatívát pedig talán tudnánk ajánlani, de nem írtál semmit se arról, hogy mit vársz el

    Kb. ennyit várnék el, mint amit ez tud. Persze pár apróság jó lenne, de semmi különös:
    -- Böngészőben fusson
    -- Mysql-be dolgozzon
    -- Legalább még egy mező egy másik mobilnak (bár ez megoldható, ha kétszer is felviszem a kapcsolatot, bár tény, hogy nem a legelegánsabb megoldás).
    -- Elég lenne egy mező a név tárolására, nem kellene külön a család és keresztnév (ez annyira nem fontos, és nem is biztos, hogy sok haszna lenne)
    -- Születésnapok tárolásának nem sok értelme van számomra.
    -- és azok miatt akik használják a magyar felület sem lenne hátrány
    Kb. ennyi.
    De a legzavaróbb ez a nyüves telefonszámmal cseszekedés...
    Mutasd a teljes hozzászólást!
  • ...pár fős kis nonprofit cég, így semmi projekt management és hasonló nem kell.
    Excel táblában tárolnak minden szirsz@r kapcsolatot és soha senki nem tudja melyik épp az aktuális... ...meg volt, hogy a segítő szándékú kollegina névsorba rendezte a név oszlopot, de a hozzá tartozó többi adatot azt nem... ...csak négy év volt mire kiválogatták, hogy melyik adat kihez tartozik .
    Aztán csináltam nekik Zentyal szervert, meg seafile felhőt, meg képcímkézést meg egy csomó mindent, és most a kapcsolatokat kellene központosítani és jogosultsággal védeni (ezt tudja is a progi, de a telefonszámok... ...hát az gáz!)
    Mutasd a teljes hozzászólást!
  • A telefonszám-megjelenítési problémának megtaláltam a nyitját. Ezért a classes/controls/ViewPhoneNumberField.php fájl a felelős, ugyanis van ennek az osztálynak egy getTextValue-ja, ami így néz ki:

    /** * @param &Array data * @return String */ public function getTextValue(&$data) { $result = $data[ $this->field ]; if( strlen($result) == 7 ) return substr($result, 0, 3)."-".substr($result, 3); if( strlen($result) == 10 ) return "(".substr($result, 0, 3).") ".substr($result, 3, 3)."-".substr($result, 6); return $result; }
    Ezt kell így módosítani, hogy "kikapcsold" a formázást:

    /** * @param &Array data * @return String */ public function getTextValue(&$data) { return $data[ $this->field ]; }
    Az ellenőrzésnek a helyét még meg kell találnom.
    Mutasd a teljes hozzászólást!
  • Megtaláltam közben a validációt is, ami nagyon egyszerűen csak annyi, hogy a telefonszámnak számnak kell lennie, tehát más karaktert a számjegyeken kívül nem tartalmazhat - ami szerintem teljesen korrekt.

    Ha mindenképp meg akarsz ettől válni, az include/contact_settings.php fájlt kell módosítani. Telefonszámot két mező kezel, az egyik a "Mobile", a másik pedig a "FixedLine".
    A Mobile rész az 1004. soron kezdődik, míg a FixedLine az 1135.-től van, és a "Begin validation" és az "End validation" közti részt kell kitörölnöd mindkettőnél.

    Mondjuk nem a legszebb megoldás, mert így teljesen valid telefonszám lesz az is, hogy "Sanyi", szóval én annyira nem javaslom, hogy ezeket kitöröld, és egy plusz védelmet jelent az adatbázisodnak.
    Mutasd a teljes hozzászólást!
  • A sanyi problémát szerintem úgy fogom megoldani, hogy a számok mellé a space, -, (, ) karaktereket fogadja még el. Ez így pont elég is lenne, és talán a biztonságot sem csapná agyon.
    Egyébként nagyon szépen köszönöm, hogy foglalkoztál vele! Ki is próbálom...
    Mutasd a teljes hozzászólást!
  • Tegnap valamiért az oldal nem engedett hozzászólást küldeni, ezért most válaszolok...
    ...nos, végül benne hagytam a validáció ellenőrzést, mivel így az adatbevitel is gyorsabb (csak számokat kell bepötyögni), és igazából a végeredmény mégiscsak egy telefonszám, tehát jó lesz ez így.
    Egy technikai jellegű kérdésem viszont még lenne:
    A kódban ezeknek a részeknek a megtalálásához használtál valamilyen speciális alkalmazást, vagy pusztán a fejlesztői rutin segített?
    Mutasd a teljes hozzászólást!
  • Normális esetben debuggert használtam volna, de mivel nem volt PHP fejlesztői környezet telepítve a gépemre, a jó öreg var_dump + die, illetve "new Exception()->getTraceAsString()" kombinációt használtam, és a megérzéseimre hagyatkoztam. Nem a leghatékonyabb, de ezzel is lehet jutni valamire.
    Mutasd a teljes hozzászólást!
abcd