Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] problem z funkcją
Forum PHP.pl > Forum > Przedszkole
miooodek
Witam, ponizej przedstawiam kod calego skryptu. Problem pojawia się gdy chce wykonac funkcje drukuj i drukuj2 w punkcie o id=13, wszędzie wczesniej działa prawidłowo. Wkleilem te funkcje do id=13 i zmienilem ich nazwy, prubowalem w taki sposob, ale nic z tego nie wyszlo, szczerze mówiąc to nie wiem w czym tkwi problem.

Moze komus uda sie to rozszyfrowac biggrin.gif , pozdrawiam

Kod
<?php
session_start();

function drukuj($kontrahent_id)
{
mysql_select_db('transport');
$zapytanie = "select * from kontrahenci WHERE kontrahent_id=".$kontrahent_id."";
$wynik = mysql_query($zapytanie);

  @ $ile_znalezionych = mysql_numrows($wynik);

  for ($i=0; $i <$ile_znalezionych; $i++)

{
$wiersz=mysql_fetch_array($wynik);

  echo 'Nazwa: ';
  echo stripslashes($wiersz['nazwa']);
echo '<br />Miasto: ';
echo stripslashes($wiersz['miasto']);
echo '<br />NIP: ';
echo stripslashes($wiersz['nip']);
  }

}
function drukuj2($miejsce_id)
{
mysql_select_db('transport');
$zapytanie = "select * from miejsca WHERE miejsce_id=".$miejsce_id."";
$wynik = mysql_query($zapytanie);

  @ $ile_znalezionych = mysql_numrows($wynik);

  for ($i=0; $i <$ile_znalezionych; $i++)

{
$wiersz=mysql_fetch_array($wynik);

  echo 'Nazwa: ';
  echo stripslashes($wiersz['nazwa']);
  echo '<br />Symbol: ';
echo stripslashes($wiersz['symbol']);
echo '<br />Miasto: ';
echo stripslashes($wiersz['miasto']);
echo '<br />Ulica nr: ';
echo stripslashes($wiersz['ulica_nr']);
  }

}


echo "<table>";
echo "<tr>";
echo "<td WIDTH=33% VALIGN = TOP >";

