Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmienne do nowego okna?
Forum PHP.pl > Forum > PHP
qubec26
Witam, chciałbym zrobić coś takiego, że gdy mam tablicę z sql-a wyświetloną w php.

To po kliknięciu w przycisk "print" przy każdym rekordzie przenosiło do nowego okna (to już mam) i tam wyświetliło dane tego konkretnego rekordu.

Czyli na przykladzie:
TABELKA
  1. |ID| IMIE | NAZWISKO | PRINT |
  2. |1 | Jan | Mazurski | "Print" |
  3. |2 | Adam | Piotrowski | "Print" |


Klikam "Print" i przy użyciu funkcji popup() otwiera mi się nowe okno.

Ale jak przekazać zmienne do tego okna?

Skoro są to wartości z SQL wyświetlane za pomocą:
  1. echo "<td>".$r['KOD_DOSTAWCY']."</td>";
thomson89
Zrób sobie osobny plik PHP i jako get zapodaj mu id rekordu który ma wyświetlić.

Wtedy już tylko:
  1. <a href="#" onclick="window.open('rekord.php?idrekordu=234534', 'Drukuj', 'height=150,width=200');">PRINT</a>


--EDIT
Albo na tym pliku zrób, że gdy $_GET równe np. all to wyświetlasz wszystkie rekordy, a jak nie jest równe all to pobierasz tylko jeden rekord.
qubec26
Tylko, że chodzi o to żeby przycisk miał jedną formułę a drukował każdą linię (uniwersalny).
Z tego co ty piszesz wynika, że trzeba mu wpisać numer linii.
thomson89
Numer linii możesz wypisać bardzo łatwo przy generowaniu tabelki za pomocą PHP.

Podaj kod, którym generujesz tą tabelkę.
qubec26
Oto kod:
  1. echo "<form name='form1' method='post' action=''>";
  2. echo "<strong>".$_SESSION['nazwa1']."</strong>";
  3. echo "<tr>";
  4. echo "<td><strong>ID</strong></td>";
  5. echo "<td><strong>Part number</strong></td>";
  6. echo "<td><strong>Quantity</strong></td>";
  7. echo "<td><strong>Planned date of delivery</strong></td>";
  8. echo "<td><strong>Supplier code</strong></td>";
  9. echo "<td><strong>Supplier name</strong></td>";
  10. echo "<td><strong>Order number</strong></td>";
  11. echo "<td><strong>Line number</strong></td>";
  12. echo "<td><strong>Date of delivery</strong></td>";
  13. echo "<td><strong>Quantity delivered</strong></td>";
  14. echo "<td><strong>PRINT</strong></td>";
  15. echo "</tr>";
  16.  
  17. while($r = mssql_fetch_assoc($result)) {
  18. include('kolor.php');
  19. echo "<tr bgcolor='$kolor'>";
  20.  
  21. echo "<td>".$id[]=$r['ID']; $r['ID']."</td>";
  22. echo "<td>".$nrdet[] = $r['NR_DET']; $r['NR_DET']."</td>";
  23. echo "<td>".$r['ILOSC']."</td>";
  24. echo "<td>".$r['PLAN_DATA_DOST']."</td>";
  25. echo "<td>".$r['KOD_DOSTAWCY']."</td>";
  26. echo "<td>".$r['NAZ_DOSTAWCY']."</td>";
  27. echo "<td>".$nrzam[] = $r['NR_ZAMOWIENIA']; $r['NR_ZAMOWIENIA']."</td>";
  28. echo "<td>".$nrlin[] = $r['NR_LINII']; $r['NR_LINII']."</td>";
  29. echo "<td><input type=text name=date_of_deliv[] value='".$r['DATA_DOST']."'/></td>";
  30. echo "<td><input type=text name=quan_of_deliv[] value='".$r['ILOSC_DOSTAWY']."'/></td>";
  31. if($r['DADI']<=14 and $r['DADI']>=0){
  32. echo "<td><input type='button' name='PRINT' value='Print' onClick='popup();'></td>";
  33. }
  34. echo "</tr>";
  35. }
  36. echo "<tr><td colspan='4' align='center'><input type='submit' name='Submit' value='Submit'></td></tr>";
  37. echo "</form>";
  38. echo "</table>";
