Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] Automatyczna tabela

Napisany przez: butcherboy 22.03.2018, 20:38:05

Drodzy forumowicze, mam problem sad.gif

Otóż mam na stronie taki oto kod:

Kod
<html>
<head>
<meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    
</head>
<table align="center" border="1">
<tr><td>nazwa kolumny 1</td> <td>nazwa kolumny 2</td> <td>nazwa kolumny 3</td> <td>nazwa kolumny 4</td></tr>

<?php

$file = file("baza.txt");
foreach($file as $value)
{

$exp = explode("`",$value);
echo <tr><td>$exp[0].</td><td>.$exp[1].</td><td>.$exp[2].</td>.<td>$exp[3].</td></tr>;
}

?>

</table>
</html>


i niestety dane z pliku "baza" nie generują się. W ogóle strona nie działa.
Jestem mocno początkujący w te klocki, naczytałem się już poradników i przykładów ( m.in. powyższy kod wykorzystałem prawie w całości z jakiegoś poradnika ), ale dalej nie wiem co może nie grać...

Docelowo chciałbym, żeby dane z pliku (4 sekcje/kolumny ) wgrywały się do tabeli na stronie. Tabela ma być bardzo prosta - 4 kolumny, a liczba wierszy oczywiście w zależności od ilości danych.

Bardzo proszę o pomoc i z góry dziękuję smile.gif

Napisany przez: SmokAnalog 22.03.2018, 21:39:08

Zacznij od włączenia wyświetlania błędów. Masz tu sporo baboli, może błędy Cię nakierują.

Napisany przez: butcherboy 23.03.2018, 18:09:52

A jak mogę to zrobić?

Używam Notepad ++ i nigdzie nie widzę takiej opcji. Z tego co czytałem, powinno mi automatycznie wyrzucać takie błędy, ale tego nie robi...

Napisany przez: SmokAnalog 23.03.2018, 19:03:07

http://forum.php.pl/PHPJak_domyslnie_wlaczyc_wyswietlanie_bledow_w_PHP_t199639.html

Napisany przez: butcherboy 23.03.2018, 20:39:43

Udało mi się dojść do czegoś takiego, ale niestety tabela dalej nie działa. Nagłówki wyświetlają się poniżej wartości, które miałyby pokazać się w kolumnach. sciana.gif

Kod
<html>

<head>

<meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    
</head>

<table align="center" border="1">
<tr><td>kolumna1</td> <td>kolumna2</td> <td>kolumna3</td> <td>kolumna4</td></tr>

<?php
$file = file("baza.txt");
foreach($file as $value)
{

$exp = explode("`",$value);
echo $exp[0]." ".$exp[1]." ".$exp[2]." ".$exp[3]."<hr/>";

}

?>

</table>

</html>

Napisany przez: viking 23.03.2018, 20:48:48

Tabela ma w html określoną strukturę. Table thead tbody tr td th itd. U Ciebie przy wyświetlaniu nic takiego nie ma. Nawet nie informujesz że dane są w wierszach.

Napisany przez: butcherboy 23.03.2018, 21:04:51

A wiesz może jak to zrobić? Próbowałem na różne sposoby, ale w większości przypadków kod psuje się na tyle, że po prostu nie wczytuje mi całej strony ( wyskakuje błąd ).

Napisany przez: viking 23.03.2018, 21:27:26

Zatem popraw błąd. To jest najprostsze łączenie ciągów w PHP. Wystarczy zerknąć w dokumentację.

Napisany przez: butcherboy 26.03.2018, 08:50:26

"Zatem popraw błąd"....

Ja rozumiem, że nikt tutaj nie chce przedstawiać gotowych rozwiązań, to logiczne, ale przecież pisałem powyżej, że nie potrafię znaleźć błędów w tym, co napisałem. Próbowałem wiele razy, ale niestety jestem "zielony" w temacie, dlatego proszę o pomoc na tym forum.

Komentarze typu "zatem popraw błąd" są trochę nie na miejscu... Nie chcesz pomóc - lepiej nic nie pisz.

Napisany przez: nospor 26.03.2018, 09:10:38

Napisales tez, ze wyskakuje ci blad. Jak mamy ci go pomoc rozwiazac jak nie raczyles nam tego bledu podac. Mamy sobie go wywrozyc?

Napisany przez: butcherboy 27.03.2018, 05:27:48

