[PHP] Sprawdzanie checkboxow

0

Witam,
mam problem z odwolaniem sie do wiecej niz jednego ccheckboxa. Otoz na stronie mam formularz. W nim kilka checkboxow. Po nacisnieciu przycisku dalej, powinna ladowac sie nowa strona:

<?php
	session_start();
	require_once('all.php');
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>title</title>
</head>
<body>
	<?php
		menu();
	
		if (isset($_POST['add_db2']))
		{
			$conn = pg_connect("host= port=5432 user= password= dbname=");
			$marka = $_POST['marka'];
			$model = $_POST['model'];
			$silnik = $_POST['silnik'];
			$moc = $_POST['moc'];
			$miejsca = $_POST['miejsca'];
			$kolor = $_POST['kolor'];
			$c_abs = $_POST['abs'];
			$c_esp = $_POST['esp'];
			$c_radio = $_POST['radio'];
			$c_ipod = $_POST['ipod'];
			$c_klimatyzacja = $_POST['klimatyzacja'];
			$c_gps = $_POST['gps'];
			$cena = $_POST['cena'];
			$uwagi = $_POST['uwagi'];
				
				if(isset($c_abs))
					$abs = 1;
				elseif(empty($c_abs))
					$abs = 0;
					
				if(isset($c_esp))
					esp = 1;
				elseif(empty($c_esp))
					esp = 0;
					
				if(isset($c_gps))
					gps = 1;
				elseif(empty($c_gps))
					gps = 0;
					
				if(isset($c_ipod))
					ipod = 1;
				elseif(empty($c_ipod))
					ipod = 0;
					
				if(isset($c_klimatyzacja))
					klimatyzacja = 1;
				elseif(empty($c_klimatyzacja))
					klimatyzacja = 0;
					
				if(isset($c_radio))
					radio = 1;
				elseif(empty($c_radio))
					radio = 0;
			
				$sql = "INSERT INTO drogowe VALUES (nextval('drogowe_id_seq'),'$marka','$model','$silnik','$moc','$miejsca','$kolor','$abs','$esp','$radio','$ipod','$klimatyzacja','$gps','$cena','$uwagi')";
				pg_query($conn,$sql);
		}
	?>
    
</body>
</html>

Wlasnie gdy ma przejsc do strony z powyzszym kodem pokazuje sie jedynie biala strona. Dla formularza z jednym checkboxem wszystko dziala. Stad jestem przekonany, ze wina lezy po stronie zle opisanych checkboxow.

0

a gdzie formularz?

0

No tak... zapomnialem :)

elseif ($wybor == "drogowe")
			{
				?>
				<form action="new_car_add_drogowe.php" method="POST">
				<table>
					<tr><td colspan="2" align="center">Dodaj samochód drogowy.</td></tr>
					<tr><td>Marka:</td>
					<td><input name="marka" maxlength="20" /></td></tr>

					<tr><td>Model:</td>
					<td><input name="model" maxlength="50" /></td></tr>

					<tr><td>Silnik:</td>
					<td><input name="silnik" maxlength="50" /></td></tr>

					<tr><td>Moc:</td>
					<td><input name="moc" /></td></tr>

					<tr><td>Miejsca:</td>
					<td><input name="miejsca" /></td></tr>

					<tr><td>Kolor:</td>
					<td><input name="kolor" maxlength="50" /></td></tr>

					<tr><td>abs:</td>
					<td><input type="checkbox" name="abs" /></td></tr>
			
					<tr><td>esp:</td>
					<td><input type="checkbox" name="esp" /></td></tr>

					<tr><td>Radio:</td>
					<td><input type="checkbox" name="radio" /></td></tr>

					<tr><td>iPod:</td>
					<td><input type="checkbox" name="ipod" />

					<tr><td>Klimatyzacja:</td>
					<td><input type="checkbox" name="klimatyzacja" />

					<tr><td>GPS:</td>
					<td><input type="checkbox" name="gps" />

					<tr><td>Cena zl/dzień:</td>
					<td><input name="tel" />

					<tr><td>Uwagi:</td>
					<td><input name="uwagi" maxlength="200" />

					<tr><td colspan="2" align="center"><input type="submit" value="Dodaj" name="add_db2" /</td></tr>
				</table>
				</form>
				<?php
			}
