Jump to content
GSForum - Segélyvonal

PHP kérdésem van


Recommended Posts

Posted

Hát akkor ezt benéztem :) Erre én is a SESSION-t ajánlom.

Posted

Ha van egy objektumom, amit törölni szeretnék, azt hogyan tehetem meg? NULL-ra állítás, unset() nem játszik, több referencia is mutat ugyanarra az elemre, és nekem az kellene, hogy, ha egy helyen kérem a törlését, akkor törlõdjön valójában is.

Posted

PHP objectekkel nem szokás ezt csinálni, illetve kb. hasztalan is lenne. Egyáltalán hogyan tudom meghívni? __destruct-ot nem lehet hívni, a referencia NULL-ra állítása szintén nem segít.

Posted
Miért akarod törölni? Azzal csak hibaüzenetet kaphatnál.
Posted

Már hogyne lehetne meghívni:

 foo->__destruct();

Az egy másik kérdés, hogy végrehajtja-e! :)

A PHP eredndõen csak akkor szünteti meg magát az objektumot, ha a rá mutató összes referencia megszûnik létezni. (A saját magára mutatók is.)

 

Posted

Magyarul nem fogja. :fogatlan: Maradok a jelenlegi módszeremnél, egy "flaget" true-ra állítok ezzel jelezvén, hogy már törölt.

Posted

Egy kis segítséget szeretnék kérni REGEX kifejezések terén. Van egy szövegem, amiben BB code tagek vannak és ezeket le kellene cserélni HTML-re. Azonban van néhány tag, amelyeket nem kell lecserélni abban az esetben, ha egy másik köztük van.

Példa:

$szoveg = "The [tag]quick brown [eztne]fox[/tag] jumps [tag]over the lazy[/tag] dog.";
preg_replace(#\[tag\](.*?)\[/tag\]#, "<p>\\1</p>", $szoveg);

Visszaadja ezt: The <p>quick brown [eztne]fox</p> jumps <p>over the lazy</p> dog.

De én ezt szeretném visszakapni: The [tag]quick brown [eztne]fox[/tag] jumps <p>over the lazy</p> dog.

 

Tehát valahogyan meg kellene vizsgálni, hogy a két kicserélendõ tag között benn van-e az a bizonyos harmadik, és ha igen, akkor ne cserélje le.

Posted

Egy kérdésem lenne.

 

Kapok 1 adathalmazt txt-ben. 7 "oszlop" van, és a táblázat egyszerû TXT formátumú, tabulátorokkal tagolt. Bármilyen szövegszerkesztõvel, vagy táblázatkezelõvel megnyitható.

 

Kérdésem, hogy azt hogyan tudom felvinni adatbázisba.

Posted

Beolvasod soronként, explode-dal felrobbantod mezõkre, mezõket beírod az adatbázisba.

 

Alternatív lehetõség: fogsz egy jobb szövegszerkesztõt (Notepad2), és csinálsz a fájlból egy SQL parancsot (lecseréled a TAB-okat vesszõre, eléírod, hogy INSERT INTO...

Posted

na ebbõl a soronkénti beolvasás nem fog menni..

Posted

Miért nem?

 

Tessék, soronkénti beolvasás + feldolgozás:

 

$f = fopen(DIR_FS_TEMP . 'actua/' . $process_filename, "r") or die('Nem tudom megnyitni a fájlt!');
while (($data = fgets($f)) !== false) {
    $sor = explode(';', trim($data));    // a trim kiveszi a végéről a sorvége jelet --> nem kerül be az utolsó $sor tömbelembe!
    dequote($sor);
    if (count($sor) >= 3 && is_numeric($sor[1])) {
        $list[] = array('barcode' => trim($sor[1]), 'name' => trim($sor[3]));
    }
}
fclose($f);

Ez az egyik CSV feldolgozóm részlete. Az fopen után a fájlt kell megadni az elérési útjával, illetve hogy hogyan szeretnéd megnyitni (r = read, többit lásd doksi). fgets beolvas egy sort, vagy ha már nincs több, akkor false-t ad vissza (ez van a while-ban), utána robbantjuk a sort pontosvessző mentén (neked tab, azaz "\t" mentén kell), aztán mindenféle feldolgozósat játszunk vele (a dequote saját függvény, leveszi a mező elejéről és végéről az idézőjeleket), és amikor végeztünk fclose-zal bezárjuk a fájlt.

Posted

Ciki vagy sem, de nem tudom, hogy kell soronként beolvasni. Egyben beolvasom és feldarabolom explode-al.

Kapok 1 k*rvanagy tömböt.

Az a baj, hogy a sorvégeket sem jelzik sehogy.

 

most 500 sor van benne.. de ki tudja menyi lesz..

 

$text = file_get_contents("data.txt");
$exp = explode('  ', $text);


 

Szerk:

Közben írtál te is. Köszönöm

 

Kipróbálom ez alapján!

Posted

Na szuperul mûködik, leszámítva, hogy nem igazán azt kapom amit akartam.

 

Ugyanis ha a \t-nél darabolom, akkor soronként veszi külön.

 

De gondolom ez azért van, mert nem jól kapom meg a txt-t.

 

Így csináltam, Balázs példája alapján:

$f = fopen('data.txt', "r") or die('Nem tudom megnyitni a fájlt!');
        while (($data = fgets($f)) !== false) {
         $sor = explode('\t ', $data);
            echo $sor[0].'<br>';
}
fclose($f);

Posted

Az a baj, hogy perjeles kódok csak dupla idézőjelek között játszanak, tehát a fenti esetben a szegény explode nem talál semmit, ami mentén robbanthatna, és ezért berakja az egész sort a $sor[0]-ba.

 

Úgyhogy

 

 '\t ' --> "\t"

csere, és figyelj oda, hogy most még egy szóköz is van az idézőjelek között, az valószínűleg nem kell, ha tényleg a TAB az elválasztó karakter!

 

Visszatérve a példádra, a file_get_contents működhet, két feltétellel: nem baromi nagy a fájl (befér a memóriába), és tudod, hogy mik a sor vége jelek! Notepad2-ben [Ctrl]+[shif]t+[9]-cel lehet ki-be kapcsolni a megjelenítésüket. Elvileg 3 állapot lehetséges:

  • CRLF - Carriage Return + Line Feed (PHP-ban: "\r\n") - Windowsban létrehozott fájlokra jellemző
  • LF - Csak Line Feed (PHP-ban: "\n") - Linuxban létrehozott fájlokra jellemző
  • CR - Csak Carriage Return (PHP-ban "\r") - nagyon ritka, főleg Macintoshokon létrehozott fájlokra jellemző, talán már ott sem
Szóval, ha tudod, mi a sorvége jel, akkor berántod a fájlt file_get_contents-szel, szétrobbantod az egészet sorokra, majd végigmész a sorokon és azokat még robbantgatod mezőkre:

 

$text = file_get_contents("data.txt");
$sorok = explode("\r\n", $text);
foreach($sorok as $sor) {
    $mezok = explode("\t", $sor);
    ...
    $mezok feldolgozása
    ...
}

Ennek megvan az a baromi nagy előnye, hogy eltünteti a sor vége jeleket a sorokból! Erre érdemes odafigyelni, mert amikor az fgets-szel olvasol be soronként, és robbantasz TAB mentén, a tömb utolsó eleme tartalmazni fogja a sorvége jelet is! Épp ezért érdemes trimmelni a sort, robbantás előtt. Ki is javítom a fenti példámat!

Posted

Szuper!

Tökéletes.

 

Köszönöm

 

  • 4 weeks later...
Posted

Hulladék jön vissza MySQL-ből:

    [Password] => 
kiss.p
    [WrongPasswordCount] => terllll.jklkkjk@gmail.comˆ558f49979da779a7532acd87a58f5d451f5c26db741c6c76384f33614b7c42b0100619a24
    [CreateDate] => 1d8ac07134727baa1cd43f9d12e4d40aeb738c6f37fa850f9f8f
    [LastLogin] => 578848d37Û    7Û
4$Û
:2Û

9
kiss
    [LastActivity] => peterÛ
*$huð?þ*2011-11-26 10:
    [PasswordExpire] => 

A fenti kimenet print_r hívás eredménye, szerintem egyértelmű, hogy mi a hiba.

 

Azon dolgoznék, hogy futtatni tudjak az ORM-emmel tárolt eljárásokat prepared statement-ekkel, de nem működik 100%-osan.

Posted

Szerintem használj valami értelmes adatbáziskezelõt a MySQL helyett. :P

Posted

Nagyon szívesen használnék MSSQL-t, de most MySQL-t kell. Van valami ötlet egyáltalán arra, miért lehet ez, vagy hogyan keressek rá a probléma megoldására?

 

---

 

Totális baromságot ír a sorok hosszára is.

Posted

Ezek a mezõk az objektumod tulajdonságai vagy az SQL által visszaadott tömb elemei?

Posted

És tényleg ez van a táblában, vagy ez csak a prepared statement eredménye?

Posted

A táblában minden adat szép is jó, olvasható. Ez már a prepared statement + tárolt eljárás eredménye, maga a tárolt eljárás multiple query-t "ad vissza".

Posted

Olyan, mintha valahol hiányozna egy string terminátor \0 és ezért összeborul az egész.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...