Pereiti prie turinio

PHP + SQL - Neteisingas filtravimas


Rekomenduojami pranešimai

Sveiki. Taigi, iškilo bėda. Kolegijoje reikia padaryti paprastą internetinį puslapį, kuris gauna duomenis iš DB ir prafiltruoja tuos duomenis per SQL užklausą vartotojui. Paprasta, tačiau iškilo bėda. Nesu labai geras konkrečiai PHP programuotojas todėl tenka daug "google'inti" ir ieškoti klaidų pranešimų StackOverflow. Bet dabar turi konkrečią problemą, kurios pats negaliu niekaip išspręsti. Turiu tokią duomenų lentelę:

http://www.part.lt/img/38d0d4971812eef030d89d3f7baa5b01787.png

iš kurios reikia atrinkti, kiek per tam tikrą mėnesį buvo pastatyta automobilių automobilių aikštelėje(čia tokia tema) ir suskaičiuoti sumą, kurią mokėjo vartotojai. Pvz.: yra trys spalio mėnesiai ir jie turi bendrą sumą 170, yra trys rugpjūčio mėnesiai ir jų bendra suma yra 70. Na, tikiuosi supratote, ką turiu omenyje. Toai randu pasitelkęs tokia SQL užklausą:

SELECT COUNT( parking_time ) AS 'Kiekis', SUM( sum ) AS 'Suma'
FROM parking_info
ROUP BY MONTH( parking_time ) , YEAR( parking_time )

 

ir taip atrodo išvedimas šios užklausos -

http://www.part.lt/img/e748d6441b8c3fcd44760bf3e097895724.png.

Čia tiesiog suskaičiuoja išviso kiekvieno mėnesio, kiek kas mokėjo(rugpjūtį buvo pastatyta 3 auto ir sumokėta 70LT, rugsėjį buvo pastatyta 3 auto ir sumokėta bendra suma 265 ir t.t.). Dabar man reikia padaryti, kad vartotojas, pasirinkęs tam tikra mėnesį, išvestu tik tam tikrą duomenų eilutę pasinaudojęs DropDown List'u. Tačiau man to niekaip nepavyksta padaryti. Niekaip negaliu padaryti, kad veiktų filtravimas. Taip atrodo šis puslapis dabar - http://deibra.co.nf/menesio_ataskaita.php . Ne taip turi būti. Vartotojas turi pasirinkti pvz.: rugpjūtį ir tūrėtų išvesti į atsakymų langą 3 ir 70, o dabar visišką nesąmonę daro. Tas pats ir su kitais mėnesiais.

Štai kaip atrodo mano filtravimas functions.php faile:

 

function cleanFilterArray($filters) {
   $new_filters = array();
   if ($filters) {
       foreach ($filters as $field => $data) {
           if ($data != '%%') {
               $new_filters[$field] = $data;
           }
       }
       return $new_filters;
   } else {
       return false;
   }
}

function get_months_in_LT()
{
$months = array();
$months[] = array(1, 'sausio');
$months[] = array(2, 'vasario');
$months[] = array(3, 'kovo');
$months[] = array(4, 'balandžio');
$months[] = array(5, 'gegužės');
$months[] = array(6, 'birželio');
$months[] = array(7, 'liepos');
$months[] = array(8, 'rugpjūčio');
$months[] = array(9, 'rugsėjo');
$months[] = array(10, 'spalio');
$months[] = array(11, 'lapkričio');
$months[] = array(12, 'gruodžio');

return $months;
}
function get_month_in_LT($num)
{
$months = get_months_in_LT();
return $months[$num][1];
}