thomson89
32. linijkę zamień na:
  1. echo '<a href="#" onclick="window.open(\'rekord.php?id='.$id.'\', \'Drukuj\', \'height=150,width=200\');">PRINT</a>';


Dodatkowo, utwórz kod który będzie pobierał pojedynczy rekord. Np. takim zapytaniem:

  1. $query = 'SELECT * FROM `dostawcy` WHERE `id` = '.$_GET['id'];

Pawel16
Wy tu kombinujecie, a z mojego rozumowania wychodzi, że wystarczy użyć prostego zapytania MySQL lub użyć SESJI.

Zapytanie:
wystarczy przekazać w url na nastepną strone zmienną z id danego wiersza albo cos takiego, a nastepnie z bazy danych wczytać daną linijkę z danym id.

Sesje:
Wystarczy utworzyć sesje, w których potem przekaże sie dane tego wiersza - linijki, który chcemy wyświetlić

Jeżeli dobrze zrozumiałem ten post to odp. jest poprawna biggrin.gif
;P
thomson89
Dobrze zrozumiałeś, i ja także dobrze zrozumiałem. Obydwoje dążymy do tego samego.
qubec26
Chwilowo mam małe problemy z tym.
  1. $query16 = "SELECT [IT_TEST].DADI, [IT_TEST].NR_DET, [IT_TEST].ILOSC, convert(varchar(10),[IT_TEST].PLAN_DATA_DOST,120) as PLAN_DATA_DOST, [IT_TEST].KOD_DOSTAWCY, ";
  2. $query16 .= "[IT_TEST].NAZ_DOSTAWCY, [IT_TEST].NR_ZAMOWIENIA, [IT_TEST].NR_LINII, convert(varchar(10),[IT_TEST].DATA_DOSTAWY,120) as DATA_DOST, ";
  3. $query16 .= "[IT_TEST].ILOSC_DOSTAWY ";
  4. $query16 .= "FROM [PORTAL].[dbo].[IT_TEST] ";
  5. $query16 .= "WHERE [IT_TEST].ID = .$get";
  6. $result16 = mssql_query($query16);


To zapytanie wywala mi błąd.

Sorki. Już poszło. Zapomniałem dodać:
  1. include ('query.php');

blinksmiley.gif


Tylko jak zrobić tak, aby ta zmienna przekazywana do nowego okna nie była przekazywana jawnie.

Czyli, żeby w linku nie było widać liczby.
Bo w ten sposób każdy może ją zmienić i wywołać nowe okno z inną zmienną.
thomson89
Zobacz tu.
qubec26
Super. Dzięki za linka.

Mam jeszcze problem taki, że po ustawieniu kodu:
  1. while($r = mssql_fetch_assoc($result)) {
  2. include('kolor.php');
  3. echo "<tr bgcolor='$kolor'>";
  4.  
  5. echo "<td>".$id[]=$r['ID']; $r['ID']."</td>";
  6. echo "<td>".$nrdet[] = $r['NR_DET']; $r['NR_DET']."</td>";
  7. echo "<td>".$r['ILOSC']."</td>";
  8. echo "<td>".$r['PLAN_DATA_DOST']."</td>";
  9. echo "<td>".$r['KOD_DOSTAWCY']."</td>";
  10. echo "<td>".$r['NAZ_DOSTAWCY']."</td>";
  11. echo "<td>".$nrzam[] = $r['NR_ZAMOWIENIA']; $r['NR_ZAMOWIENIA']."</td>";
  12. echo "<td>".$nrlin[] = $r['NR_LINII']; $r['NR_LINII']."</td>";
  13. echo "<td><input type=text name=date_of_deliv[] value='".$r['DATA_DOST']."'/></td>";
  14. echo "<td><input type=text name=quan_of_deliv[] value='".$r['ILOSC_DOSTAWY']."'/></td>";
  15. if($r['DADI']<=14 and $r['DADI']>=0){
  16. $_SESSION['url'] = $r['ID'];
  17. echo '<td><a href="#" onclick="window.open(\'printstick.php?'.session_id().'\', \'Drukuj\', \'height=350,width=500\');">PRINT</a></td>';
  18. }
  19. echo "</tr>";
  20. }


