Iteracja i zwiększanie indeksu

0
<?php
	$dzialanie = $_GET['dzialanie'];
	$ilosc = $_GET['ilosc'];
	$numer = $_GET['numer'];
	$tak=1;
	if($ilosc>2 && $dzialanie=='dz')
	{
	echo "<script language='javascript'>alert('Maksymalnie 2 liczby');</script>";
	include("skrypt.php");
	$tak=0;
	}
	if($ilosc!="")
	{
		if($numer<1 and $tak!=0)
		{
			echo "<br><strong>Wpisz liczby poniżej</strong><br>";
			echo "<form method=\"get\" action=\"index.php?id=skrypt2\">
			<INPUT type=\"HIDDEN\" NAME=\"id\" VALUE=\"skrypt2\">
			<INPUT type=\"HIDDEN\" NAME=\"numer\" VALUE=2>
			<INPUT type=\"HIDDEN\" NAME=\"ilosc\" VALUE=$ilosc>
			<INPUT type=\"HIDDEN\" NAME=\"dzialanie\" VALUE=$dzialanie>
			<table cellpadding=5 cellspacing=5 bgcolor=\"white\">";
			for($i=1;$i<=$ilosc;$i++)
				{
				echo "<td><input type=\"number\" name=\"liczba$i\" placeholder=\"Liczba $i\"></td>";
				}
			echo "<td align=\"right\"><input type=\"submit\" name=\"wyslij\" value=\"Gotowe!\" align=\"right\"></td></table></form>";
		}
		else if($tak!=0)
		{
			$wynik=0;
			switch("$dzialanie")
			{
				case 'dod':
					echo "Wybrano dodawanie<br>";
					for($j=1;$j<=$ilosc;$j++)
					{
						$wynik=$wynik+$_GET['liczba$j'];
					}
					echo "Wynik jest równy: ".$wynik;
					break;
				case 'od':
					echo "Wybrano odejmowanie<br>";
					for($j=1;$j<=$ilosc;$j++)
					{
						$wynik=$wynik-$_GET['liczba$j'];
					}
					echo "Wynik: ".$wynik;
					break;
				case 'mn':
					echo "Wybrano mnozenie<br>";
					$wynik = $_GET['liczba1'];
					for($j=2;$j<=$ilosc;$j++)
					{
						$wynik=$wynik*$_GET['liczba$j'];
					}
					echo "Wynik: ".$wynik;
					break;
				case 'dz':
					echo "Wybrano dzielenie<br>";
					$wynik = $_GET['liczba2']/$_GET['liczba1'];
					echo "Wynik: ".$wynik;
					break;
				default:
					echo "Nie znaleziono działania";
					break;
			}
		}
	}
	else
	{
		echo "<script language='javascript'>alert('Nie podałeś ilości liczb');</script>";
		include("skrypt.php");
	}

?>

Witajcie. Mam pytanie. Dlaczego ta pętla:

for($i=1;$i<=$ilosc;$i++)
				{
				echo "<td><input type=\"number\" name=\"liczba$i\" placeholder=\"Liczba $i\"></td>";
				}

Dobrze dodaje $i do "liczba"

Natomiast ta:

for($j=1;$j<=$ilosc;$j++)
					{
						$wynik=$wynik+$_GET['liczba$j'];
					}
					echo "Wynik jest równy: ".$wynik;
					break;

Już nie chce zadziałać właściwie?
Jest jakiś inny sposób na obejście tego?

4

A jak ma zadziałać?

$wynik=$wynik+$_GET['liczba$j'];

Zwróć uwagę na pojedynczy cudzysłów. Szukasz w GET stringa liczba$j. W pętli powyżej z $i używasz cudzysłowu podwójnego, przez co zmienna może być interpretowana.

0

Ooo, dzięki, faktycznie. Wypróbuję jutro :)

0

Podepnę się jeszcze pod to.

$wybory="";
		foreach ($_GET['wybor'] as $opcja)
			$wybory = $wybory.$opcja.",";
		echo $wybory;
		$sql = "SELECT $wybory FROM pracownicy";

Czy ktoś mi może wyjaśnić jak to naprawić?
W sensie, żeby wybierało z bazy danych te pola, które wybrał użytkownik w formularzu na poprzedniej stronie.
Dodatkowo, echo wyświetla tylko ostatni z wyborów.

0

W sensie, żeby wybierało z bazy danych te pola, które wybrał użytkownik w formularzu na poprzedniej stronie.

Podstawowe pytanie co dostajesz w gecie

