Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam! mam taką sprawę. Niewiem czy jest to do zrobienia ale przykładowo mam skrypt w php w którym jest stworzona tabela z danymi wpisanymi na sztywno i danymi zaciąganymi z pliku za pomocą tablicy. I wszystko jest ok! W oknie przeglądarki elegancko wyświetla mi się jedna tabela z danymi. Ale mam taki pytanie - czy jest możliwe cos takiego - stworzyć plik formularza z jednym polem w którym podał bym jakąś liczbę np 15 i po kliknięciu w przycisk wyswietliła by mi sie strona z pietnastoma tabelami??( normalnie jest jedna ale co zrobić żeby można było sobie manipulować ile razy ten kod z tabelą ma sie wyswietlić na ekranie??BYł bym bardzo wdzięczny za jakie kolwiek informacje:)(aha tabele są napisane w htmlu a dane zaciągam za pomocą php)
Offline
Udało mi sie dojśc do tego:
za pomocą for'a: mam jeden plik:
one.php
<form name="formularz" action="for.php" method="get">
wprowadz ilość miesięcy:
<input type="text" name="numer" size="10"><br>
<br><center><input type="submit" value="wydrukuj na ekran" onclick="document.formularz.action='for.php';document.formularz.submit();"/></center>
druki plik wygląda tak:
for.php
<?
$dana = $_GET['numer'];
for($i=0; $i< $dana; $i = $i+1)
{
include "table.php";
}
?>
z czego table.php to skrypt z jedną tabelą.
W pierwszym skrypcie podaje numer. Jest ok -> może się komuś przyda:)
Offline
onclick="document.formularz.action='for.php';document.formularz.submit();"
To coś w input o typie submit nie potrzebne, action określone w form, input o typie submit, robi submit. Jeszcze tylko </form> by sie przydało na dole co by było poprawnie.
Offline
No tak jest ok! tylko zapomnialem że w każdej tabeli mają być inne dane a on mi wyświetla tylko te z pierwszej - czyli podaje numer 7 i powiela mi tabele wyswietlając w knie przeglądarki 7 tabel ale z danymi tylko z pierszej. I wpadłem na taki pomysł. gdybym w kodzie z pliku table.php niezaciągał jeszcze żadnych danych tylko te miejsca zostawił puste. A po wpisaniu np 7 kliknięciu zamiast wyswietlac mi to na przeglądarke wynik ( czyli tą ilość tabeli) wrzucał by mi do pliku i dopiero wtedy zaciągał dane i wyswietlał w oknie przeglądarki. Tylko że jest jeszcze jeden problem! ja wyciągam dane linia po lini ( wszystkie są w tej samej kolumnie ale nie w tym samym wierszu) i teraz jak to zorbić żeby on w drugiej tabeli dodawał mi 1 w trzeciej 2 itd.???bo wygląda to tak:
jest tabela a tu miejsce w którym ma sie pojawić dana:
<?
$fd1 = fopen("plik.txt","rw");
$wiersz1 = 0;
while(!feof($fd1))
{
$dane1[$wiersz1] = substr(fgets($fd1,1024),6,11);
$wiersz1++;
}
echo $dane1[28];
?>
- jak widać wszystko zaczyna sie od 28 lini - i tak ma być (akurat tak plik wygląda że dane powyżej lini 28 są nieistotne i chce wyciągnąć tylko te od 28 poniżej):
czyli piersza tabela wyciąga dane z lini 28
druga z 29
trzecia z 30 itd.
A kod mi powieli tylko to z lini 28.
Ma ktoś jakis pomysł jak to wykonać?? był bym naprawde wdzięczny:)
Offline
Albo i może jeszcze prościej da się to zorbić:
jak mam ten kod:
<?
$fd1 = fopen("plik.txt","rw");
$wiersz1 = 0;
while(!feof($fd1))
{
$dane1[$wiersz1] = substr(fgets($fd1,1024),6,11);
$wiersz1++;
}
echo $dane1[28];
?>
to poprostu zrobic tak żeby te 28 wzrastało do tylu jaką liczbę podałem.
coś w stylu 28++??
Offline
<? $fd1 = fopen("plik.txt","r"); $wiersz1 = 0; while(!feof($fd1)) { $dane1[$wiersz1] = substr(fgets($fd1,1024),6,11); $wiersz1++; } for($a = 28; $a < $a + $ile; $a++) echo $dane[$a]; ?>
Offline
No a jaką wartość ma $ile?? ja próbowałem:
for($p=28; $p< 60; $p+1)
{
echo $dane1[$p++];
}
liczba 60 jest przypadkowa tam bym zaciągnął wpisaną z ręki liczbę.
Tyle tylko że kod mi wyswietli co linie w góre ale w jednym polu w jednej tabeli wyswietli wszystko no i w każdej tabeli to samo
Offline
$ile czyli ile wierszy ma Ci wyswietlic, np.: $ile = 6; to wyswietli Ci od 28 do 33.
Offline
no i tak niewyswietla! pokazuje to samo co wcześniej. Ale i tak mimo to on to powieli w jednej tabeli w reszcie wrzuci to samo daltego chyba by trzebabyło wrzucić tą ilośc tabeli do pliku i dopiero ten plik modyfikować chyba że ktoś zna funkcje którą można to prościej zrobić
Offline
mam jeszcze takie pytanie odnośnie tego skryptu:
mam kod:
<?
$dana = $_GET['numer'];
for($i=0; $i< $dana; $i = $i+1)
$test = include('table.php');
{
$test;
}
$file = "text.php";
$fp = fopen($file, "a");
fwrite($fp, $test);
fclose($fp);
?>
kod wyswietla mi tabele tyle razy jaką wpisze liczbę. I ok!
ale chciałem efekt wrzucić do pliku text.php
po wykonaniu skryptu w pliku text.php pojawiają mi sie jedynki -> 1
po kolejnym wykonaniu 11 itd.
jak zawartość wrzucic do pliku?? czyli po podaniu np 7 w pliku text.php będe mieć kod table.php razy 7 ??
Offline
Ja (i zapewne wielu forumowiczów) chciałoby ci pomóc, ale nie mam pojęcia, co chcesz osiągnąć. Gdybyś mógł wytłumaczyć od początku jak wygląda tabela w bazie danych, co chcesz wyświetlić w pierwszej, drugiej itd. tabelce na stonie i jaka ma być ich struktura, czy musisz korzystać z gotowych skryptów, a jeśli tak, to co one dostają na wejściu i co dają na wyjściu. Gdybyś też spróbował nie umieszczać przykładowego kodu (bo w przypadku, gdy obrałeś zły kierunek, będzie tylko przeszkadzał), a później jeszcze przeczytał i poprawił to, co napisałeś, na pewno jakieś rozwiązanie wspólnymi siłami byśmy znaleźli.
Offline
Sory za opóżnienie w odpowiedzi. No wiec tak chodzi mi o coś takiego:
(tylko właśnie niewiem może to żle przemyślałem)
mam trzy pliki
ksi1.php
one.php
for.php
wyglądają tak:
ksi1.php:
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=10 WIDTH=680>
<tr bgcolor="gainsboro"><td ALIGN=left p style="font-size:8"><b>nazwa </B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=15 WIDTH=680>
<tr ><td ALIGN=left p style="font-size:14"><b>          
<?
$fd1 = fopen("/var/www/apache2-default/plik.txt","rw");
$wiersz1 = 0;
while(!feof($fd1))
{
$dane1[$wiersz1] = substr(fgets($fd1,1024),9,40);
$wiersz1++;
}
echo $dane1[5];
?>
</B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=10 WIDTH=680>
<tr bgcolor="gainsboro"><td ALIGN=left p style="font-size:8"><b>nazwa2 </B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=15 WIDTH=680>
<tr ><td ALIGN=left p style="font-size:14"><b>        -</B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=10 WIDTH=680>
<tr bgcolor="gainsboro"><td ALIGN=left p style="font-size:8"><b>tytuł</B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=15 WIDTH=680>
<tr ><td ALIGN=left p style="font-size:14"><b>           tekst -
<?
$fd1 = fopen("/var/www/apache2-default/plik.txt","rw");
$wiersz1 = 0;
while(!feof($fd1))
{
$dane1[$wiersz1] = substr(fgets($fd1,1024),6,11);
$wiersz1++;
}
echo $dane1[28];
?>
</B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=10 WIDTH=680>
<tr bgcolor="gainsboro"><td ALIGN=left p style="font-size:8"><b>tytułem cd.</B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=15 WIDTH=680>
<tr ><td ALIGN=left p style="font-size:14"><b>        -</B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=10 WIDTH=680>
<tr bgcolor="gainsboro"><td ALIGN=left p style="font-size:6"><b></B></font></td>
</table>
<table border=1 bordercolor="#900100" cellpadding=1 cellspacing=0 HEIGHT=70 WIDTH=500>
<tr><td ALIGN=center WIDTH=300 valign="bottom" p style="font-size:8"><b> data i podpis</B></font></td>
<td ALIGN=left WIDTH=100 valign="top" p style="font-size:8"><b> Opłata:</B> <br> <br><br>
<ALIGN=center p style="font-size:24"><b>  /b></font>
<td ALIGN=center WIDTH=100 type="circle" p style="font-size:8"></font></td>
</table>
jak widać są to tabele do których zaciągam sobie dane z pliku -> plik.txt
drugi plik :
one.php
<form name="formularz" action="for.php" method="get">
wprowadz ilość:
<input type="text" name="numer" size="10"><br>
<br><center><input type="submit" value="wydrukuj na ekran" onclick="document.formularz.action='for.php';document.formularz.submit();"/></center>
tutaj jak widać jest skrypt dzięki któremu wpisuje liczbę do formularza i wysyłam ją do pliku for.php który wygląda następująco:
<?
$dana = $_GET['numer'];
for($i=0; $i< $dana; $i = $i+1)
$test = include('ksi1.php');
{
$test;
}
?>
ja widać po wpisaniu jakieśc liczby w pliku one.php np -> 7 za pomocą pliku for.php zawartość ksi1.php wyświetli mi się 7 razy na ekranie przeglądarki
No i OK! Wyświetli mi się 7 razy ale z danymi z jednej i tej samej lini z pliku -> plik.txt. A mi chodzi o to żeby w każdej tabeli wyświetlał mi linie nieżej.
Co jest istotne: jak jest kod w pliku np: ksi1.php:
<?
$fd1 = fopen("/var/www/apache2-default/plik.txt","rw");
$wiersz1 = 0;
while(!feof($fd1))
{
$dane1[$wiersz1] = substr(fgets($fd1,1024),6,11);
$wiersz1++;
}
echo $dane1[28];
?>
to wygląda to tak że
ta część ---> $dane1[$wiersz1] = substr(fgets($fd1,1024),6,11);
będzie zawsze taka sama będzie miała 6,11
chciałem żeby zmieniało sie tylko --> echo $dane1[28];
czyli wyswietlam plik one.php -> wpisuje liczbę 7 zatwierdzam przyciskiem
wyświetla mi się plik for.php ( który zaciąga 7 razy dane z ksi1.php) i w pierszej tabeli mam dane z :
echo $dane1[28];
w drugiej:
echo $dane1[29];
w trzeciej:
echo $dane1[30];
itd -> w zależności od liczby podanej w one.php
Był bym wdzięczny gdyby ktoś był w stanie mi pomóc.
Offline
Moje pierwsze wrażenie po zobaczeniu kodu? Wolę tego nie wspominać. Porywasz się na PHP, a powinieneś przeczytać jakiś dobry kurs HTML i CSS. Mogę Ci coś podpowiedzieć: tabela może mieć więcej niż jedną komórkę. Ba! Może mieć nawet wiele wierszy, a w tych wierszach wiele komórek. Do określania wyglądu strony w przyszłości postaraj się stosować CSS. W tym przypadku HTML prawdopodobnie uda ci się ograniczyć do znaczników określających tabele.
Twój problem nie jest trudny, ale żeby dać Ci gotowe rozwiązanie, musiałbym przepisac wszystko na nowo, a to w końcu twoje zadanie. Dopóki więc nie poprawisz hypertekstu, muszę się ograniczyć do podpowiedzi dotyczącej PHP.
Mianowicie, jeśli inkludujesz plik, to kod w pliku inkludowanym ma dostęp do zmiennych zdefiniowanych w pliku inkludującym. Popatrz teraz na fragment:
for($i=0; $i< $dana; $i = $i+1) $test = include('ksi1.php');
Pochodzi on z pliku inkludującego. Używasz tam zmiennej $i, służącej do odliczania dołączanych tabelek. Dobrze byłoby ją wykorzystać do zdefiniowania, który wiersz z pliku ma zawierać dołączana tabelka. Kod odpowiadający za to:
echo $dane1[28];
Biorąc pod uwagę, że odliczanie zmienną $i rozpoczynasz od zera, linię tą zmień na:
echo $dane1[$i + 28];
Dzięki temu [b]prawdopodobnie[/b] uzyskasz to, co chciałeś.
Nie mogę Ci dać jednak [b]żadnej[/b] gwarancji, że to będzie działać. Naprawdę, trudno się zorientować w twoim kodzie. Wiele musisz tam poprawić, a najlepiej przepisz na nowo [b]wszystko[/b]. Zrób to dopiero [b]po[/b] przerobieniu kursu HTML, kursu CSS i [b]po[/b] przeczytaniu dobrej książki o PHP. Gdy już poznasz trochę teorii podpartej dużą dawką praktyki, wiele rzeczy, które do tej pory sprawiały Ci problemy będą po prostu [b]banalne[/b]. Łatwiej będzie także uzyskać pomoc, bo czym innym jest poprawienie kilku linijek kodu, a czym innym napisanie wszystkiego od podstaw, a tak jest w tym przypadku.
Offline
Time (s) | Query |
---|---|
0.00013 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00094 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.188.119.67' WHERE u.id=1 |
0.00064 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.188.119.67', 1732314552) |
0.00048 | SELECT * FROM punbb_online WHERE logged<1732314252 |
0.00067 | DELETE FROM punbb_online WHERE ident='54.36.148.154' |
0.00052 | SELECT topic_id FROM punbb_posts WHERE id=65564 |
0.00004 | SELECT id FROM punbb_posts WHERE topic_id=8590 ORDER BY posted |
0.00052 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=8590 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00086 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=8590 ORDER BY p.id LIMIT 0,25 |
0.00090 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=8590 |
Total query time: 0.0058 s |