Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Zliczanie zaznaczonych checkbox!


Rekomendowane odpowiedzi

Witam,

Mam pewien problem. Otóż, w opcjach dodawania tematu ( IP.Board - dokładnie takie jak tutaj :-) ), są "Opcje postu", tu dodałem 3 nowe opcje. Standardowo nie są zaznaczone. Muszę je policzyć, aby obliczyć koszt dodania tematu ( dodania kolorowego tematu ), i tu pojawia się problem. Mam kod:

$checkBox	 = array ( $this->ipsclass->input['enablered'], $this->ipsclass->input['enablebold'], $this->ipsclass->input['enableitalic'] );
	$count		 = 0;
	$amount	 = 0;

	foreach ( $checkBox AS $value )
	{
		if ( isset( $value ) )
		{
			$count++;
		}
	}

Teoretycznie dobrze zlicza, ale nie rozróżniam wartości i jeżeli zmienię ceny w ACP na inne za każdą rzecz to nie będę wiedział ile odjąć userowi punktów. Jak widzicie, zmienne są przekazywane via $this->ipsclass->inpput['key']. Problem jest taki:

User wybiera z tych 3 pól te które mu odpowiadają. Jeżeli nie ma FG ( te punkty ) na nic, wiadomo, pętla przechodzi dalej. Jeżeli wybierze 1 opcję i go stać, UPDATE na tabeli userów z punktami i dodanie do tematu informacji o tym co wybrał ( pola: tit_col, tit_fw, tit_fs -> kolor, pogrubienie i kursywa ), ale muszę rozróżniać informacje. Wypadałoby dać 3 zmienne ze statusami dla każdego pola ( np: $red, $bold i $italic ) i wtedy na ich podstawie postawiać pod DB. Mogę do DB dodać wartości puste.

Czekam na Wasze opinie.

Pozdrawiam,

Largo

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Chyba się nie walnąłem i dobrze zrozumiałem.

$red	 = $this->ipsclass->input['enablered'];
$bold	= $this->ipsclass->input['enablebold'];
$italic  = $this->ipsclass->input['enableitalic'];

$price1  = 10; // Cena za red
$price2  = 5;  //cena za bold
$price3  = 3;  //cena za italic

$items   = array ( $red => $price1, $bold => $price2, $italic => $price3  );

$state   = $this->ipsclass->member['fg']; // to tylko przyklad i zakladam, ze ladujesz dane za pomoca load_member


   $tmp_sum = 0; //na poczatku nic nie kupilismy
   $i	   = 0; // taki sobie liczniczek

   foreach ( $items as $k => $v )
   {

   $tmp_sum = ( $tmp_sum <= $state ) ? ( $tmp_sum + $v ) : break;

   $i++;
   }

   if ( $i )
   {
	 $this->ipsclass->DB->do_update( 'members', array( 'fg'=> $state - $tmp_sum  ) , 'id='.$this->ipsclass->member['id'] );
   }

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Witaj,

Widzę, że z góry wiedziałeś o co chodzi :-) Mimo to, są problemy, przynajmniej na widzę 2 :-)

Parse error: syntax error, unexpected T_BREAK

Linijki:

		foreach ( $items AS $k => $v )
	{
		$tmp_sum = ( $tmp_sum <= $this->ipsclass->member['fg'] ) ? $tmp_sum + $v : break;
		$count++;
	}

Poprawiłem trochę kod, usunąłem ceny, bo je pobieram via $this->ipsclass->vars['']. Mimo to, ten błąd nie pozwala na działanie. Inna sprawa, po co jest $k? :->

PS. Do tablicy z tematem muszę dodać informacje, na jakiej zasadzie?

Pozdrawiam!

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

$k - z przyzwyczajenia. :P

Spróbuj tak:

  if ( $tmp_sum <= $this->ipsclass->member['fg'] ) 
{
$tmp_sum = $tmp_sum + $v;
}
else
break;

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Witaj,

Właśnie tak sobie poradziłem :-) Zapomniałem Ci na GG napisać :-) Dodałem $count++, na końcu pętli. Ale żle zlicza 3 rekordy. 3 zaznaczenia checkbox powodują odjęcie 10FG ( 1 ceny za zaznaczenie ), a danie 2 odejmuje dobrze, jeden tak samo. Inna sprawa, jak w temacie sprawdzać, który został zaznaczony i opłacony?

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