Oho, zaczyna się....

"Nie wczytuje mi całej strony ( wyskakuje błąd )" oznacza, że NIE WCZYTUJE MI STRONY, wyskakuje błąd wczytywania, "Ta witryna jest nieosiągalna", "Nie udało się znaleźć adresu".

Czy teraz wystarczająco jasno się wyraziłem?

Napisany przez: viking 27.03.2018, 05:51:29

Zastosuj się do przypiętego tematu http://forum.php.pl/Jak_poprawnie_zadac_pytanie_oraz_przygotowac_srodowisko_pracy_t146215.html włącz pełne raportowanie błędów albo podaj komunikaty błędu z logów serwera. To co podajesz oznacza zapewne błąd 500. Poza tym rozumiem poczytales dokumentację php w temacie łączenia ciągów znakowych? Pokaż jak powinien wyglądać kod html bez php z przykładowym jednym wierszem.

Napisany przez: butcherboy 27.03.2018, 06:45:32

Ok @viking, zapoznałem się z podesłanym przez Ciebie tematem.

Przedstawię może to co udało mi się do tej pory zrobić. Postaram się to zrobić "łopatologicznie", jak najszczegółowiej się da.

Mam taki kod ( jest to cały kod na stronie, nic więcej nie ma. Zamieściłem również komentarze dla siebie ):

Kod
<html>

<head>

<meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    
</head>

<table align="center" border="1">
<tr><td>nagłówek 1</td> <td>nagłówek 2</td> <td>nagłówek 3</td> <td>nagłówek 4</td></tr>

<?php
error_reporting(E_ALL);
ini_set('display_errors','1');
// wczytanie zawartości pliku do tablicy
$file = file("baza.txt");
// przechodzimy przez tablicę za pomocą pętli foreach
foreach($file as $value)
{
//linie na części
$exp = explode("`",$value);
//rozbity tekst
echo $exp[0]." ".$exp[1]." ".$exp[2]." ".$exp[3]."<hr/>";
//każdy exp to kolejna pozycja z formularza - nie trzeba pokazywać wszystkich, w usterkach można pokazać tylko to co nas interesuje
}

?>

</table>

</html>


Strona, po wygenerowaniu danych wygląda tak:



Próbowałem wielu kombinacji kodu, które przeniosłyby te dolne nagłówki do konkretnych kolumn, jednak tak jak pisałem wcześniej - nie udało się.

W efekcie końcowym chciałbym uzyskać taki efekt, żeby w kolumnie "nagłówek 1" byłyby "dane z formularza 1", w "nagłówek 2" "dane z formularza 2" itd., a każde "dane z formularza" były osobnym wierszem, jeden pod drugim ( czyli prosta tabelka z danymi ).

Dane zaczytywane są z pliku txt, w którym wartości oddzielone są znakiem " ' ".

Napisany przez: viking 27.03.2018, 07:12:18

I tak jak ci mówiłem struktura tabeli to table -> tbody -> tr -> td. Ty wyświetlasz bez generowania tr->td w foreach. Nagłówkii tabeli to nie td tylko th. Dlatego też prosiłem żebyś wstawił jak według ciebie powinna wyglądać struktura html bez php.

Napisany przez: olszam 27.03.2018, 07:21:33

tak w skróconej wersji

Kod
<table align="center" border="1">
<tr><td>nagłówek 1</td> <td>nagłówek 2</td> <td>nagłówek 3</td> <td>nagłówek 4</td></tr>
.....
echo $exp[0]." ".$exp[1]." ".$exp[2]." ".$exp[3]."<hr/>";
....
</table>

zobacz lepiej co źle robisz z tabelami i przypatrz się na przykłady z tabel https://www.w3schools.com/html/html_tables.asp

Napisany przez: butcherboy 27.03.2018, 09:29:11

Dzięki za link! Poczytałem, popróbowałem i myślę, że trochę więcej wiem. Problem mam w generowaniu danych z PHP.

Poniżej poglądowo podsyłam formę tabelki, którą finalnie chciałbym uzyskać. Problem w tym, że dane w konkretnych wierszach miałyby być generowane w PHP ( wg kodu, który napisałem w postach powyżej ).