Zawsze zmiennna $_SESSION['url'] jest równa id ostatniego pola z Print.

Jak to zrobić, żeby każde to pole miało swoje id?

Czy da się zrobić tak, aby zmienna $_SESSION['url'] była zmienną wielokrotną jak url[$i]?

Jak mogę to przerobić, tak aby każdy wiersz miał osobną wartość w zmiennej sesyjnej url dla guzika print?
muk4
@UP
$_SESSION to tablica więc można zrobić z niej tablicę dwuwymiarową np.
  1. $_SESSION['url'][1]
  2. $_SESSION['url'][2]
  3. $_SESSION['url'][3]

itd.
qubec26
Próbowałem właśnie tego użyć, ale wywala błąd:
Cannot use a scalar value as an array in
  1. $_SESSION['url'][$i] = $r['ID'];
muk4
Cytat(qubec26 @ 23.07.2010, 12:04:49 ) *
Próbowałem właśnie tego użyć, ale wywala błąd:
Cannot use a scalar value as an array in
  1. $_SESSION['url'][$i] = $r['ID'];


Przed tym daj:
  1. $_SESSION['url'] = array();
qubec26
Ok, pomogło. Ale nie bardzo wiem jak zapisać tą zmienną do tego.
  1. $_SESSION['url'] = array();
  2. while($r = mssql_fetch_assoc($result)) {
  3. include('kolor.php');
  4. echo "<tr bgcolor='$kolor'>";
  5.  
  6. echo "<td>".$id[]=$r['ID']; $r['ID']."</td>";
  7. echo "<td>".$nrdet[] = $r['NR_DET']; $r['NR_DET']."</td>";
  8. echo "<td>".$r['ILOSC']."</td>";
  9. echo "<td>".$r['PLAN_DATA_DOST']."</td>";
  10. echo "<td>".$r['KOD_DOSTAWCY']."</td>";
  11. echo "<td>".$r['NAZ_DOSTAWCY']."</td>";
  12. echo "<td>".$nrzam[] = $r['NR_ZAMOWIENIA']; $r['NR_ZAMOWIENIA']."</td>";
  13. echo "<td>".$nrlin[] = $r['NR_LINII']; $r['NR_LINII']."</td>";
  14. echo "<td><input type=text name=date_of_deliv[] value='".$r['DATA_DOST']."'/></td>";
  15. echo "<td><input type=text name=quan_of_deliv[] value='".$r['ILOSC_DOSTAWY']."'/></td>";
  16. if($r['DADI']<=14 and $r['DADI']>=0){
  17. $_SESSION['url']['$i'] = $r['ID'];
  18. echo '<td><a href="#" onclick="window.open(\'printstick.php?'.session_id().'\', \'Drukuj\', \'height=350,width=500\');">PRINT</a></td>';
  19. }
  20. echo "</tr>";
  21. }
  22. echo "<tr><td colspan='4' align='center'><input type='submit' name='Submit' value='Submit'></td></tr>";
  23. echo "</form>";
  24. echo "</table>";
  25. $count=mssql_num_rows($result);
  26.  
  27. $_SESSION['i']=$i;
  28.  
  29.  
  30. if($Submit){
  31. for($i=0;$i<$count;$i++){
  32. echo "<P>$date_of_deliv[$i]";
  33. if($date_of_deliv[$i]==""){
  34. $date_of_deliv[$i]=NULL;
  35. echo "<P>$date_of_deliv[$i]";
  36. }
  37. $query22="UPDATE [PORTAL].[dbo].[IT_TEST] SET data_dostawy = '$date_of_deliv[$i]' ,ilosc_dostawy = '$quan_of_deliv[$i]' WHERE ID = '$id[$i]'";
  38. $result22=mssql_query($query22);
  39. echo "$i";
  40.  
  41. }
  42.  
  43. echo "<p>$i";
  44. }