0

Pierwsze primo. Robisz tak:

$c_gps = $_POST['gps'];

... a później tak:

if(isset($c_gps))

ja natomiast zrobiłbym tak:

if(isset($_POST['gps']))

Widzisz różnicę ? :) Ty robisz tak, że tworzysz zmienną $c_gps, a później sprawdzasz, czy jest utworzona.

Drugie secundo. Nazwy zmiennych zaczynamy od znaczku dolara, u siebie masz np. gps = 1, ipod = 1, itd. ... Stąd może wynikać Twój główny problem - zmienne bez dolara to są stałe, a jak wiadomo, stałym wartości w ten sposób się nie przypisuje. Zapewne php wyrzuca w tym miejscu błąd, ale nie pokazuje go, ze względu na niski poziom ustawienia error_reporting.

Trzecie tetrio. Poczytaj o SQL Injection, Twój skrypt jest na to podatny.

0

Ups, nie przejrzałem skryptu od początku, sorki. Error_reporting masz w porządku ... ale reszta mojego posta wciąż jest aktualna :)

0
guest123 napisał(a)

Pierwsze primo. Robisz tak:

$c_gps = $_POST['gps'];

... a później tak:

if(isset($c_gps))

ja natomiast zrobiłbym tak:

if(isset($_POST['gps']))

Widzisz różnicę ? :) Ty robisz tak, że tworzysz zmienną $c_gps, a później sprawdzasz, czy jest utworzona.

Jak na ironie taki zapis dziala dla innego wyboru... Ale faktycznie lepiej poprawic bo sie sztucznie zagmatwal kod.

guest123 napisał(a)

Drugie secundo. Nazwy zmiennych zaczynamy od znaczku dolara, u siebie masz np. gps = 1, ipod = 1, itd. ... Stąd może wynikać Twój główny problem - zmienne bez dolara to są stałe, a jak wiadomo, stałym wartości w ten sposób się nie przypisuje. Zapewne php wyrzuca w tym miejscu błąd, ale nie pokazuje go, ze względu na niski poziom ustawienia error_reporting.

Tak ten blad pominalem wczoraj... I ciezko sie przyznawac do tak elementarnych bledow :P

guest123 napisał(a)

Trzecie tetrio. Poczytaj o SQL Injection, Twój skrypt jest na to podatny.

Zostanie poprawione :)

jednakze poprawiajac te bledy dalej niewiele z tego nie wynika... Tzn jakas poprawa jest ale od poczatku:

elseif ($wybor == "drogowe")
			{
				?>
				<form action="new_car_add_drogowe.php" method="POST">
				<table>
					<tr><td colspan="2" align="center">Dodaj samochód drogowy.</td></tr>
					<tr><td>Marka:</td>
					<td><input name="marka" maxlength="20" /></td></tr>

					<tr><td>Model:</td>
					<td><input name="model" maxlength="50" /></td></tr>

					<tr><td>Silnik:</td>
					<td><input name="silnik" maxlength="50" /></td></tr>

					<tr><td>Moc:</td>
					<td><input name="moc" /></td></tr>

					<tr><td>Miejsca:</td>
					<td><input name="miejsca" /></td></tr>

					<tr><td>Kolor:</td>
					<td><input name="kolor" maxlength="50" /></td></tr>

					<tr><td>abs:</td>
					<td><input type="checkbox" name="c_abs" /></td></tr>
			
					<tr><td>esp:</td>
					<td><input type="checkbox" name="c_esp" /></td></tr>

					<tr><td>Radio:</td>
					<td><input type="checkbox" name="c_radio" /></td></tr>

					<tr><td>iPod:</td>
					<td><input type="checkbox" name="c_ipod" />

					<tr><td>Klimatyzacja:</td>
					<td><input type="checkbox" name="c_klimatyzacja" />

					<tr><td>GPS:</td>
					<td><input type="checkbox" name="c_gps" />

					<tr><td>Cena zl/dzień:</td>
					<td><input name="price" />

					<tr><td>Uwagi:</td>
					<td><input name="uwagi" maxlength="200" />

					<tr><td colspan="2" align="center"><input type="submit" value="Dodaj" name="add_db2" /</td></tr>
				</table>
				</form>
				<?php
				//***
				//add_car('add_drogowe');	
				//---
			}