200FG, cena za 1 10FG i brak kasy? :P Co do $k, to już to zrobiłem :-) Problem jest z tym przeliczaniem, gdzie się rypie... Teoretycznie w samej pętli, bo tyle kasy odejmuje...

PS. Bardzo dziwnie odejmuje... 1 zaznaczenie -> odejmuje 20FG ( źle ), 2 zaznaczenia -> 20FG ( poprawnie ), 3 zaznaczenia -> 10FG ( źle ). O co chodzi? :-)

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

Witaj,

Oto i on :-) :

		$red	 = $this->ipsclass->input['enablered'];
	$bold	= $this->ipsclass->input['enablebold'];
	$italic  = $this->ipsclass->input['enableitalic'];

	$items   = array ( $red => $this->ipsclass->vars['red_title_cost'], $bold => $this->ipsclass->vars['bold_title_cost'], $italic => $this->ipsclass->vars['italic_title_cost'] );

	$tmp_sum = 0;
	$count   = 0;
	$payable = array(); // Ta pomocnicza do $k, na razie jednak nie mam idea :D

	foreach ( $items AS $k => $v )
	{
		if ( $tmp_sum <= $this->ipsclass->member['fg'] )
		{
			$tmp_sum = $tmp_sum + $v;
		}
		else
		{
			break;
		}
		$count++;
	}

	if ( $count )
	{
		$this->ipsclass->DB->do_update( 'members', array( 'fg'=> $this->ipsclass->member['fg'] - $tmp_sum ) , 'id='.$this->ipsclass->member['id'] );
	}

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Spróbuj jeszcze foreach zamienić na:

		foreach ( $items AS $k => $v )
	{
		if ( $tmp_sum <= $this->ipsclass->member['fg'] )
		{
		  if ( $v )  $tmp_sum = $tmp_sum + $v; else continue;
		}
		else
		{
			break;
		}
		$count++;
	}

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Niestety, nie działa dalej prawidłowo. Dalej ten sam problem...

PS. Zmieniłem kod dodawania na ciutkę wydajniejszy:

$tmp_sum += $v;

:-)

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Patrząc na ten kod, roztrząsając go na przykładzie powinno działać. ;/

Może usuń zmienne po operacji update'u. Kiedyś miałem z tym niezłą zagwozdkę.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Próbuj:

		$red	 = $this->ipsclass->input['enablered'];
	$bold	= $this->ipsclass->input['enablebold'];
	$italic  = $this->ipsclass->input['enableitalic'];

	$items   = array ( 'red' => $this->ipsclass->vars['red_title_cost'], 'bold' => $this->ipsclass->vars['bold_title_cost'], 'italic' => $this->ipsclass->vars['italic_title_cost'] );

	$tmp_sum = 0;
	$count   = 0;
	$payable = array(); // Ta pomocnicza do $k, na razie jednak nie mam idea :D

	foreach ( $items AS $k => $v )
	{
		if ( $tmp_sum <= $this->ipsclass->member['fg'] )
		{
			$tmp_sum = $tmp_sum + $v;
		}
		else
		{
			break;
		}
		$count++;
	}

	if ( $count )
	{
		$this->ipsclass->DB->do_update( 'members', array( 'fg'=> $this->ipsclass->member['fg'] - $tmp_sum ) , 'id='.$this->ipsclass->member['id'] );
	}

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Zrobione, masz:

<?php
$red	= 0;
$bold   = 1;
$italic = 0;

$price1  = 10; // Cena za red
$price2  = 5;  //cena za bold
$price3  = 3;  //cena za italic


$items = array( array( $red => $price1 ), array( $bold => $price2 ) , array( $italic => $price3 ) );



$tmp_sum = 0;
$count = 0;

foreach ( $items AS $arr )
{

	if ( $tmp_sum <= 400 )
	{	
		if ( key($arr) )
		{
			$tmp_sum += $arr[1];
			$count++;
		}

		else 
			continue;
	}

	else
		break;

}

echo 'Kwota = '.$tmp_sum.' | Liczba przeliczeń = '.$count;

?>

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.