if(isset($_POST['id'])==1)
{
$id=$_POST['id'];
}
if(!isset($id))
{

$id=1;
}
if($id==1)
{

    include("klient.php");
   if(isset($_POST['kontrahent_id']))
  
{
   $id=$id+1;
}
  
}
if($id==2)
{
    $klient=$_POST['kontrahent_id'];
  $id+=1;
  

   $_POST = array();
}
if($id==3)
{
    
     if(isset($klient))
     {    
       drukuj($klient);
     }
     else
     {
       $klient=$_POST['klient'];
       drukuj($klient);
     }

        include("platnik.php");
        

if(isset($_POST['kontrahent_id']))
  
{
   $id=$id+1;
}
    
}
if($id == 4)
{
   $platnik = $_POST['kontrahent_id'];
   echo '<h3>Klient</h3>';
   $_SESSION['klient']= $klient;
   drukuj($klient);
  
   echo '<h3>Platnik</h3>';
   $_SESSION['platnik']= $platnik;
   drukuj($platnik);
$_POST = array();
   $id=$id+1;
}
if($id == 5)
{
    include("zaladunek.php");
   if(isset($_POST['miejsce_id']))
  
{
   $id=$id+1;
}
  
}
if($id == 6)
{
   $zaladunek=$_POST['miejsce_id'];
  $id+=1;
  $_POST = array();  
}
if($id == 7)
{
     if(isset($zaladunek))
     {
        
       drukuj2($zaladunek);
     }
     else
     {
       $zaladunek=$_POST['zaladunek'];
      
       drukuj2($zaladunek);
     }
        include("rozladunek.php");

if(isset($_POST['miejsce_id']))
  
{
   $id=$id+1;
}
    
}
if($id == 8)
{
   $rozladunek = $_POST['miejsce_id'];
   echo '<h3>Klient</h3>';
   drukuj($_SESSION['klient']);
  
   echo '<h3>Platnik</h3>';
   drukuj($_SESSION['platnik']);
  
   echo '<h3>Miejsce zaladunku</h3>';
   $_SESSION['zaladunek']= $zaladunek;  
   drukuj2($_SESSION['zaladunek']);
  
   echo '<h3>Miejsce rozladunku</h3>';
   $_SESSION['rozladunek']= $rozladunek;
   drukuj2($_SESSION['rozladunek']);
   $id=$id+1;
$_POST = array();
}
if($id==9)
{
echo "<td WIDTH=33% VALIGN = TOP >";
    include("przewoznik.php");
   if(isset($_POST['kontrahent_id']))  
{
   $id=$id+1;
}
    echo "</td>";
echo "</tr>";
echo "</table>";
}
if($id==10)
{
    $przewoznik=$_POST['kontrahent_id'];
  $id+=1;
}
if($id==11)
{
echo "<table>";
echo "<tr>";
echo "<td WIDTH=33% VALIGN = TOP >";
   echo '<h3>Klient</h3>';
   drukuj($_SESSION['klient']);
  
   echo '<h3>Platnik</h3>';
   drukuj($_SESSION['platnik']);
  
   echo '<h3>Miejsce zaladunku</h3>';
   $_SESSION['zaladunek']= $zaladunek;  
   drukuj2($_SESSION['zaladunek']);
  
   echo '<h3>Miejsce rozladunku</h3>';
   $_SESSION['rozladunek']= $rozladunek;
   drukuj2($_SESSION['rozladunek']);  

echo "<td WIDTH=33% VALIGN=TOP>";

   echo '<h3>Przewoznik</h3>';
       $przewoznik=$_POST['klient'];
    $_SESSION['przewoznik']= $przewoznik;
    drukuj($_SESSION['przewoznik']);
  $_POST = array();
    
    $id=$id+1;  
}
if($id==12)
{
echo "<table>";
echo "<tr>";
echo "<td WIDTH=33% VALIGN = TOP >";
?>
<table>
<form action="index.php" method="post">
<br />
<h3>Kierowca</h3>
</td></tr>

<tr><td>Imie </td>

<td> <input type="text" name="imie"  maxlenght="20" size="20">

<br /></td></tr>

<tr><td>Nazwisko</td>

<td> <input type="text" name="nazwisko"  maxlenght="20" size="20">

<br /></td></tr>

<tr><td>nr Dowodu </td>

<td> <input type="text" name="dowod"  maxlenght="15" size="15">

<br /></td></tr>

<tr><td>nr Samochodu </td>

<td> <input type="text" name="nr_samochodu"  maxlenght="15" size="15">

<br /></td></tr>

<tr><td>nr Naczepy </td>

<td> <input type="text" name="nr_naczepy" maxlenght="15" size="15">

<br /></td></tr>

<tr><td>Telefon </td>

<td> <input type="text" name="telefon" maxlenght="15" size="15">

<br /></td></tr>
    <input type="hidden" value="13" name="id"/>
    <input type="hidden" value="<?php echo $_SESSION['klient']; ?>" name="klient"/>
    <input type="hidden" value="<?php echo $_SESSION['platnikt'];?>" name="platnik"/>
    <input type="hidden" value="<?php echo $_SESSION['zaladunek'];?>" name="zaladunek"/>
    <input type="hidden" value="<?php echo $_SESSION['rozladunek'];?>" name="rozladunek"/>
    <input type="hidden" value="<?php echo $_SESSION['przewoznik'];?>" name="przewoznik"/>

<tr><td colspan="2"><input type="submit" value="Zapisz"></td></tr>
</table>
</form>
<?php
  
echo "</td>";
echo "</tr>";
echo "</table>";  

}
if($id==13)
{
$klient=$_POST['klient'];  
  $_SESSION['klient']= $klient;
  
  echo '<h3>Klient</h3>';
  drukuj($_SESSION['klient']);
}
?>
Lejto
o to co?
  1. <?php
  2. @ $ile_znalezionych = mysql_numrows($wynik);
  3. ?>

tak:
  1. <?php
  2. $ile_znalezionych = mysql_num_rows($wynik);
  3. ?>
miooodek
To było po to zeby mysql siedzial cicho przy wyswietlaniu wyniku, zmienilem tak jak powiedziales, ale nic to nie dalo, a z @ nie wyswietla niedorzecznych bledów
oldfield
Troche pogmatwany ten kod...

ale lepiej zostawcie te @ w spokoju tongue.gif
miooodek
Dopiero zaczynam z php, w sumie bez szczególnego zapalu, i praktycznie na kazdym kroku mam jakies problemy, i staram sie je rozwiązywac, jednak czasem jestem bezradny i prosze was o pomoc i wyrozumiałość biggrin.gif

Jakby ktos popatrzyl co jest zle...
isso
"... a wtedy Pan wymyślił moduły... i zobaczył, że są dobre..."

Po pierwsze i najwązniejsze... skrypt, który ma 300 linijek ciągłego kodu bez komentarzy to bardzo zły skrypt smile.gif nawet jak jest napisany w cudowny sposób smile.gif

Taka przypowiastka z wykładów mi sie przypomina... jedna z wiekszych operacji w czasie 2 wojny swiatowej zakończyła się fiaskiem, ponieważ program, który wykrywał rakiety wroga nie miał komentarzy, a kiedy załoga dowiedziała sie o tym błędzie to zaczeła szukać miejsca w programie, gdzie ten bład występuje... z powodu braku komentarzy nie zdążyli przed pierwszą rakietą smile.gif smile.gif smile.gif - wniosek: komentarze mogą uratować życie smile.gif

