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

question-closed Czas serwera przerabiany na liczbę | zapis do bazy tylko Y-M

VPS Starter Arubacloud
0 głosów
97 wizyt
pytanie zadane 25 lutego 2017 w PHP przez emilkaanna Początkujący (330 p.)
zamknięte 6 kwietnia 2017 przez emilkaanna

Cześć :)

Mój program ma za zadanie zapisać w bazie podaną przez użytkownika składkę na następny miesiąc. Potrafię wypisać liczbę, która podaje następny miesiąc (teraz mamy luty(02) więc wyświetla 03) oraz rok. 

W bazie danych zapisuję osobno miesiąc i rok (ewentualnie można to będzie zapisać w jednej). Problemem jest, że podane wartości zapisują mi się jako zera. 

Zastanawiam się więc jak przerobić te wartości na zwykłe liczby. Jeśli ktoś ma inny pomysł, chętnie go przemyślę. 

Składka na następny miesiąc wynisić będzie:
	<form method="post" action="" name"wybor">
	<br><input type="number" step="any" name="kwota" /><br />
		
		<?php
			if (isset($_SESSION['e_kwota']))
			{
				echo '<div class="error">'.$_SESSION['e_kwota'].'</div>';
				unset($_SESSION['e_kwota']);
			}
		?>
		<br>
	<input type="submit" value="Dodaj" name="dodaj"/>
		</form>
	<?php
	if (isset($_POST['dodaj']))
	{
	$wszystko_OK=true;
	
	$kwota = $_POST['kwota'];

		if  (!preg_match('/^[0-9]+\.[0-9]{1,2}+$/ ', $_POST['kwota']) AND !preg_match('/^[0-9]+$/', $_POST['kwota']))  
		{
			$wszystko_OK=false;
			$_SESSION['e_kwota']="Cena nie może mieć więcej niż dwa miejsca po przecinku";
		}

		require_once "polaczenie.php";
			
		try 
		{
			$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
			if ($polaczenie->connect_errno!=0)
			{
				throw new Exception(mysqli_connect_errno());
			}
			else
			{	
					if ($wszystko_OK==true)
					{
					if ($polaczenie->query("INSERT INTO skladki VALUES (NULL, '$miesiac', '$rok', '$kwota', 'niezaplacono', 'niezaplacono', 'niezaplacono', 'niezaplacono', 'niezaplacono','niezaplacono','niezaplacono')"))
					{
						header('Location: skladki.php');
					}
					else
					{
						throw new Exception($polaczenie->error);
					}
					}
					
				$polaczenie->close();
			}
			
		}
		catch(Exception $e)
		{
			echo '<span style="color:red;">Błąd serwera!</span>';
			echo '<br />Informacja developerska: '.$e;
			echo $e->getMessage();
		}	
	}
	
	$dataczas = new DateTime();
	echo "Aktualny czas: ".$dataczas->format('Y-m-d H:i:s')."<br>";
	
$miesiac = date('m'); // miesiąc
$rok  = date('Y'); // rok

// dodanie jedynki do miesiąca
$miesiac++;

// sprawdzenie czy licznik się nie przekręcił
if ($miesiac == 13) {
   $miesiac = 1;
   $rok++;
}
echo "Za Miesiąc to: ".$miesiac."<br>";
echo "Rok to: ".$rok;
?>

 

komentarz zamknięcia: znalazłam odp

1 odpowiedź

0 głosów
odpowiedź 25 lutego 2017 przez Bosswell Nałogowiec (36,470 p.)
 
Najlepsza

Najpierw dodajesz do bazy dane, a dopiero później je deklarujesz ;)

W linii 41.

if ($polaczenie->query("INSERT INTO skladki VALUES (NULL, '$miesiac', '$rok', '$kwota', 'niezaplacono', 'niezaplacono', 'niezaplacono', 'niezaplacono', 'niezaplacono','niezaplacono','niezaplacono')"))

A dopiero w 66 i 67 lini kodu deklarowane są zmienne

$miesiac = date('m'); // miesiąc
$rok  = date('Y'); // rok

Ponad to, nie masz żadnych mechanizmów zabezpieczających przed wstrzykiwaniem SQL

Zabezpiecz dane wprowadzane przez użytkownika uzywająć real_escape_string()

http://php.net/manual/en/mysqli.real-escape-string.php

---------------------------------------------------

Kolejna sprawa to zapis do tabeli.

query("INSERT INTO skladki VALUES (NULL, '$miesiac', '$rok', '$kwota', 'niezaplacono', 'niezaplacono', 'niezaplacono', 'niezaplacono', 'niezaplacono','niezaplacono','niezaplacono')")

Miesiąc i rok zapisz w jednej kolumnie i skróć polecenie do 

query("INSERT INTO skladki(data) VALUES ($data)");

Zmień strukturę tabeli

Kolumny, gdzie wpisujesz 'niezaplacono', daj domyślnie na 'niezaplacono'

i przy dodaniu rekordu wystarczy wpisać datę, a reszta się sama wypełni

 

Podobne pytania

0 głosów
1 odpowiedź 105 wizyt
pytanie zadane 24 marca 2017 w PHP przez emilkaanna Początkujący (330 p.)
0 głosów
1 odpowiedź 185 wizyt
pytanie zadane 14 marca 2017 w PHP przez emilkaanna Początkujący (330 p.)
–1 głos
2 odpowiedzi 138 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...