W ten sposób znowu wszystkie guziki mają zmienną ostatniego.
muk4
Podmień swój kod od początku do $_SESSION['i']=$i; na to:
  1. $_SESSION['url'] = array();
  2. $i = 0; //ustawienie licznika na 0
  3. while($r = mssql_fetch_assoc($result)) {
  4. include('kolor.php');
  5. echo "<tr bgcolor='$kolor'>";
  6.  
  7. echo "<td>".$id[]=$r['ID']; $r['ID']."</td>";
  8. echo "<td>".$nrdet[] = $r['NR_DET']; $r['NR_DET']."</td>";
  9. echo "<td>".$r['ILOSC']."</td>";
  10. echo "<td>".$r['PLAN_DATA_DOST']."</td>";
  11. echo "<td>".$r['KOD_DOSTAWCY']."</td>";
  12. echo "<td>".$r['NAZ_DOSTAWCY']."</td>";
  13. echo "<td>".$nrzam[] = $r['NR_ZAMOWIENIA']; $r['NR_ZAMOWIENIA']."</td>";
  14. echo "<td>".$nrlin[] = $r['NR_LINII']; $r['NR_LINII']."</td>";
  15. echo "<td><input type=text name=date_of_deliv[] value='".$r['DATA_DOST']."'/></td>";
  16. echo "<td><input type=text name=quan_of_deliv[] value='".$r['ILOSC_DOSTAWY']."'/></td>";
  17. if($r['DADI']<=14 and $r['DADI']>=0){
  18. $_SESSION['url'][$i] = $r['ID']; //
  19. $i++; //licznik + 1
  20. echo '<td><a href="#" onclick="window.open(\'printstick.php?'.session_id().'\', \'Drukuj\', \'height=350,width=500\');">PRINT</a></td>';
  21. }
  22. echo "</tr>";
  23. }
  24. echo "<tr><td colspan='4' align='center'><input type='submit' name='Submit' value='Submit'></td></tr>";
  25. echo "</form>";
  26. echo "</table>";
  27. $count=mssql_num_rows($result);
qubec26
Po kodzie:
  1. $i++; //licznik + 1


dodałem:
  1. echo "<td>".$_SESSION['url'][$i]."</td>";

w celu sprawdzenia czy zwraca dobre wartości.

Nie wyświetla się nic.

Czy może źle wywołuję tą zmienną?
muk4
Przeanalizuj kod który TY napisałeś:
  1. $_SESSION['url'][$i] = $r['ID']; // |1
  2. $i++; //licznik + 1 // |2
  3. echo "<td>".$_SESSION['url'][$i]."</td>"; // |3

Załóżmy że $i = 1
1. zapisujemy wartość do zmiennej sesji ['url'][$i] czyli ['url'][1]
2. zwiększamy licznik $i. Teraz $i=2
3. Odczytujemy ['url'][$i] czyli ['url'][2] - UPS. Tutaj jeszcze nic nie zapisywaliśmy, więc zmienna jest pusta!

Wrzuć sprawdzanie po ustawieniu zmiennej, ale przed inkrementacją licznika.
qubec26
No fakt.
Masz rację.
Tylko jeszcze mam pytanie odnośnie zmiennej $i.
Jak ją przenieść do pliku, który wywołuje przycisk PRINT?

Bo wywołuję sobie w pliku printstick.php $_SESSION['url'][$i]
Ale tam nie ma $i. Jak ją tam prznieść tak aby nie miała wartości ostatniego wiersza?

Ma ktoś jakiś pomysł?
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.