function get_month_report($filters) {

$where = null;

if ($filters) {
           $filters = cleanFilterArray($filters);

           foreach ($filters as $field => $data) {
               if (!empty($data)) {
				$where .= $field.' \''.$data.'\' AND ';
               }
           }
           if ($where) {
               $where = 'WHERE '.substr($where, 0, -5); //removes last 'AND' and adds a 'WHERE' to the begining
           }
   }
	$result = mysql_query("
	SELECT COUNT( parking_time ) AS 'Kiekis', SUM( sum ) AS 'Suma'
	FROM parking_info
	".$where."
	GROUP BY MONTH( parking_time ) , YEAR( parking_time )

	") or die(mysql_error());

$rows = array();
while ($row = mysql_fetch_row($result))
{		
	$rows[] = $row;	
}		

return $rows;	
}

 

Ir konkretus puslapis(mėnesio_atsakita.php, kopijuoju visą puslapį):

 

<?php 

include_once 'functions.php';

// apdorojimas
if (isset($_POST['submit']))
{
$year = $_POST['year'];
$month = $_POST['month'];
}
else
{
$year = date('Y');
$month = date('m');
}

// patikra
if (isset($_POST['submit']))
{
if (isset($year) && $year > (int) date('Y'))
{
	$error = 'tokie metai dar neatėjo!';
}
if (isset($month) && $month > (int) date('m'))
{
	$error = 'toks mėnesis dar neatėjo!';
}
elseif (isset($year) && $year < 0)
{
	$error = 'data negali būti neigiama!';		
}
elseif (isset($month) && ($month < 1 || $month > 12))
{
	$error = 'tokio mėnesio nėra!';
}
elseif (isset($year) && !ctype_digit($year))
{
	$error = 'metų laukelyje negalima įvedinėti raidžių!';
}

}

if (isset($_POST['submit']))
{
$year = $_POST['year'];
$month = $_POST['month'];

$filters = array(
	"parking_time LIKE" => '%'.$year.'%',
	"parking_time LIKE" => '%'.$month.'%'
);

}
// duomenys
include_once 'mysql.php';
if (isset($_POST['submit']) && !isset($error)){

$infos = get_month_report($filters);	
}
$months = get_months_in_LT();
?>

<?php include_once 'header.php' ?>
	<h1>Mėnesio ataskaita</h1>
	<div id="main">
		<p>Kiek per mėnesį buvo laikyta automobilių ir bendra surinkta pinigų suma.</p>
		<?php 
			if (isset($error))
			{
				echo "<p class=\"error\">Klaida: $error</p>";
			}		
		?>
		<form method="post">
			<table border="1"> 
				<tr>
					<th>Year<span style="color:red">*</span></th>
					<td><input type="text" name="year" value="<?php if (isset($year)) echo $year ?>" /></td>
				</tr>
				<tr>
					<th>Month</th>
					<td>
						<select name="month" style="width:100%">
							<?php 
								foreach ($months as $montha)
								{
									if (isset($month) && $month == $montha[0])
									{
										echo "<option value=\"$montha[0]\" selected=\"selected\">$montha[1]</option>";
									}
									else
									{
										echo "<option value=\"$montha[0]\">$montha[1]</option>";
									}
								}
							?>
						</select> 
					</td>
				</tr>
				<tr>
					<td colspan="2" class="search"><button type="submit" name="submit" style="width:100%">Search</button></td>
				</tr>
			</table>
		</form>
		<br />
		<br />
		<?php if (isset($_POST['submit']) && sizeof($error) == 0): ?>
		<table border="1"> 
			<tr>
				<th>Kiekis</th>
				<th>Suma, LT</th>
			</tr>
			<?php
				foreach ($infos as $info)
				{
					echo "<tr>";
					echo "<td>$info[0]</td>";
					echo "<td>$info[1]</td>";			
					echo "</tr>";
				}
				if (count($infos) == 0)
				{
					echo "<tr><td colspan=\"2\">Rezultatų nėra.</td></tr>";				
				}
			?>
		</table>	
		<?php endif; ?>
		<br/>
		<br/>
		<br/>
		<br/>
	</div>
<?php include_once 'footer.php' ?>	

 

 

Tai vat. Tikiuosi, kad gal atsiras žmonių, kurie sugebės padėti man šioje situacija. Labai labai dėkui :)

Redagavo MrDBVids
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pabandyk tokią užklausą. Reikia paduoti 2 parametrus: mėnesį ir metus, turėtų ištraukti 1 eilutę.

 

SELECT COUNT( parking_time ) AS 'Kiekis', SUM( sum ) AS 'Suma'
FROM parking_info
WHERE MONTH( parking_time ) = '$month'  and  YEAR( parking_time ) = '$year'

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pabandyk tokią užklausą. Reikia paduoti 2 parametrus: mėnesį ir metus, turėtų ištraukti 1 eilutę.

 

SELECT COUNT( parking_time ) AS 'Kiekis', SUM( sum ) AS 'Suma'
FROM parking_info
WHERE MONTH( parking_time ) = '$month'  and  YEAR( parking_time ) = '$year'

 

Žiauriau dėkui. Puikiai viskas veikia :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...