» »

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.

// 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()

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.

Zgodovina sprememb…

  • spremenil: ales85 ()

Housy ::

cen1 je izjavil:

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c#] shrani text, tabele, slike

Oddelek: Programiranje
251916 (1522) Kemalito
»

[Delphi] Pregled tečajnice vrednostnih papirjev

Oddelek: Programiranje
102235 (1951) 'FireSTORM'
»

MySQL in czs

Oddelek: Izdelava spletišč
423929 (3019) krho
»

enostaven vnos v bazo MySQL

Oddelek: Izdelava spletišč
101972 (1875) Borci
»

Skripta za prijavo na žurko...

Oddelek: Programiranje
131861 (1623) TheHijacker

Več podobnih tem