[php] - już działa !!

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
amp
Posty: 13
Rejestracja: czw kwie 26, 2007 5:32 pm

[php] - już działa !!

Post autor: amp »

Mam stronkę na której pobierane sa dane z plików csv do bazy i wyświetlane na stronie do tego jest mini wyszukiwarka. Niestety coś przestało działać i nie mogę dojść coś wyrzuca mi taki błąd:

Kod: Zaznacz cały

Fatal error: Call to undefined function doSelectFromArray() in /virtual/d/t/dt.ugu.pl/szukaj.php on line 30
we wskazywanej linijce jest zapis:

Kod: Zaznacz cały

doSelectFromArray(listaKrajow(),"kraj");
Aby wszytko było jaśniejsze umieszczam zawartość pliku szukaj.php :

Kod: Zaznacz cały

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=Iso-8859-2">
</head>
<body>
<center>
<?php
	require_once('biura.php');
	
	if(isset($_POST['kraj']) &&
		 isset($_POST['wylotZ']) &&
		 isset($_POST['dataWylotu'])) {
	
				$kraj = $_POST['kraj'];
				
				$wylotZ = $_POST['wylotZ'];
				$dataWylotu = $_POST['dataWylotu'];
				
				$dataDo = "9999-12-31";
				
				wyszukajOfert($kraj, $dataWylotu, $dataDo, $wylotZ);
	} else {
?>
<form method=post action="szukaj.php" target="WynikiSzukaj">
<input type=hidden value="<?php echo $_GET['biura'];?>" name=biura>
<table>

<?php
 		echo "<tr><td>Kraj:</td><td>";																		
		doSelectFromArray(listaKrajow(),"kraj");
		echo "</td></tr><tr><td>Wylot z:</td><td>";
		doSelectFromArray(listaWylotow(), "wylotZ", "odkodujIATA");
		echo "</td></tr><tr><td>Wylot po:</td><td>";
		doSelectFromArray(listaDat(), "dataWylotu");
		echo "</td></tr>";		

?>
<tr><td></td><td><input type="submit" value="Szukaj"></td></tr>
</table>
</form>

<?php 
}
?>
</center>
</body></html>
Ostatnio zmieniony wt maja 22, 2007 5:57 pm przez amp, łącznie zmieniany 1 raz.
amp
Posty: 13
Rejestracja: czw kwie 26, 2007 5:32 pm

jeszcze funkcja.php

Post autor: amp »

jeszcze plik funkcje.php :

[php]<?php
require_once('UniversalCSV.php');