a tak własciwie, to nie wiem w której linicje błędu szukać:P:P:P za dużo tu ich ;-)
miooodek
wszystko smiga pięknie do id 12, w 13 są schody... zmienne pięknie sie przekazują do 13, jak kaze je wypisac, to wypisuje,
nie zmienilem niczego w sposobie drukowania danych z bazy, dla tego dziwi mnie ten błąd
marcio
Zrob to na switch to po 1 a po 2 nie wiem czy to ma znaczenie ale jak wszystkie id dzialja oprocz 13 to moze zmien warunek jesli dochodzi tylko do id nr 13 to daj takie cos
  1. <?php
  2. if($id > 12)
  3. {
  4. $klient=$_POST['klient'];
  5. $_SESSION['klient']= $klient;
  6.  
  7. echo '<h3>Klient</h3>';
  8. drukuj($_SESSION['klient']);
  9. }
  10. ?>


Po 3 raz masz tak
  1. <?php
  2. $id+=1;
  3. // a raz tak
  4. $id=$id+1;
  5. ?>

Zdecudoj sie i potem na koniec w if'ie prz id nr 12 nie widzie zwiekszenia zmiennej a wszedzie tak robisz

Widze ze w formie w hidden chcesz przekazywac id ale moze je zle przekazuje albo cos wyswietlaj sobie ta zmienna $id za kazdym razem
isso
a sprawdziłeś jaką wartość zwraca Ci
  1. <?php
  2. $_SESSION['klient']
  3. ?>
i czy jest ona zgodna z wywołaniem funkcji ?
miooodek
tzn, hidden przekazuje od 13, to dziala, gdy robie wyswietlenie podanych danych do formularza, to wyswietla je dobrze,
kiedy dam echa tych zmiennych z hiddena tez je wyswietla, problem w tym ze funkcji drukuj odechcialo sie dzialac ;/

tak sprawdzalem i podaje ją poprawnie
isso
Czyli do funkcji drukuj przekazana jest zmienna = 13 tak?

sprawdziłes w bazie czy jest takowy kontrachent ? i czy jego dane są poprawne?

skoro działa dla zmienna = 1,2,3...10,11,12

to moze cos z baza jest nie tak, tzn z komórkami... moze spróbuj skopiować dane z 12 i wkleić do 13(w bazie) i wtedy zobacz co sie wyświetla...
miooodek
zmienna 13, jest przekazywana do indexu, zeby wiedzial od ktorego ifa wykonywac skrypt, ale w hiddenach są jeszcze zmienne sesyjne, które normalnie gubią się po przeładowaniu od początku pliku indexu, wiec musiealem je jakos przekazac, i o dziwo dane z tych zmiennych są poprawne, a funkcja drukuj na ich podstawie wyswietlala wczesniejsze wyniki we wczesniejszych krokach...
isso
Jak dla mnie to poprostu gdzies coś zagmatwałeś:

Skoro podajesz do funkcji drukuj() id = 13 to znaczy, ze ma wyciagnac dane dla kontrachenta nr 13... myle sie?

poza tym... pogmatwane masz... tu id tam id... i tak własciwie nie wiadomo, które za co odpowiada...
miooodek
Nawet gdy dam w kroku 13 cos takiego

  1. <?php
  2. echo drukuj(2);
  3. ?>


to funkcja drukuj nie chce wpypisac danych... a pole o id 2 napewno istnieje w bazie..

ehh nie wiem co jest nie tak ;/
isso
Czyli wszystko rozbija się o tą funkję smile.gif bo skoro nie ważne dla jakiego argumentu nie chce ona działać to znaczy, że coś w niej jest niepoprawnie...

  1. <?php
  2. function drukuj($kontrahent_id){
  3. mysql_select_db('transport'); 
  4. $zapytanie = "select * from kontrahenci WHERE kontrahent_id=".$kontrahent_id."";
  5. $wynik = mysql_query($zapytanie);
  6. @ $ile_znalezionych = mysql_numrows($wynik);
  7. for ($i=0; $i <$ile_znalezionych; $i++){
  8. $wiersz=mysql_fetch_array($wynik); echo 'Nazwa: ';
  9. echo stripslashes($wiersz['nazwa']);
  10. echo '<br />Miasto: ';
  11. echo stripslashes($wiersz['miasto']);
  12. echo '<br />NIP: ';
  13. echo stripslashes($wiersz['nip']);
  14. }}
  15. ?>



po pierwsze, jeśli używasz mysql w wersji 5 to SELECT powinien mieć: SELECT * FROM transport.kontrahenci WHERE ...

wielkość liter nie ma znaczenia, ale bądź KONSEKWENTNY!