0
	<select name="wybor" multiple="multiple">
		<option value="Imie">Imię</option>
		<option value="Nazwisko">Nazwisko</option>
		<option value="data_urodzenia">Data urodzenia</option>
		<option value="adres">Adres</option>
		<option value="placa">Płaca</option>
	</select>
	<input type="submit" name="wyslij" value="Gotowe!" align="right">

To masz na myśli?

1

Akurat nie, ale dobrze, że pokazałeś ten kawałek kodu.
Ogólnie jak masz wybór multiple, to musisz dać [] w name selecta, żeby móc wysyłać dane jako tablica (wiele elementów). W przeciwnym razie wyrzuci Ci tylko zawsze jeden element.
Looknij:

<form action="" method="GET">
	<select name="wybor[]" multiple="multiple">
	    <option value="Imie">Imię</option>
	    <option value="Nazwisko">Nazwisko</option>
	    <option value="data_urodzenia">Data urodzenia</option>
	    <option value="adres">Adres</option>
	    <option value="placa">Płaca</option>
	</select>
    <input type="submit" name="wyslij" value="Gotowe!" align="right">
</form>
if(!empty($_GET['wybor'])) 
{ 
	$sql = "SELECT "`'.implode("`,`",$_GET['wybor']).'`" FROM pracownicy"; 
}
0

Sposób fajny ale zrobiłem trochę inaczej, żeby umieścić dane w tabeli. A wiesz może w jaki sposób ustawić stałe wymiary komórek tabeli?
Chodzi mi o to żeby komórki o zawartości "5" i "jakiś dłuższy tekst" miały taką samą szerokość, wysokość niekoniecznie. Width i height się sprawdza tylko do wysokości...

Nieaktualne.

0

A może tak

<?php 

 	$dzialanie = $_GET['dzialanie'];
    $ilosc = $_GET['ilosc'];
    $numer = $_GET['numer'];
    $tak=1;

	if($ilosc>2 && $dzialanie=='dz')
    {
	    echo "<script language='javascript'>alert('Maksymalnie 2 liczby');</script>";
	    include("skrypt.php");
	    $tak=0;
    }
    
    if($ilosc != null){

    	if ($numer < 1 && $tak != null) {
    		 echo "<br><strong>Wpisz liczby poniżej</strong><br>";
            echo "<form method=\"get\" action=\"index.php?id=skrypt2\">
            <INPUT type=\"HIDDEN\" NAME=\"id\" VALUE=\"skrypt2\">
            <INPUT type=\"HIDDEN\" NAME=\"numer\" VALUE=2>
            <INPUT type=\"HIDDEN\" NAME=\"ilosc\" VALUE=$ilosc>
            <INPUT type=\"HIDDEN\" NAME=\"dzialanie\" VALUE=$dzialanie>
            <table cellpadding=5 cellspacing=5 bgcolor=\"white\">";

            for($i = 1; $i < $ilosc; $i++){
            	echo "<td><input type=\"number\" name=\"liczba\" value='".$i."' placeholder=\"Liczba $i\"></td>";
            }
            echo "<td align=\"right\"><input type=\"submit\" name=\"wyslij\" value=\"Gotowe!\" align=\"right\"></td></table></form>";
    	}
    	elseif ($tak != null) {
    		$wynik = 0;

    		switch ($dzialanie) {
    			case 'dod':
    				echo "Wybrano dodawanie<br>";
    				for($j = 1; $j < $ilosc; $j++){
    					$wynik = $wynik + $_GET['liczba']
    				}
    				echo "Wynik jest równy: ".$wynik;
    				break;
    			case 'od':
                    echo "Wybrano odejmowanie<br>";
                    for($j=1;$j<=$ilosc;$j++)
                    {
                        $wynik=$wynik-$_GET['liczba'];
                    }
                    echo "Wynik: ".$wynik;
                    break;
                case 'mn':
                    echo "Wybrano mnozenie<br>";
                    $wynik = $_GET['liczba1'];
                    for($j=2;$j<=$ilosc;$j++)
                    {
                        $wynik=$wynik*$_GET['liczba'];
                    }
                    echo "Wynik: ".$wynik;
                    break;
                case 'dz':
                    echo "Wybrano dzielenie<br>";
                    $wynik = $_GET['liczba2']/$_GET['liczba1'];
                    echo "Wynik: ".$wynik;
                    break;
    			default:
    				echo "Nie znaleziono działania";
    				break;
    		}
    	}

    }
    else{
    	echo "<script language='javascript'>alert('Nie podałeś ilości liczb');</script>";
        include("skrypt.php");
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1