Zapytania w funkcji

2016-09-16 20:47:00 Post #1 gość_Leon

 
Kiedyś używałem pewnej funkcji, w której były zapytania MySQL:
function loguj_ip() {
  $ip = $_SERVER["REMOTE_ADDR"];
  $przegladarka = $_SERVER["HTTP_USER_AGENT"];
  $znacznik = sprintf("%u", crc32($ip.$przegladarka));
  $referer = $_SERVER["HTTP_REFERER"];
  $adres = $_SERVER["REQUEST_URI"];

	$sql1 = "SELECT * FROM ip_dane WHERE znacznik=$znacznik";
	$result1 = mysqli_query($con, $sql1);
	$ip_dane = array();
	while($row1 = mysqli_fetch_assoc($result1)) {
		$ip_dane[] = $row1;
	}
	
	//$ip_dane = mysql_query("SELECT * FROM ip_dane WHERE znacznik=$znacznik");
	if (mysqli_num_rows($ip_dane)==0) {
		mysqli_query($con, "INSERT INTO ip_dane (znacznik, ip, przegladarka, referer) VALUES ($znacznik, '$ip', '$przegladarka', '$referer')");
	}
	mysqli_query($con, "INSERT INTO ip_strony (znacznik, data, adres) VALUES ($znacznik, NOW(), '$adres')");

	$wynik = mysqli_query($con, "SELECT znacznik, max(data) as data1, DATE_SUB(NOW(), INTERVAL 1 YEAR) as data2 FROM ip_strony GROUP BY (znacznik);");
	$wierszy = mysqli_num_rows($wynik);
	for ($i=0;$i<$wierszy;$i++) {
		$wiersz = mysqli_fetch_array($wynik);
		if ($wiersz["data1"]<$wiersz["data2"]) {
		 mysqli_query($con, "DELETE FROM ip_strony WHERE znacznik={$wiersz["znacznik"]}");
		 mysqli_query($con, "DELETE FROM ip_dane WHERE znacznik={$wiersz["znacznik"]}");
		}
	}
}
Chciałbym użyć jej teraz z MySQLi, ale wciąż wyskakuje błąd:
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in
Działa natomiast tak:
function loguj_ip($polaczenie) {
Czy tak muszę deklarować? Czy jest inny sposób?

2016-09-16 23:02:44 Post #2 gość_Leon

 
Chyba znalazłem odpowiedź:
function loguj_ip() {
    global $polaczenie;

2016-09-17 14:39:50 Post #3 nospor

 
Uzywanie global to najgorsze z rozwiazan. Przekazanie jako $polaczenie jako parametr funkcji jest ok

2016-09-19 18:47:42 Post #4 gość_Leon

 
Dlaczego tak?

2016-09-19 23:03:51 Post #5 nospor

 
global to pozostalosc sprzed epoki kamienia lupanego. Kiedys global bylo na porzatku dziennym i na porzadku dziennym byly tez i problemy
Uzywajac global nie masz kontroli nad tym czy ci gdzies po drodze nie nadpisze sie ta zmienna co zaskutkuje bledami. To tylko jeden z przykladow.
Uzywajac global odsuwasz sie od wszelkich wzorcow projektowych. Jesli na powaznie myslisz o programowaniu to bedzie to problem.

Odpowiedz

Ostatnio na forum

  1. PHP Developer - Gdań... moze kobieta
  2. PHP Developer - Gdań... Tomek ARforce
  3. Hackathon Distribute... aleksandra_c
  4. Klasa obsługi szablo... freeboc
  5. PHP [Symfony] Develo... NewPerspective
  6. [Wrocław][PHP Develo... Software house Amsterdam Standard sp. z o.o.
  7. Senior PHP Developer... Kingit

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer