• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wykonuje kod omijając linie kodu.

0 głosów
165 wizyt
pytanie zadane 13 sierpnia 2018 w PHP, Symfony, Zend przez KRY008 Nowicjusz (190 p.)
<?php
include_once('definicje.php');
if($_SESSION['id']<"" && $_SESSION['login']<"" && $_SESSION['haslo']<"")
{
header('Location: logout.php');
exit;
}
//formularz zrobiony
if(@$_GET['a']=="a" && @$_GET['przedszkolak'] <= 1 && @$_GET['zl'] <= 0 && $_GET['gr'] <=2)
{
	if($_GET['gr'] == 0)
	{
		$zl = $_GET['zl']*100;
	}
	elseif($_GET['gr'] < 0 && $_GET['gr'] > 100)
	{
		$zl = $_GET['zl']*100+$_GET['gr'];
	}
	else
	{
		echo 'ZŁA KWOTA';
		exit();
	}
	
	
 $sql = "INSERT INTO deklaracja (id_przedszkolaka, kwota, id_grupy) 
VALUES (:id, :kwota, :id_grupy)";
 
$stmt = $db->prepare($sql);
 
$stmt->bindParam(':imie', $_GET['imie'], PDO::PARAM_STR);       
$stmt->bindParam(':kwota', $zł, PDO::PARAM_STR);       
$stmt->bindParam(':id_grupy', $grupa, PDO::PARAM_STR);       

$stmt->execute(); 
$_SESSION['brak']='<font color="green"><center>Udało się dodać.</center></font>';
}
else
{

?>
<html>
<head>
<title>PANEL</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style type=text/css> 
a {     
text-decoration: none; 
color:Black;
} 
</style>
</head>
<body bgcolor="#CCFFFF">
<div align="center">
<?php
echo @$_SESSION['brak'];
$_SESSION['brak'] ="";
?>
<p style="font-size:40px">Dodaj Przedszkolaka</p>
<form action="" method="get">
<table border="0">
<tr>
<td colspan="2"><label style="font-size:20px"><input type="number" name="zl">ZŁ</label><label style="font-size:20px"><input type="number" name="gr">GR</label></td>
</tr>
<tr>
<td><p style="font-size:20px">Przedszkolak </td><td><select name="przedszkolak">
<?php
$stmt = $db->query('SELECT * FROM przedszkolak WHERE aktywny = 1 ORDER BY `przedszkolak`.`nazwisko` ASC');
    foreach($stmt as $row)
    {
		$a = $db->query('SELECT * FROM grupy WHERE id_grupy = '.$row['id_grupy']);
		foreach($a as $rw)
		{
			echo '<option value='.$row['id_przedszkolaka'].'>'.$row['nazwisko'].' '.$row['imie'].' - '.$rw['nazwa_grupy'].' ';
		}
		$a->closeCursor();		
		
		echo '</option>';
    }
    $stmt->closeCursor();
?>
</p></td>
</tr>

</table>
<input type="hidden" name="a" value="a" />
<input type="submit">
</body>
</html
<?php
}
?>

Pierwszy if działa jak powinnien, ale kolejny (9 linia) za każdym razem się omija.

komentarz 13 sierpnia 2018 przez Paweł Antyporowicz Stary wyjadacz (10,720 p.)
Najwidoczniej warunek się nie spełnia. A poza tym usuń @, to może uda Ci się zdebugować kod.
komentarz 13 sierpnia 2018 przez KRY008 Nowicjusz (190 p.)
Są po to że jak wykonuje się poraz pierwszy to nie ma tych danych i wyskakuje błąd że zmienna i danych w niej nie ma
komentarz 13 sierpnia 2018 przez Comandeer Mentor (465,600 p.)

@KRY008 jeśli odpowiedź Ci się nie podoba, to nie zgłaszaj jej, bo w żaden sposób nie łamie ona regulaminu. Ba, każda wypowiedź w tym temacie jest pomocna.

2 odpowiedzi

+3 głosów
odpowiedź 13 sierpnia 2018 przez Comandeer Mentor (465,600 p.)

Ten kod jest do zaorania i napisania na nowo.

  •  

      $_SESSION['id']<"" && $_SESSION['login']<"" && $_SESSION['haslo']<""

    Jaki sens ma ten warunek?

  •   @$_GET['a']=="a" && @$_GET['przedszkolak'] <= 1 && @$_GET['zl'] <= 0 && $_GET['gr'] <=2
  • Małp się nie stosuje. Tutaj powinno to zostać przepuszczone choćby przez isset albo filter_var.

  • Logika jest przemieszana z widokiem. Dla czytelności lepiej to rozdzielić.

  • Kod HTML jest z tamtej epoki. Nie używa się tabel do tworzenia formularzy.

Co do problemu: debuguj sobie choćby przez var_dump( $_GET ). Wtedy zobaczysz, co otrzymujesz w formularzu.

+1 głos
odpowiedź 13 sierpnia 2018 przez Marchiew Mądrala (6,310 p.)
1. Albo tak zrobiłeś tego ifa, że zawsze daje false
2. Albo usuń te małpy. Po co one w ogóle one są?
komentarz 13 sierpnia 2018 przez KRY008 Nowicjusz (190 p.)
Są po to że jak wykonuje się poraz pierwszy to nie ma tych danych i wyskakuje błąd że zmienna i danych w niej nie ma
komentarz 13 sierpnia 2018 przez Marchiew Mądrala (6,310 p.)
Użyj isset() do sprawdzenia istnienia danych. Nic trudnego :)
komentarz 13 sierpnia 2018 przez KRY008 Nowicjusz (190 p.)
Tylko muszą mieć odpowiednią wartość, a nie czy istnieją
1
komentarz 13 sierpnia 2018 przez Marchiew Mądrala (6,310 p.)
edycja 13 sierpnia 2018 przez Marchiew
<?php

session_start();

include_once('definicje.php');

if (isset($_SESSION['id']) && isset($_SESSION['login']) && isset($_SESSION['haslo'])) {
	if ($_SESSION['id'] === "" && $_SESSION['login'] === "" && $_SESSION['haslo']) {
		header('Location: logout.php');
		exit;
	}
}

//formularz zrobiony
if (isset($_GET['a']) && isset($_GET['przedszkolak']) && isset($_GET['zl']) && isset($_GET['gr'])) {
	echo "siema";
	if ($_GET['a'] === 'a' && $_GET['przedszkolak'] <= 1 && $_GET['zl'] <= 0 && $_GET['gr'] <= 2) {
		
		
		
		if ($_GET['gr'] == 0) {
			$zl = $_GET['zl'] * 100;
		}
		elseif ($_GET['gr'] < 0 && $_GET['gr'] > 100) {
			$zl = $_GET['zl'] * 100 + $_GET['gr'];
		}
		else {
			echo 'ZŁA KWOTA';
			exit();
		}

		$sql = "INSERT INTO deklaracja (id_przedszkolaka, kwota, id_grupy)
				VALUES (:id, :kwota, :id_grupy)";

		$stmt = $db->prepare($sql);

		$stmt->bindParam(':imie', $_GET['imie'], PDO::PARAM_STR); // :imie nie ma w zapytaniu
		$stmt->bindParam(':kwota', $zł, PDO::PARAM_STR);
		$stmt->bindParam(':id_grupy', $grupa, PDO::PARAM_STR);
		 
		$stmt->execute();
		$_SESSION['brak'] = '<font color="green"><center>Udało się dodać.</center></font>';
	}
}
else {
?><!DOCTYPE html>
<html>
<head>
	<title>PANEL</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<style type=text/css>
		a {
			text-decoration: none;
			color:Black;
		}
	</style>
</head>
<body bgcolor="#CCFFFF">
	<div align="center">
	<?php
		if (isset($_SESSION['brak'])) {
			echo $_SESSION['brak'];
			unset($_SESSION['brak']);
		}
	?>
	
	<p style="font-size:40px">Dodaj Przedszkolaka</p>
	<form action="" method="get">
		<table border="0">
			<tr>
				<td colspan="2">
					<label style="font-size:20px">
						<input type="number" name="zl">ZŁ
					</label>
					<label style="font-size:20px">
						<input type="number" name="gr">GR
					</label>
				</td>
			</tr>
			<tr>
				<td>
					<p style="font-size:20px">Przedszkolak</p>
				</td>
				<td>
					<select name="przedszkolak">
					<?php
						$stmt = $db->query('SELECT * FROM przedszkolak WHERE aktywny = 1 ORDER BY `przedszkolak`.`nazwisko` ASC');
							foreach ($stmt as $row) {
								$a = $db->query('SELECT * FROM grupy WHERE id_grupy = '.$row['id_grupy']);
								
								foreach ($a as $rw) {
									echo '<option value="'.$row['id_przedszkolaka'].'">'.$row['nazwisko'].' '.$row['imie'].' - '.$rw['nazwa_grupy'].'</option>';
								}
								
								$a->closeCursor();
							}
						
						$stmt->closeCursor();
					?>
					
					</select>
				</td>
			</tr>
		</table>
		<input type="hidden" name="a" value="a" />
		<input type="submit" value="wyslij" />
	</form>
</div>
</body>
</html>
<?php } ?>

Przerobiłem to i:
1. Warunki są bez sensu. Za każdym razem wyjdzie false na końcu zamiast wysłać dane do bazy
2. Wiele tagów było zamknięte w złych miejscach
3. Niektórych tagów zamykających w ogóle nie było
4. W bindParam masz :imie którego w ogóle nie ma w zapytaniu
5. W foreachu przy option poplątałeś się z apostrofami
6. Na początku nie było session_start chyba że w innym pliku jest

Podobne pytania

0 głosów
3 odpowiedzi 161 wizyt
pytanie zadane 14 października 2016 w PHP, Symfony, Zend przez hiper007 Stary wyjadacz (10,880 p.)
+1 głos
1 odpowiedź 105 wizyt
0 głosów
0 odpowiedzi 49 wizyt
pytanie zadane 28 kwietnia w PHP, Symfony, Zend przez manager96 Użytkownik (910 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

67,233 zapytań

114,193 odpowiedzi

242,036 komentarzy

45,643 pasjonatów

Przeglądających: 303
Pasjonatów: 10 Gości: 293

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...