Forum » Izdelava spletišč » Branje TXT datotek v PHP-ju in vpis v MySQL bazo ne deluje pravilno?
Branje TXT datotek v PHP-ju in vpis v MySQL bazo ne deluje pravilno?
Housy ::
Hello 
Imam en majhen problem pri branju TXT datotek, kjer imam zabeleženih nekaj mailov, katere bi rad shranil v MySQL bazo, ampak ne deluje čisto tako, kot bi moralo.
Ko imam v TXT datoteki recimo 10 mailov in poženem skripto, se vse lepo shrani v bazo in če skripto takoj zatem ponovno poženem, mi ta lepo javi, da so maili v bazi že zabeleženi. Nakar v TXT datoteki dodam novo vrstico oz. nov elektronski naslov, ponovno poženem skripto in tukaj se zalomi. V bazo mi zabeleži tudi predzadnji email, kljub temu, da ta že obstaja v bazi. Za zadnjega se razume, saj še ne obstaja, ampak ne razumem, zakaj vsakič pri posodobljeni TXT datoteki vzame še predzadnjo vrstico in jo zabeleži v bazo?
A mi lahko kdo prosim pomaga? Spodaj prilagam še kodo.
Hvala in lp,
Housy
Imam en majhen problem pri branju TXT datotek, kjer imam zabeleženih nekaj mailov, katere bi rad shranil v MySQL bazo, ampak ne deluje čisto tako, kot bi moralo.
Ko imam v TXT datoteki recimo 10 mailov in poženem skripto, se vse lepo shrani v bazo in če skripto takoj zatem ponovno poženem, mi ta lepo javi, da so maili v bazi že zabeleženi. Nakar v TXT datoteki dodam novo vrstico oz. nov elektronski naslov, ponovno poženem skripto in tukaj se zalomi. V bazo mi zabeleži tudi predzadnji email, kljub temu, da ta že obstaja v bazi. Za zadnjega se razume, saj še ne obstaja, ampak ne razumem, zakaj vsakič pri posodobljeni TXT datoteki vzame še predzadnjo vrstico in jo zabeleži v bazo?
A mi lahko kdo prosim pomaga? Spodaj prilagam še kodo.
// default charset
header('Content-Type: text/html; charset=utf-8');
// start MySQL
require("config.php");
// read TXT file
$emails = file("test.txt");
$count = count($emails)-1;
// read emails line by line
// store them into database
for($i = 0; $i <= $count; $i++) {
// check if email is in the database already
$result = mysqli_query($mysqli, "SELECT email
FROM newsletter
WHERE email = '" . $emails[$i] . "'");
if(mysqli_num_rows($result) == 0) {
mysqli_query($mysqli, "INSERT INTO newsletter(email, code, active, date)
VALUES('" . $emails[$i] . "', '" . substr(md5(rand()), 0, 32) . "', '1', '0000-00-00 00:00:00')");
echo $emails[$i] . " je bil vpisan v bazo <br />";
} else {
echo $emails[$i] . " že obstaja <br />";
}
}
// close MySQL
mysqli_close($mysqli);Hvala in lp,
Housy
cen1 ::
To je zato ker ko prvič vstaviš maile zadnji vstavljen nima newline znaka. Ko drugič vstaviš ga pa ima. http://si1.php.net/manual/en/function.f...
Uporabi trim() na stringih da se znebiš newline ali pa uporabi FILE_IGNORE_NEW_LINES na file()
Uporabi trim() na stringih da se znebiš newline ali pa uporabi FILE_IGNORE_NEW_LINES na file()
Zgodovina sprememb…
- spremenilo: cen1 ()
ales85 ::
Preveri zakaj mysqli_num_rows($result) vrača nič, torej nič rezultatov. Ker takrat se funkcija izvede.
Druga rešitev, kjer imaš pa samo en query je, da uporabiš "INSERT IGNORE". Za to moraš nastaviti atribut 'email' kot unique in se insert ne bo izvedel, če bo email že vpisan, ker mora biti edinstven.
EDIT: pa očitno še to, kar je cen1 napisal :) Morda vseeno INSERT IGNORE, da ne rabiš prej preverjati ampak bo sam preveril.
Druga rešitev, kjer imaš pa samo en query je, da uporabiš "INSERT IGNORE". Za to moraš nastaviti atribut 'email' kot unique in se insert ne bo izvedel, če bo email že vpisan, ker mora biti edinstven.
EDIT: pa očitno še to, kar je cen1 napisal :) Morda vseeno INSERT IGNORE, da ne rabiš prej preverjati ampak bo sam preveril.
Zgodovina sprememb…
- spremenil: ales85 ()
Housy ::
To je zato ker ko prvič vstaviš maile zadnji vstavljen nima newline znaka. Ko drugič vstaviš ga pa ima. http://si1.php.net/manual/en/function.f...
Uporabi trim() na stringih da se znebiš newline ali pa uporabi FILE_IGNORE_NEW_LINES na file()
Aaaa too je bil keč, sedaj deluje
Hvala
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | [c#] shrani text, tabele, slikeOddelek: Programiranje | 1916 (1522) | Kemalito |
| » | [Delphi] Pregled tečajnice vrednostnih papirjevOddelek: Programiranje | 2235 (1951) | 'FireSTORM' |
| » | MySQL in czsOddelek: Izdelava spletišč | 3929 (3019) | krho |
| » | enostaven vnos v bazo MySQLOddelek: Izdelava spletišč | 1972 (1875) | Borci |
| » | Skripta za prijavo na žurko...Oddelek: Programiranje | 1861 (1623) | TheHijacker |