Oraz dalsza czesc:

if (isset($_POST['add_db2']))
		{
			$conn = pg_connect("host= port=5432 user= password= dbname=");
			$marka = $_POST['marka'];
			$model = $_POST['model'];
			$silnik = $_POST['silnik'];
			$moc = $_POST['moc'];
			$miejsca = $_POST['miejsca'];
			$kolor = $_POST['kolor'];
			$price = $_POST['price'];
			$uwagi = $_POST['uwagi'];
			
			// Konieczne rzutowanie typu
			$cena = (integer)$price;
				
				if(isset($_POST['c_abs']))
					$abs = 1;
				else
					$abs = 0;
					
				if(isset($_POST['c_esp']))
					$esp = 1;
				elseif(empty($_POST['c_esp']))
					$esp = 0;
					
				if(isset($_POST['c_gps']))
					$gps = 1;
				elseif(empty($_POST['c_gps']))
					$gps = 0;
					
				if(isset($_POST['c_ipod']))
					$ipod = 1;
				elseif(empty($_POST['c_ipod']))
					$ipod = 0;
					
				if(isset($_POST['c_klimatyzacja']))
					$klimatyzacja = 1;
				elseif(empty($_POST['c_klimatyzacja']))
					$klimatyzacja = 0;
					
				if(isset($_POST['c_radio']))
					$radio = 1;
				elseif(empty($_POST['c_radio']))
					$radio = 0;
				
			
				$sql = "INSERT INTO drogowe VALUES (nextval('drogowe_id_seq'),'$marka','$model','$silnik','$moc','$miejsca','$kolor','$abs','$esp','$radio','$ipod','$klimatyzacja','$gps','$cena','$uwagi')";
				print '<br>'.$sql;

Error jaki dostaje to blad zmiennej $price: Notice: Undefined index: price... Tak jakby tej zmiennej nie bylo ale ona jest. Widocznie znow jakis blad, ktorego nie widze.

Co do tych checkboxow - ruszylo ale nie wpisuja sie jedynki gdy checkbox jest zaznaczony.

0

No to zrób tak jak kolega wyżej poradził. Nerwica może złapać.

guest123 napisał(a)

Pierwsze primo. Robisz tak:

$c_gps = $_POST['gps'];

... a później tak:

if(isset($c_gps))

ja natomiast zrobiłbym tak:

if(isset($_POST['gps']))

Widzisz różnicę ? :) Ty robisz tak, że tworzysz zmienną $c_gps, a później sprawdzasz, czy jest utworzona.

Drugie secundo. Nazwy zmiennych zaczynamy od znaczku dolara, u siebie masz np. gps = 1, ipod = 1, itd. ... Stąd może wynikać Twój główny problem - zmienne bez dolara to są stałe, a jak wiadomo, stałym wartości w ten sposób się nie przypisuje. Zapewne php wyrzuca w tym miejscu błąd, ale nie pokazuje go, ze względu na niski poziom ustawienia error_reporting.

Trzecie tetrio. Poczytaj o SQL Injection, Twój skrypt jest na to podatny.

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