Kod
<table style="width:100%">
  <tr>
    <th>Nagłówek 1</th>
    <th>Nagłówek 2</th>
    <th>Nagłówek 3</th>
    <th>Nagłówek 4</th>
  </tr>
  <tr>
    <td>dane1</td>
    <td>dane2</td>
    <td>dane3</td>
    <td>dane4</td>
  </tr>
  <tr>
    <td>dane01</td>
    <td>dane02</td>
    <td>dane03</td>
    <td>dane04</td>
  </tr>
  <tr>
    <td>dane001</td>
    <td>dane002</td>
    <td>dane003</td>
    <td>dane004</td>
  </tr>
</table>


Kombinowałem z dodawaniem tabelki do kodu PHP, ale wtedy wywala mi błąd 500 sad.gif

Napisany przez: trueblue 27.03.2018, 09:30:57

Porównaj swoje dwa fragmenty kodu.
W jednym łączyłeś zmienne z tekstem tak:

  1. http://www.php.net/echo $exp[0]." ".$exp[1]." ".$exp[2]." ".$exp[3]."<hr/>";

a w drugim tak:
  1. http://www.php.net/echo <tr><td>$exp[0].</td><td>.$exp[1].</td><td>.$exp[2].</td>.<td>$exp[3].</td></tr>;

Napisany przez: viking 27.03.2018, 10:18:24

Teraz już wiesz jak zrobić to po stronie htmla więc pozostaje to co mówiłem od razu, czyli poczytać dokumentację http://php.net/manual/en/language.types.string.php To są naprawdę najprostsze rzeczy, jedna z podstaw języka bez której ani rusz dalej.
Masz kilka możliwości. Otwierać i zamykać ciągi znakowe (echo '<tr><td>' . $x .''), wstawiać tylko php w komórkach(<?php echo $x; ?>, albo użyć funkcji typu sprintf:

  1. http://www.php.net/sprintf('<tr><td>%s<td></tr>', $x)

Napisany przez: butcherboy 6.04.2018, 18:35:21

Po wielu trudach i walce udało mi się stworzyć tabelę, jaką chciałem. W PHP zastosowałem poniższe rozwiązanie:

Kod
echo '<head>
<title></title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name=\'robots\' content=\'noindex, follow, noarchive\'>
</head><center>
<body bgcolor="#FFFFFF">
<h3>Tytuł tabeli</h3><table border="1"><hr>
<th>Nagłówek 1</th>
<th>Nagłówek 2</th>  
<th>Nagłówek 3</th>
<th>Nagłówek 4</th>
</center>';
// przechodzimy przez tablicę za pomocą pętli foreach
foreach($file as $value)
{
//linie na części
$exp = explode("`",$value);
//rozbity tekst
echo '<tr>
<td align="center">'.$exp[0].'</td>
<td align="center">'.$exp[1].'</td>
<td align="center">'.$exp[2].'</td>
<td align="center">'.$exp[3].'</td>
</tr>';


Teraz zaczynam bawić się w oznaczanie wierszy, także kolejne pytania na pewno będą tongue.gif

Dzięki za pomoc!

No i stało się smile.gif Kolejny problem sad.gif

Niestety nie potrafię wygenerować automatycznej daty w swoim formularzu.
Korzystałem z: http://pl.php.net/manual/pl/function.date.php oraz z http://forum.php.pl/index.php?showtopic=93991 tematu, ale niestety nie działało.

Mam taki oto kod:

Kod
echo '<form action="" method="post">
Zapytanie 1: <input type="text" name="pole1" style="width: 200px;" /><br />
Zapytanie 2<input type="text" name="pole3" style="width: 200px;" /><br />
Zapytanie 3<input type="text" name="pole4" style="width: 200px;" /><br />
Zapytanie 4:<select name="pole2">
  <option value=""></option>
  <option value="Odp1">Odpowiedź 1</option>
  <option value="Odp2">Odpowiedź 2</option>
  <option value="Odp3">Odpowiedź 3</option>
  <option value="Odp4>Odpowiedź 4</option>
Data<input type="hidden" name="pole5" value=" <?php echo date(DATE_RFC822); ?>" /><br />
</select><br />
<input type="submit" value="Prześlij odpowiedzi" />
</form>';
}



Data niestety nie generuje się automatycznie. Chciałbym, żeby po dodaniu odpowiedzi z formularza, automatycznie do tych właśnie odpowiedzi dodawała się data.
Proszę o pomoc!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)