poza tym, sprawdź co zwraca zmienna $ile_znalezionych ?

a tak w ogóle, to wyrzuca Ci jakiś bład? czy wcale nic sie nie dzieje?
miooodek
jak np wpisalem

  1. <?php
  2. echo drukuj(2);
  3. ?>


w kroku 4 to wyswietla wszystko swietnie, wiec z jakiego powodu mialbym zmieniac funkcje? wiem ze to glupie pytanie, ale nie rozumiem, a ile znalezionych to szczerze mówiac nie wiem do czego sluzy, przepisalem to z ksiazki o php, ale skoro dzialalo wczesniej zapisane tak to czemu teraz nagle robi problemy?

a w wyniku nie wyswietla niczego, chyba ze dam sobie echo z wyswietleniem zmiennych przekazanych postem z formularza...
isso
łoł... czyli co ? na poczatku skryptu działa, a pod koniec już nie? czy ja dobrze Ciebie zrozumialem ?
miooodek
Dokładnie tak tongue.gif, sam nie wiem o co chodzi biggrin.gif:D
isso
W takim razie widze opcję jedną... któryś z Twoich plików wczytywanych przez include()" title="Zobacz w manualu PHP" target="_manual ma w sobie funkcje drukuj() i następuje jakiś konflikt... sprawdź to smile.gif
miooodek
w zadnym z plików includowanych nie ma funkcji drukuj, napisalem ją tylko w indexie winksmiley.jpg
tomm
"select * from kontrahenci WHERE kontrahent_id=".$kontrahent_id."";

spróbuj tak

'select * from kontrahenci where kontrahenci_id = " '.$kontrahent_id.' " ';

pousuwaj spacje między ' i "
miooodek
hmm, tak nie drukuje danych wogole :/
tomm
pousuwałeś spacje z tego jak napisałem? spacje są tam tylko po to by móc odróżnić apostrof od cudzysłowu

wyświetl sobie na ekran wartość zmiennej $ile_znalezionych, bo pętla for ma sie obracać wg tej zmiennej a wartość jest do niej źle przypisywana: ma być mysql_num_rows($wynik)
wogóle możesz to zrobić bez pobierania tej wartości i w petli while zamiast for
while($wiersz = mysql_fetch_array($wynik)){
echo $wiersz['nazwa'].' '.$wiersz['miasto'];
isso
Powiedz jeszcze tylko... do id nr 12 wszystko trybi ? tzn funkcja drukuj() działa?
tomm
a masz kontrahenta nr 13?
miooodek
tak do 12 wszystko smiga, nie nie mam kontrachenta 13
tomm
więc jeśli przesyłasz do funkcji id nr 13, wywołujesz do bd zapytanie "select * from kontrahenci where kontrahent_id = 13"

a że nie ma w niej takiego kontrahenta to zapytanie nic nie zwraca
miooodek
w id przenosze jedynie zmienną do kroków kodu, reszta jest zapisana innymi zmiennymi np w kroku 11 jest pokazane wg jakich zmiennych dziala funkcja drukuj

echo drukuj(2);

napisalem cos takiego, czyli wywolanie funkcji drukuj z id=2, i powinno wyswietlic rekord z bazy o id 2,

jak wklejam ten kod wczesniej tj, przed 13 to smiga, a w 13 nie tongue.gif
tomm
drukuj(2) powinno pobrać z bd wszystkie rekordy w których uczestniczył kontrahent o id = 2,
próbowałeś sobie wyświetlić ilość pobranych wierszy - poprawiłeś ten mysql_num_rows?
przed petlą for wstaw sobie echo $ile_znalezionych; i wykonaj drukuj(13)
isso
to masz conajmniej cos mocno skopane, plik jest długi... najprawdopodobniej źle napisany, mógłbyś to wszystko jakos inaczej rozwiązać... a tak, nic tam nie widać... weź obadaj co tam wychodzi ze zmiennych... ;]
miooodek
po co mam wykonac drukuj(13) skoro nie ma nikogo z takim id?
-bravo-
W takim razie musi byc cos z funkcją, ale skoro dziala ona wczesniej, to z jakiego powodu ma nie dzialac i teraz, nie rozumiem...
miooodek
widzisz, wlasnie o to sie glownie rozchodzi, tez nie wiem dla tego pytam smile.gif pozdr

rozstrzygnięte biggrin.gif:D, to był mój błąd, jak widzicie w formularzu(krok 12) jest zmienna id, ustawiona na 13, zeby po jego przeladowaniu zaczynac od tego wlasnie kroku, wszystko pięknie działa, ale skoro zaczynam od kroku 13 to pomijam wczesniejsze gdzie łączyłem sie z bazą danych, i tu tkwil problem, jedna linijka i wszystko smiga smile.gif

Dziękie za szczere chęci
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.