function odkodujIATA($napis) {
$kody = array (
'WAW' => 'Warszawa',
'KRK' => 'Kraków',
'KTW' => 'Katowice',
'GDN' => 'Gdańsk',
'WRO' => 'Wrocław',
'POZ' => 'Poznań',
'RZE' => 'Rzeszów',
'LCJ' => 'Łódź',
'SZZ' => 'Szczecin',
'BZG' => 'Bydgoszcz',
'IEG' => 'Zielona Góra',
'SZY' => 'Szczytno');

while(list($klucz, $wartosc) = each($kody)) {
$napis = str_replace($klucz, $wartosc, $napis);
}

return $napis;
}
class Biuro extends UniversalCSV {

private $poleMiejsca;
private $poleWylotu;
private $poleKraju;
private $dataWylotu;


public function setPoleMiejsca($indeks) {
$this->poleMiejsca=$indeks;
}


public function setPoleWylotu($indeks) {
$this->poleWylotu=$indeks;
}

public function setPoleKraju($indeks) {
$this->poleKraju=$indeks;

}
public function setPoleDaty($indeks) {
$this->dataWylotu=$indeks;
}
public function getMiejsca() {
return $this->wartosciPola($this->poleMiejsca);
}

public function getWyloty() {
return $this->wartosciPola($this->poleWylotu);
}

public function getKraje() {
return $this->wartosciPola($this->poleKraju);
}

public function getDaty() {
return $this->wartosciPola($this->dataWylotu);
}
public function getMiasta() {
return $this->wartosciPola($this->poleMiasta);
}
public function wypiszSiebie($tablica) {
//nie ma implementacji
//w kazdej klasie dziedziczacej z tego trzeba
//napisac wlasna funkcje wyswietlajaca
}

public function szukajWycieczki($kraj, $data_od, $data_do, $wylot_z) {
$warunki = array();
$porzadek = array();

if(isset($this->poleKraju)) {
$warunki[$this->poleKraju] = $kraj;
if($kraj != "")
array_push($porzadek, "pole".$this->poleKraju);
}

if(isset($this->dataWylotu)) {
$warunki[$this->dataWylotu] = array($data_od, $data_do);
if(($data_od != "") || ($data_do != "") )
array_push($porzadek, "pole".$this->dataWylotu);
}


if(isset($this->poleWylotu))
$warunki[$this->poleWylotu] = $wylot_z;

if(count($porzadek) > 0)
$porzadek =" ORDER BY ".implode(",", $porzadek);
else
$porzadek = "";

return $this->search($warunki, $porzadek." LIMIT 100");
}


function listaPol($funkcja) {
global $biura;
$result = array();

if(isset($_GET['biura'])) $wybrane_biuro = $_GET['biura']; else $wybrane_biuro="";
//for($i=0; $i<count($biura); $i++)
if($wybrane_biuro=="Wezyr")
{
$result = array_merge($biura[0]->$funkcja(), $result);
}
if($wybrane_biuro=="EccoHoliday")
{
$result = array_merge($biura[1]->$funkcja(), $result);
}
if($wybrane_biuro=="EccoTravel")
{
$result = array_merge($biura[2]->$funkcja(), $result);
}
if($wybrane_biuro=="Soltours")
{
$result = array_merge($biura[3]->$funkcja(), $result);
}
$result = array_unique ($result);
sort($result);
return $result;
}

function listaKrajow() {
return listaPol("getKraje");
}


function listaWylotow() {
return listaPol("getWyloty");
}

function listaDat() {
return listaPol("getDaty");
}


function wyszukajOfert($kraj, $data_od, $data_do, $wylot_z) {
global $biura;
echo "<table>";
if(isset($_POST['biura'])) $wybrane_biuro = $_POST['biura']; else $wybrane_biuro="";
if($wybrane_biuro=="Wezyr") {
//for($i=0; $i<count($biura); $i++) {
$wyniki = $biura[0]->szukajWycieczki($kraj, $data_od, $data_do, $wylot_z);
/*echo "<tr><td valign='top'><b>".
$biura[0]->getTabela().
"</b></td><td>";
*/
for($j=0; $j<count($wyniki); $j++)
$biura[0]->wypiszSiebie($wyniki[$j]);

echo "</td></tr>";
}
if($wybrane_biuro=="EccoHoliday"){
//for($i=0; $i<count($biura); $i++) {
$wyniki = $biura[1]->szukajWycieczki($kraj, $data_od, $data_do, $wylot_z);
/*echo "<tr><td valign='top'><b>".
$biura[1]->getTabela().
"</b></td><td>";*/
for($j=0; $j<count($wyniki); $j++)
$biura[1]->wypiszSiebie($wyniki[$j]);
echo "</td></tr>";
}

if($wybrane_biuro=="EccoTravel"){
//for($i=0; $i<count($biura); $i++) {
$wyniki = $biura[2]->szukajWycieczki($kraj, $data_od, $data_do, $wylot_z);
/*echo "<tr><td valign='top'><b>".
$biura[2]->getTabela().
"</b></td><td>";
*/
for($j=0; $j<count($wyniki); $j++)
$biura[2]->wypiszSiebie($wyniki[$j]);

echo "</td></tr>";
}
if($wybrane_biuro=="Soltours"){
//for($i=0; $i<count($biura); $i++) {
$wyniki = $biura[3]->szukajWycieczki($kraj, $data_od, $data_do, $wylot_z);
/*echo "<tr><td valign='top'><b>".
$biura[2]->getTabela().
"</b></td><td>";
*/
for($j=0; $j<count($wyniki); $j++)
$biura[3]->wypiszSiebie($wyniki[$j]);

echo "</td></tr>";
}
echo "</table>";
}

function doSelectFromArray($tablica, $nazwa, $funkcjaFiltrujaca="") {
echo "<select name='".$nazwa."'>";

foreach($tablica as $wartosc) {
echo "<option value='".$wartosc."'>";
if($funkcjaFiltrujaca != "")
echo $funkcjaFiltrujaca($wartosc);
else
echo $wartosc;
echo "</option>";
}
echo "</select>";
}
}

//**************************************************************************//
class Hotel extends UniversalCSV {


private $poleMiejscaHoteli;
private $poleKrajuHoteli;
private $poleMiasta;
private $poleHotelu;


public function setPoleMiejscaHoteli($indeks) {
$this->poleMiejscaHoteli=$indeks;
}

public function setPoleKrajuHoteli($indeks) {
$this->poleKrajuHoteli=$indeks;
}

public function setPoleMiasta($indeks) {
$this->poleMiasta=$indeks;
}
public function setPoleHotelu($indeks) {
$this->poleHotelu=$indeks;
}


public function getMiejscaHoteli() {
return $this->wartosciPola($this->poleMiejscaHoteli);
}

public function getKrajeHoteli() {
return $this->wartosciPola($this->poleKrajuHoteli);
}

public function getMiasta() {
return $this->wartosciPola($this->poleMiastaHoteli);
}
public function getHotel() {
return $this->wartosciPola($this->poleHotelu);
}
public function wypiszSiebie($tablica) {
//nie ma implementacji
//w kazdej klasie dziedziczacej z tego trzeba
//napisac wlasna funkcje wyswietlajaca
}


public function szukajHotelu($krajHoteli, $miasto, $hotel) {
$warunki = array();
$porzadek = array();

if(isset($this->poleKrajuHoteli)) {
$warunki[$this->poleKrajuHoteli] = $krajHoteli;
if($krajHoteli != "")
array_push($porzadek, "pole".$this->poleKrajuHoteli);
}

if(isset($this->poleMiasta)) {
$warunki[$this->poleMiasta] = $miasto;
if(($miasto!= "") )
array_push($porzadek, "pole".$this->poleMiasta);
}

if(isset($this->poleHotelu)) {
$warunki[$this->poleHotelu] = $hotel;
if(($hotel != "") )
array_push($porzadek, "pole".$this->poleHotelu);
}

if(count($porzadek) > 0)
$porzadek =" ORDER BY ".implode(",", $porzadek);
else
$porzadek = "";

return $this->search($warunki, $porzadek." LIMIT 100");
}

function listaPolHoteli($funkcja){
global $hotel;
$result = array();

if(isset($_GET['hotel'])) $wybrany_hotel = $_GET['hotel']; else $wybrany_hotel="";
//for($i=0; $i<count($biura); $i++)
if($wybrany_hotel=="HoteleEcco")
{
$result = array_merge($hotel[0]->$funkcja(), $result);
}
$result = array_unique ($result);
sort($result);
return $result;
}

function listaKrajowHoteli() {
return listaPolHoteli("getKrajeHoteli");
}


function listaMiast(){
return listaPolHoteli("getMiasta");
}

function listaHoteli(){
return listaPolHoteli("getHotel");
}

function wyszukajHotel($krajHoteli, $miasto, $hotel) {
global $hotel;
echo "<table>";

if(isset($_POST['hotel'])) $wybrany_hotel = $_POST['hotel']; else $wybrany_hotel="";
if($wybrany_hotel=="HoteleEcco") {
//for($i=0; $i<count($biura); $i++) {
$wyniki = $hotel[0]->szukajHotelu($krajHoteli, $miasto, $hotel);
/*echo "<tr><td valign='top'><b>".
$biura[0]->getTabela().
"</b></td><td>";
*/
for($j=0; $j<count($wyniki); $j++)
$hotel[0]->wypiszSiebie($wyniki[$j]);

echo "</td></tr>";
}
echo "</table>";
}
function doSelectFromArray($tablica, $nazwa, $funkcjaFiltrujaca="") {
echo "<select name='".$nazwa."'>";

foreach($tablica as $wartosc) {
echo "<option value='".$wartosc."'>";
if($funkcjaFiltrujaca != "")
echo $funkcjaFiltrujaca($wartosc);
else
echo $wartosc;
echo "</option>";
}
echo "</select>";
}
}
?>[/php]
Chmura
Przelotem
Przelotem
Posty: 220
Rejestracja: ndz gru 31, 2006 12:46 am
Lokalizacja: o stamtąd
Kontakt:

Re: [php] - już działa !!

Post autor: Chmura »

1. w którym miejscu inkludujesz plik funkcje.php?

2. nie wiem czy można podawać funkcje jako argument
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

Re: [php] - już działa !!

Post autor: 123456 »

Ale burdel... oszczędziłbyś ludzi na forum i nie katował ich takim poszarpanym kodem.
Błąd spowodowany jest pewnie tym, że ktoś, kto nie wie co robi zaczął zakomentowywać różne linie kodu i przestawił klamry. Funkcja doSelectFromArray() znajduje się w klasie Biuro a chyba nie powinna patrząc na to jak jest wywołana.

Rozwiązanie:
Przestań samemu kombinować i daj ten kod komuś kto się chociaż trochę na tym zna.
Chmura pisze:2. nie wiem czy można podawać funkcje jako argument
Jako argument można podać co się tylko chce, byleby zwracało jakąś wartość. Ale takie postępowanie nie jest dobre.
amp
Posty: 13
Rejestracja: czw kwie 26, 2007 5:32 pm

odp

Post autor: amp »

12345 jak nie masz ochoty pomagać to tego nie rób a nie "jeździj" po ludziach. Tak się składa że uczę się dopiero php i czasem coś mi nie wyjdzie. A tak poza tym jestem kobietą i zanim i odpisałeś mi zorientowałam się że klamry są przestawione.
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

Re: [php] - już działa !!

Post autor: 123456 »

123456 jak nie masz ochoty pomagać to tego nie rób
Wskazałem błąd - napisałem, że źle są klamry.
a nie "jeździj" po ludziach.
Jeśli dobrą radę, nie brania się za coś, co jest za trudne uważasz za jeżdżenie po ludziach, Twoja sprawa.
A tak poza tym jestem kobietą
Napisałaś to bo użyłem złej osoby czy żeby pokazać jak okrutnie Cię potraktowałem?
Jeśli to pierwsze to popatrz:
Mam stronkę na której pobierane sa dane z plików csv do bazy i wyświetlane na stronie do tego jest mini wyszukiwarka. Niestety coś przestało działać i nie mogę dojść coś wyrzuca mi taki błąd: (...)we wskazywanej linijce jest zapis: (...)Aby wszytko było jaśniejsze umieszczam zawartość pliku szukaj.php : (...)jeszcze plik funkcje.php : (...)
Po czym miałem rozpoznać rodzaj?
Jeśli druga opcja to wczuj się w osobę, która chce znaleźć błąd w cudzym kodzie.
zanim i odpisałeś mi zorientowałam się że klamry są przestawione.
To trzeba było zadzwonić żebym się nie fatygował... :roll: Napisz do moderatora żeby usunął poprzedni jak i ten post bo nie wnoszą one nic do tematu, skoro tak Ci szkodzą
amp
Posty: 13
Rejestracja: czw kwie 26, 2007 5:32 pm

odp

Post autor: amp »

pisząc żebyś nie jeździł po ludziach i że jeżeli nie masz ochoty pomagać to nie pomagaj miałam na myśli twoje podejście do mojego postu które dało się wyczuć w pierwszych zdaniach twojej odpowiedzi a mianowicie:
Ale burdel... oszczędziłbyś ludzi na forum i nie katował ich takim poszarpanym kodem.
Błąd spowodowany jest pewnie tym, że ktoś, kto nie wie co robi zaczął zakomentowywać różne linie kodu i przestawił klamry
Co do informacji o mojej płci to nie była iluzja tylko informacja ponieważ pisałeś jak do mężczyzny.

Owszem pomogłeś wskazałeś błąd za co wielkie dzięki , tylko uważam że można to było zrobić bardziej subtelnie i delikatnie.
A co do telefonowania do Ciebie no cóż telefonu nie miałam, a poza tym w tamtym momencie nie miałam ani czasu ani dostępu do netu.
Tylko tyle chciałam Tobie powiedzieć i myślę że możemy uznać temat za zamknięty.
ODPOWIEDZ