ďťż

FAQ PHP/MySQL Najczęściej zadawane pytania

       

Podstrony


telcocafe

Witam :)
Na wstęp
Jako że w dziale Programowanie powstały już dwa FAQ (Delphi i C++), postanowiłem załozyć temat, w którym umieszczane będą najczęściej zadawane pytania dotyczące języka PHP; może być też wykorzystanie w nim bazy danych MySQL.

Jak pisać
Pytania z odpowiedziami sugeruję pisać w stylu:
Pytanie pytanie pytanie?
Odpowiedź, odpowiedź, odpowiedź.
I jeszcze jedno. Każde pytanie piszcie jako oddzielny post, dzięki temu będzie można zrobić spis pytań i po prostu będzie czytelniej. Starajcie także pierw patrzeć, czy nie istnieje przypadkiem odpowiedź na pytanie, które macie zamiar zadać.
Podając kod, umieść go między znacznikami [ code ] i [ /code ] (bez spacji)
Jeśli kod jest dłuższy niż ok. 25 lini, zamiast znacznika code użyj codebox

Posłowie
Przy pisaniu postów, pamiętajcie, aby zwracać uwagę na błędy ortograficzne, zdania zaczynać z duzych liter itp. ;)

Spis pytań
ak wylosować jeden z tekstów podanych w tablicy?
Dlaczego w pliku index.html kod php mi się nie wykonuje??
Deklaracja zmiennych
Jak robić komentarze?
Jak zrobić upload pliku?
Jak przyspieszyć wykonywanie się skryptów?
W jaki sposób mogę wstawiać kod PHP?
W jaki sposób mogę komentować swój kod?
Jak wykonywac zapytania do mysql?
Jak wysłać e-maila z poziomu kodu PHP?
Jak mogę sprawdzić czas generowania strony?
Co jesli nie moge uzywac mail()?
Co to sa klasy i jak je używać
Dlaczego mój skrypt działa dobrze na Krasnalu, a gdy go wgram na jakiś serwer psuje się?
Jak zrobić licznik odwiedzin strony oparty na plikach tekstowych?
Druga wersja licznika // logika oparta na poprzednim :)
Jak wstawić kod z innego pliku?
Jak sprawdzić adres IP danego serwera?
Jak odczytać zawartość pliku z dysku?
Jak zapisać zawartość zmiennej na dysk?
Jak korzystać z sesji?
Jak sprawdzić jaką przeglądarką oglądamy stronę oraz nasz system operacyjny?
Jak zablokować wybrane adresy IP?
Jak sprawdzić ostatnią modyfikację danej strony?
Jak sprawdzić domenę z IP i IP z domeny?
Jak zrobić stronę zależną od dnia tygodnia?
Co to jest alternatywna składnia konstrukcji językowych?
Jak dodać jakąś wartość do tabeli w MySQL-u?
Podstawowe zapytania MySql.
Alternatywne miniaturyzowanie zdjęć (miniaturki).
Emotikony.
Emotkikony i mechanizm BBCode
Co to jest PHP i co oznacza ten skrót?
Jak zrobić tabliczkę mnożenia opartą na pętli for?
Jak wyświetlić różnicę dat działalności witryny internetowej?
Jak zakodować tekst do encji HTML i na odwrót?
Jak sprawdzić kilka informacji o serwerze?
Gdzie mogę znaleźć inne ciekawe FAQ po polsku?
Jak sprawdzić czy dany ciąg jest zawarty w innym ciągu?
Jak zrobić przekierowanie w PHP?
Wyświetlanie losowego tekstu
Jak pobrać adres IP odwiedzającego stronę ?
Co to sa klasy i jak je używać?
Koder/dekoder literowy by Krzysztof Bujak (Abdel Adrian)
Gdzie mogę znaleźć artykuł o zabezpieczaniu skryptów PHP?
W jaki sposób zamienić wszystkie linki w tekście na aktywne?
Pokolorowane na przemian innym kolorem linie z pliku
Jak za pomocą własnej funkcji wyliczyć pole trójkąta?
Zaokrąglanie liczb
Nested Trees - wyświetlanie struktury drzewiastej
Problemy z kodowaniem danych w mysql
Logowanie do serwera MySQL z wiersza poleceń

//aktualizacja linków
Użytkownik katarina edytował ten post 07 czerwiec 2008, 17:03


Jak wylosować jeden z tekstów podanych w tablicy?
<?php srand(time()); $tekst[] = 'To jest tekst 1'; $tekst[] = 'To jest tekst 2'; $tekst[] = 'To jest tekst 3'; $losuj=rand(0,count($tekst)-1); echo $tekst[$losuj]; ?>
Począwszy od PHP 4.2.0, nie trzeba już inicjować generatora liczb losowych przed użyciem (chodzi o funkcję srand()).
Użytkownik virus_jc edytował ten post 19 grudzień 2005, 22:20
Ja myślę, że od czegoś łatwego powinniśmy zacząć (o to też pytają)

Dlaczego w pliku index.html kod php mi się nie wykonuje??

Bo kod wykona się jedynie gdy plik ma rozszerzenie .php

Deklaracja zmiennych
Coś prostego, ale od czegoś trzeba zaczać B)

W PHP w przciwieństwie do innych języków, nie trzeba deklarować zmiennej, tzn. przypisując zmiennej jakąś wartość zostaje ona automatycznie utworzona.
$zmienna1 = 'zawartość zmiennej'; $zmienna2 = 1;

Teraz mozemy sprawdzić zawartość zmiennych:
echo $zmienna1; echo $zmienna2;
Więcej o zmiennych dowiecie się na stronie www.php.net



<ot>virus_jc: Po co komu taki długi skrypt do losowania elementu z tablicy, jak jest funkcja array_rand() ?</ot>
Skoro już mają być proste pytania na początek, to i ja coś prostego dorzucę ;)
P. Jak robić komentarze?
Komentarz jednoliniowy:
<? // echo 'Kod zakomentowany'; echo 'Kod niezakomentowany'; ?>
Wyświetli:
Kod niezakomentowany
Można osiągnąć to samo wpisując # (tak jak w shellu) zamiast //

Komentarz blokowy:
<? /* echo 'To się nie wyświetli'; echo 'To też nie'; */ echo 'Ale to z kolei tak'; ?>
Wyświetli:
Ale to z kolei tak

Jak zrobić upload pliku?
Tworzymy najpierw plik z formularzem:
<form action="upload.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="5200"> <input type="file" name="plik"> <input type="submit" value="Wyślij plik"> </form>
W polu ukrytym (hidden) pod nazwą MAX_FILE_SIZE ustala się maksymalny rozmiar pliku w bajtach - w naszym przypadku bedzie to 50 kB. I plik "upload.php":
<?php $katalog = '/katalog/dla/plikow'; if(move_uploaded_file($_FILES['plik']['tmp_name'],  $katalog.$_FILES['plik']['name'])) {  echo 'Plik został przesłany'; } else {  echo 'Wystapił błąd!'; } ?>
Użytkownik virus_jc edytował ten post 19 grudzień 2005, 21:49
P. Jak przyspieszyć wykonywanie się skryptów?
Po pierwsze:
Gdy wpisujemy jakiś string to zamiast brać go w " bierzmy go w ' . Co to da? Otóż parser przelatując przez kod, gdy napotka ciąg znaków wzięty w " szuka w nim jakiejś zmiennej. Jeżeli znajdzie przemienia jej nazwę na jej wartość. Gdy weźmiemy go w ' to parser wyświetli ją tak, jak jest. Przykład:
<? $imie = 'Dodek'; $nazwisko = 'Dodecki'; echo "Mam na imię $imie <br />"; echo 'Mam na nazwisko $nazwisko'; ?>
Wyświetli:
Mam na imię Dodek Mam na nazwisko $nazwisko
W drugiej linijce nie zamieniło nam $nazwisko na Dodecki. Aby zamieniło zrobimy coś takiego:
<? $imie = 'Dodek'; $nazwisko = 'Dodecki'; echo "Mam na imię $imie <br />"; echo 'Mam na nazwisko '.$nazwisko.'<br />'; ?>
Użyliśmy operatora . czyli połączyliśmy 3 stringi ze sobą.

Co jeszcze? Starajmy się używać jak najmniej pętl (chyba nie muszę wyjaśniać dlaczego). Nie piszmy własnych rozwiązań problemów (funkcji, klas itp), które są już zrobione przez deweloperów PHP (por. post virusa_jc z moim poźniejszym).

W jaki sposób mogę wstawiać kod PHP?

Sposobów wstawiania kodu jest kilka - oto one:
<? echo 'To jest najbardziej powszechna metoda.'; ?>
<?php echo 'Inna, dość podobna metoda.'; ?>
<script language="php"> echo 'Ta metoda jest rzadko używana.'; </script>
<% echo 'Sposób podobny do kodu ASP.'; %>
Użytkownik Boruta edytował ten post 19 grudzień 2005, 22:19

Ja myślę, że od czegoś łatwego powinniśmy zacząć (o to też pytają)

Dlaczego w pliku index.html kod php mi się nie wykonuje??

Bo kod wykona się jedynie gdy plik ma rozszerzenie .php

Jak wysłać e-maila z poziomu kodu PHP?
<?php if(isset($_POST['tresc'])) {  mail('email@odbiorcy.pl','Temat wiadomości','Treść wiadomości...','From: Szczepan Wąs <twoj@email.com>'); ?>
Aby móc wysyłać e-maile ze strony WWW, nalezy pamietać, żeby mieć włączoną funkcję mail() na serwerze ;)

Jak mogę sprawdzić czas generowania strony?

Wystarczy wstawić na stronę taki kod:
<?php $start = getmicrotime(); for ($i = 0; $i < 10000; $i++) {   $str = 'test'; } $end = getmicrotime(); echo '<!-- Czas wygenerowania strony: '.($end - $start).' sekund -->'; ?>
Czas generowania strony będzie zapisany w źródle.
Użytkownik Boruta edytował ten post 19 grudzień 2005, 22:06
Co jesli nie moge uzywac mail()
Najlepiej uzyc PHPMailer - jednak ten wymaga fsockopen.

Co to sa klasy jak je uzywac
Klasy to swego rodzaju ulatwienie, niektorym moze sie tez kojarzyc z komponentami. Przykladowa najprostsza klasa:
<? class test { function WyswietlMiCos() { $cos = 'blebleblebleeeeee'; return $cos; } } ?>
Nastepnie aby to uzyc wywolujemy to tak:
<? echo  test::WyswietlMiCos(); ?>
To wielkie ulatwienie, szczegolnie jesli klasy umiescimy w osobnych plikach, a pozniej za pomoca include je wlaczyc do dokumentu-rodzica. Wtedy mozemy np. skupic sie na samej realizacji kodu w klasach, i gdy cos bedzie nie tak - wiemy dokladnie gdzie szukac winnego.

Jak sie zabezpieczyc przed "wstrzyknieciem" kodu html/js do danych wysylanych przez uzytkownikow na strone (np forum, ksiega gosci)?
Nalezy do tego uzyc funkcji htmlspecialchars ktora zmienia wszystkie znaki specjalne, jak na przyklad "<" ">" itp - zmienia je na np. "&lt;", "&gt;". Pomocne sa takze polecenia addslashes dodajacy slashe "\" przed kazdym znakiem specjalnym (np apostrofem). Aby uzytkownika nie razic dziwnym tekstem mozemy potem bezpiecznie usunac te slashe - za pomoca stripslashes

Użytkownik Einzeinbleth edytował ten post 19 grudzień 2005, 22:28
P. Dlaczego mój skrypt działa dobrze na Krasnalu, a gdy go wgram na jakiś serwer psuje się?
Najprawdopodobniej (nie zawsze!) spowodowane jest to włączeniem na Krasnalu dyrektywy register_globals . O co chodzi? Dyrektywa register_globals została stworzona po to, aby pisanie kodu było łatwiejsze. Polega to na tym, że:
Powiedzmy, że mamy taki formularz:
<form action="form.php" method="post"> Podaj swoje imię: <input type="text" name="imie"> <input type="submit" value="wyślij" /> </form>
Formularz, po wpisaniu danych, przekieruje nas do pliku form.php, gdzie będziemy od razu mieli zdeklarowaną funkcję $imie z wartością pobraną z formularza, a nie będziemy musieli się męczyć z długim $_POST['imie'] . Prawda, jakie wygodne?
Niestety poleganie na tej dyrektywie prowadzi do dwóch błędów. Pierwszy to już wspomniana sytuacja, gdy register_globals jest wyłączone. Wtedy nie będziemy mieli zmiennej $imie, domyślacie się pewnie, co w związku z tym... Dlatego dla danych przesłanych postem ZAWSZE należy używać tablicy $_POST, analogicznie do danych przesłanych getem, danych serwera itp. Dodam jeszcze, że nie powinno się używać tablicy $HTTP_POST_VARS, gdyż ta funkcja może być wyłączona na danym serwerze i ogólnie usunięta w następnych wersjach PHP.
Wspomniałem o 2 błędach. Co z tym drugim? Otóż właczenie register_globals na serwerze może prowadzić do niebezpiecznych luk w kodzie. Spójrzmy na przykład:
Plik admin.php
<? if($_POST['haslo']=='jakies_tam_haslo') { $status = 'ok'; } /* jakis tam kod ... */ if($status=='ok') { echo 'masz dostęp'; }
Gdzie ten błąd? Otóż można się dostać do zabezpieczonej części w prosty sposób - wpisując jako adres http://jakas.strona....n.php?status=ok . Co się stanie? Parser zadeklaruje nam zmienną $status o wartości ok, a więc dostaniemy się do zabezpieczonej części bez znajomości hasła...
A więc: NIGDY nie polegajmy na register_globals, a jeżeli mamy własny serwer, to tą funkcję wyłączmy (w php.ini zmieniasz register_globals = on na register_globals = off )
?>
Użytkownik dodek edytował ten post 19 grudzień 2005, 22:42
Jak zrobić licznik odwiedzin strony oparty na plikach tekstowych?
<?php $licznik = 'licznik.txt'; if ($plik= @fopen($licznik,'r')) {  $ilosc=fgets($plik);  fclose($plik); } else $ilosc = 0; $ilosc++; echo 'Odwiedzin: '.$ilosc; $plik=fopen($licznik,'w') or die('Błąd'); fputs($plik, $ilosc); fclose($plik); ?>
Ilość wizyt będzie dopisywana do pliku "licznik.txt". Aby licznik zadziałał, musisz po raz pierwszy wpisać do pliku "licznik.txt" wartość "0".

Wyedytuję szybciutko skrypt virusa, by nie wymagał tworzenia pliku ręcznie:
<? $licznik = 'licznik.txt'; //nazwa pliku z licznikiem if(!file_exists($licznik)  // jezeli plik licznik.txt nie istnieje {  $plik = fopen($licznik, 'w'); //utworz plik licznik.txt  fwrite($plik, '0'); //zapisz do niego 0  fclose($plik); //zamknij niepotrzebny juz wskaznik pliku  echo 'Odwiedzin: 0'; //w sumie pierwsza odsłona, wiec nie ma zadnych innych odwiedzin } else {  $ilosc = file_get_contents($licznik); //pobierz zawartosc pliku licznik.txt  $ilosc++; //zwiekszamy liczbe odwiedzin o jeden  echo 'Odwiedzin: '.$ilosc; //wyswietlamy liczbe odwiedzin  $plik=fopen($licznik,'w'); //kasujemy zawartoscp pliku licznik.txt  fwrite($plik, $ilosc); /zapisujemy nowa liczbe odwiedzin  fclose($plik); //zamknij niepotrzebny juz wskaznik pliku } ?>
Dlaczego tak jest lepiej? Otóż edytory tekstu mają tendencję do wstawiania \n na koniec pliku, a wtedy mogłyby być problemy ze zwiększaniem o 1.

//dawajcie w skryptach komentarze!
Użytkownik dodek edytował ten post 19 grudzień 2005, 22:25
Jak wstawić kod z innego pliku?

Nic prostszego - oto kod:
<?php include("jakis_plik.php"); ?>

Jak sprawdzić adres IP danego serwera?
<?php $ip = 'ks-ekspert.pl'; // bez http:// !! $ping = gethostbyname($ip); echo 'Adres komputera '.$ip.' to '.$ping; ?>
Użytkownik virus_jc edytował ten post 19 grudzień 2005, 22:40

Ja myślę, że od czegoś łatwego powinniśmy zacząć (o to też pytają)

Dlaczego w pliku index.html kod php mi się nie wykonuje??

Bo kod wykona się jedynie gdy plik ma rozszerzenie .php

P. Jak korzystać z sesji?
Nic prostszego. Na początku każdego skryptu walimy funkcję session_start() i od tej pory mamy asocjacyjną tablicę superglobalną (uff...) $_SESSION . Jeżeli zapiszemy w niej dane to na każdej podstronie będziemy mieli zmienną. Przykład:
Plik index.php
<? session_start(); //rozpoczynamy sesję $_SESSION['nick'] = 'Dodek'; //rejstrujemy zmienną sesyjną nick echo '<a href="podstrona.php">Podstrona</a>'; //wyświetlamy link
Plik podstrona.php
<? session_start(); //wznawiamy sesję echo $_SESSION['nick']; //wyswietlamy zmienną sesyjną ?>
Otwieramy w przeglądarce index.php. Klikamy na link. Widzimy "Dodek". Sweet.

Sesje oferują całą gamę zastosowań, choćby autentyfikacja użytkownika. O tym jednak napiszę w następnym rozdziale :D .
Użytkownik dodek edytował ten post 19 grudzień 2005, 22:41
Jak sprawdzić jaką przeglądarką oglądamy stronę oraz nasz system operacyjny?
<?php // ------------------- przeglądarka ------------------- $brow = strtolower($_SERVER['HTTP_USER_AGENT']); /* strtolower() -> zmienia litery na małe zmienna superglobalna z podanym parapetrem odczytuje info o przegladarce i OS-ie */ // za pomocą strpos() znajdujemy frazę wśród dostarczonych informacji ($brow) if(strpos($brow, 'firefox') !== false) {  echo 'Firefox'; } elseif(strpos($brow, 'opera') !== false) {  echo 'Opera'; } elseif(strpos($brow, 'msie') !== false) {  echo 'Internet Explorer'; } else {  echo 'Inna'; } echo '<p>'; // ----------------- system operacyjny ----------------- if(strpos($brow, 'windows') !== false) {  echo 'Windows'; } elseif(strpos($brow, 'linux') !== false) {  echo 'Linux'; } elseif(strpos($brow, 'mac os') !== false) {  echo 'MacOS'; } else {  echo 'Inny'; ?>

Jak zablokować wybrane adresy IP?
$baza = file('ip.txt'); // baza zbanowanych ip $ip = count($baza); for($i = 0; $i < $ip; $i++) // pętla { $baza[$i] = trim($baza[$i]); if($baza[$i] == $_SERVER['REMOTE_ADDR']) {   echo 'Zostales zablokowany!'; } }
w pliku "ip.txt" przechowujemy listę zbanowanych adresów IP, każdy w oddzielnej linijce.
// skrypt nie zadziała w przypadku, jeśli klient będzie miał zmienne IP (np. Neostrada)
Użytkownik virus_jc edytował ten post 19 grudzień 2005, 23:23
Jak sprawdzić ostatnią modyfikację danej strony?
<?php function OstatniaModyfikacja($plik) { # tworzymy funkcję  $czas = filemtime($plik); // wybieramy plik  $data = date('d-m-Y G:i:s', $czas); // tworzymy format daty i czasu  echo $data; // wyświetlamy zmienną $data } OstatniaModyfikacja('strona_w_ktorej_chcemy_sprawdzic_ostatnia_zmiane.php'); ?>
Użytkownik virus_jc edytował ten post 19 grudzień 2005, 23:36
IP na domene:
<?php //IP => Domena $ip = "127.0.0.1"; $domena = gethostbyaddr($ip); if (!empty($domena)) {    echo "Domena serwera o IP <b>" . $ip . "</b> to:" . $domena . "!"; } else {    echo "Nie znaleziono domeny dla serwera o IP <b>" . $ip . "</b>"; } ?>

Domena na IP:
<?php //Domena => IP $domena = "www.google.pl"; $ip = gethostbynamel($domena); if (!empty($ip)) {    echo "Adres(y) IP serwera <b>" . $domena . "</b>:<br>";    for ($i=0; $i<count($ip); $i++)    {        echo $ip[$i] . "<br>";    } } else {    echo "Nie znaleziono adresów IP dla podanego serwera <b>" . $domena. "</b>"; } ?>

PHPBot IRCowy:
http://haxite.org/in...kul_view&id=557

Jak zrobić stronę zależną od dnia tygodnia?
<?php function jakiDzien() {  $dzien = date('w'); // informujemy, że chodzi nam o dzień tygodnia  switch($dzien) {    case 0: return('niedziela.html');    case 1: return('poniedzialek.html');    case 2: return('wtorek.html');    case 3: return('sroda.html');    case 4: return('czwartek.html');    case 5: return('piatek.html');    case 6: return('sobota.html');    default: return('domyslna.html');  } } include(jakiDzien()); // dołączamy odpowiedni plik z nazwą dnia ?>

P. Co to jest alternatywna składnia konstrukcji językowych?
Odpowiedź jest prosta - to stosowanie zamiast klamerek dwukropka i endu. Przykład:
<? $tablica = array('Dodek', 'Dodecki'); //stworzymy sobie tablicę // -------if------- if(!isset($tablica)):  echo 'Tablica $tablica jest niezdefiniowana!'; elseif(empty($tablica)):  echo 'Tablica $tablica jest pusta!'; else:  echo 'Tablica $tablica nie jest pusta!'; endif; /* z samym else i elseif nie można użyć alternatywnej składni, trzeba wziąć to w blok razem z if */ //-------for------- for($i=0;$i<2;$i++):  $nowa_tablica[$i] = $tablica[$i]; /* kopiowanie tablicy - zupełnie niewydajne, ale to tylko dla testu */ endfor; //-------foreach------- foreach($tablica as $indeks => $wartosc):  echo '$tablica['.$indeks.'] => '.$wartosc.'<br />'; endforeach; //-------while------- /* tutaj alternatywa dla foreach, którego nie było w PHP3, ale z tego co widzę, wciąż wielu ludzi jej używa, choć foreach jest dużo szybsze, łatwiejsze i wygodniejsze. Ten przykład powinien wyświetlić to samo co powyższy */ while (list($indeks, $wartosc) = each ($tablica)):  echo '$tablica['.$indeks.'] => '.$wartosc.'<br />'; endwhile; //-------switch------- switch($tablica[0]):  //przyglądamy się pierwszemy elementowi tablicy case 'Dodek':  echo 'Pierwszy element to "Dodek"!'; break; case 'Dodcki':  echo 'Pierwszy element to "Dodecki"!'; break; default:  echo 'Pierwszy element to ani Dodek ani Dodecki.'; break; endswitch; ?>
Po co to komu? Sam nie wiem. Wypadałoby raczej spytać dewelpoerów PHP, oni wytłumaczą...

Jak dodać jakąś wartość do tabeli w MySQL-u?
<?php if($_GET['baza'] == 'dodaj') { // jeśli w adresie znajdzie się baza=dodaj  $polaczenie = mysql_query('localhost','root','haslo'); // łączymy się z bazą  mysql_select_db('moja_baza',$polaczenie); // wybieramy bazę  /* wyonujemy zapytanie, które doda wartość do pierwszej kolumny w tabeli moja_tabela */  $sql = 'INSERT INTO moja_tabela VALUES('.$_POST['tresc'].')';  if(mysql_query($sql,$polaczenie) {    echo 'Dodano'; // jeśli wszystko przebiegło pomyslnie - informuje o tym  } else {    echo 'Błąd'; // w przeciwnym wypadku informuje o błędzie  } } ?> <!-- formularz --> <form action="<?php echo $_SERVER['PHP_SELF']; ?>?baza=dodaj" method="post">  <input type="text" name="tresc">  <input type="submit" value="Dodaj"> </form>
Użytkownik virus_jc edytował ten post 21 grudzień 2005, 15:04
Podstawowe zapytania MySql.

Dodanie do tabeli:
INSERT INTO $nazwa_tabeli (pole1, pole2) VALUES('tekst', 'teskt2')

Wyświetlenie z tabeli:
SELECT * FROM $nazwa_tabeli WHERE status='1' ORDER BY id DESC LIMIT 5
Wyświetli 5 ostatnich rekordów wg. id z tabeli które mają status 1.

Aktualizacja:
UPDATE $nazwa_tabeli SET pole1='tekst', pole2='tekst2' WHERE id='1'
Zaktualizuje "pole1" oraz "pole2" "wpisując" do ich "tekst" i "tekst2", tam gdzie id jest równe 1.

Usuwanie z tabeli:
DELETE FROM $nazwa_tabeli WHERE id='1'

Lącznie się z bazą w PHP:
$polaczenie = @mysql_connect("localhost", "login", "haslo") or die("Polączenie nie powiodlo się!"); $db = @mysql_select_db(nazwa_bazy, $connection) or die("Wybór bazy nie powiódł się."); $sql = "zapytanie"; $rezultat = @mysql_query($sql, $polaczenie) or die("Wykonanie zapytania nie powiodlo się!");

Chyba tyle ;)

Alternatywne miniaturyzowanie zdjęć (miniaturki).

$zdjecie = "http://www.link/fotka.jpg"; $procent= 0.3; list($width, $height) = getimagesize($zdjecie); $newwidth = $width * $procent; $newheight = $height * $procent; echo "<img width='$newwidth' height='$newheight' src='$zdjecie'>";

Troche obciąża skrypt, ale na pewno wygodniejsza alternatywa od sposobu "zmiejsz i zapisz"...

Emotikony.

Zalóżmy, że ktoś przesyla jakiś tekst poprzez $tekst z ":), :D, :P"... jak zamienić to na emotikony?

$zamien[':)'] = '<img src="umiech.gif">'; $zamien[':D'] = '<img src=".gif">'; $zamien[':P'] = '<img src="jezyk.gif">'; $tekst = (string)$tekst; $tekst = str_replace(array_keys($zamien), array_values($zamien), $tekst); echo $tekst;
Użytkownik Abdel Adrian edytował ten post 20 grudzień 2005, 16:14
Emotikony troche inaczej
function emoticons($str){ // emoty $emoticons = array( ':) ', ':(', ); // obrazki $images = array( 'emoticons/usmiech.gif', 'emoticons/smutny.gif', ); $str = str_replace($emoticons, '<img border="0" src="'.$images.'">',$str); }

BBCODE:
function bbcode($str){ // usun zbedne $str=stripslashes($str); // HTML $str = str_replace("<", "&lt;", $str); $str = str_replace(">", "&gt;", $str); // kolejny wiersz $str = nl2br($str); // Spacja $str=str_replace('[spacja]','&nbsp;',$str); // Pogrubiony tekst $str = preg_replace("#\[b\](.*?)\[/b\]#si", "<b>\\1</b>", $str); // Pochylony tekst $str = preg_replace("#\[i\](.*?)\[/i\]#si", "<i>\\1</i>", $str); // Podkreślony tekst $str = preg_replace("#\[u\](.*?)\[/u\]#si", "<u>\\1</u>", $str); // Kolor tekstu $str = preg_replace("#\[color=(http://)?(.*?)\](.*?)\[/color\]#si" , "<span style=\"color:\\2\">\\3</span>", $str); // Odnośnik e-mail $str = preg_replace("#\[email\]([a-z0-9\-_.]+?)@([\w\-] +\.([\w\-\.]+\.)?[\w]+)\[/email\]#i" , "<a href=\"mailto:\\1@\\2\">\\1@\\2</a> ", $str); // Odnośnik e-mail(własne definiowanie wyświetlanego tekstu) $str = preg_replace("#\[email=([a-z0-9\-_.]+?)@([\w\-]+\.([ \w\-\.]+\.)?[\w]+)?(.*?)\](.*?)\[/email\] #i", "<a href=\"mailto:\\1@\\2\">\\5</a>", $str); // Odnośnik, otwieranie w nowym oknie $str = preg_replace("#\[url\](.*?)?(.*?)\[/url\]#si", "<A HREF=\"\\1\\2\" TARGET=\"_blank\">\\1\\2</A>", $str); // Odnośnik, otwieranie w nowym oknie, definiowanie treści odnośnika $str = preg_replace("#\[url=(.*?)?(.*?)\](.*?)\[/url\]#si", "<A HREF=\"\\2\" TARGET=\"_blank\">\\3</A>", $str); // Automatyczne tworzenie linków $str = preg_replace_callback("#([\n ])([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\& $@\/=\+]+)#si", "bbcode_autolink", $str); $str = preg_replace("#([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[a-z0-9\ -\.,\?!%\*_\#:;~\\&$@\/=\+]*)?)#i", " [ <a href=\"http://www.\\2.\\3\\4\" target=\"_blank\">www</a> ]", $str); $str = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.] +\.)?[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2_(at)_\\3< /a>", $str); // Słowo max 50 znaków $str=wordwrap($str, 50, " ", 1); return $str; } //autolink function bbcode_autolink($str){ $lnk=$str[3]; if(strlen($lnk)>30){ if(substr($lnk,0,3)=='www'){$l=9;}else{$l=5;} $lnk=substr($lnk,0,$l).'(...)'.substr($lnk,strlen($lnk)-8);} return ' [ <a href="'.$str[2].'://'.$str[3].'" target="_blank" id="link">www</a> ]'; } // usun tylko znaki html function bbcode_no_html($str){ $str = stripslashes($str); $str = str_replace("<", "&lt;", $str); $str = str_replace(">", "&gt;", $str); $str = str_replace("'", "'", $str); $str = str_replace("javascript", "java_script", $str); return $str; }
Użytkownik adex edytował ten post 20 grudzień 2005, 17:35
Co to jest PHP i co oznacza ten skrót?

PHP jest to skrót od "Hypertext Preprocessor". Kod napisany w tym języku zostaje przemianowany przez Parser PHP na zwykły kod HTML, a wszystkie skrypty są wykonywane bezpośrednio na serwerze. Oznacza to, że przeglądając przez przeglądarkę kod źródłowy strony napisanej w PHP widzimy tylko zwykły kod HTML. Jest to wielką zaletą tego języka, gdyż jest to pewien rodzaj zabezpieczenia przed sieciowymi włamywaczami (Crackerami lub Hackerami). Przypuśćmy, że napisaliśmy skrypt logowania, - login oraz hasło są zawarte w kodzie, ale włamywacz i tak nie wie jaka jest nazwa użytkownika i hasło, gdyź nie może on zobaczyć kodu PHP.

Zależnie od konfiguracji serwera, każdy plik z rozszeżeniem .php jest sprawdzany przez Parser PHP. Kod zawarty pomiędzy np.
<?php a
?>jest zamieniany na kod HTML, a kod inny od PHP zawarty w tym pliku jest po prostu pozostawiany bez zmian. Dopiero plik przepuszczony przez ów program jest wyświetlany w przeglądarce.

Pierwsza wersja PHP powstała w 1994 r., a jej autorem był Rasmus Lerdorf. Do twórcy po wprowadzeniu 2 wersji języka dołączyły się nowe osoby tworząc PHP Group of core developers.

Jak zrobić tabliczkę mnożenia opartą na pętli for?
<?php echo '<table border=1 cellpadding=4 cellspacing=4>'; for ($wysokosc = 1; $wysokosc <= 10; $wysokosc++) {  echo "<tr>\n";  for ($szerokosc = 1; $szerokosc <= 10; $szerokosc++) {    echo "<td>\n";    echo $szerokosc * $wysokosc;    echo "</td>\n";  }  echo "</tr>\n"; } echo '</table>'; ?>
Użytkownik virus_jc edytował ten post 21 grudzień 2005, 16:44
Jak wyświetlić różnicę dat działalności witryny internetowej?

<?PHP $copyright = 'Copryright &#0169'; // tekst $year_start = '2000'; // start strony $year_now = date("Y"); // pobieramy rok function footmsg() { global $year_start, $year_now, $copyright; // pobieramy zmienne if ($year_now > $year_start) // ustalamy, ze liczymy, jezeli rok terazniejszy jest wiekszy $year = "$year_start"." - "."$year_now"; // tu obliczamy roznice else ($year = "$year_start"); // w przypadku, gdy start naspapil w tym samym roku echo "$copyright $year"; // to, co ma sie wyswietlic } footmsg(); // wyswietlamy roznice dat np. w stopce ?>

P. Jak zakodować tekst do encji HTML i na odwrót?
Na początek - użyjemy funkcji:
str_split()
preg_replace()
chr()
ord()

Robimy formularz z polem textarea o nazwie text.

$str = str_split($_POST['text'], 1); // rozdzielamy cały tekst na tablicę w której 1 element == jeden znak $result = ''; foreach($str as $char) //przejeżdzamy foreachem po wyniku str_split() {   $result .= '&amp;#'.ord($char).';'; /* $char to jeden znak z tekstu, wykorzystujemy funkcję ord() aby dostać jego kod ASCII */ } echo $result;
I z powrotem: (tak samo - textarea o nazwie tekst)
$result = preg_replace('|&#[0-9];|', chr('\1'), $_POST['text']); /* w |&#[0-9]; cyfry zamieniamy na znak za pomocą chr() - jak? wyrażenia regularne naprawdę ciężko wyjaśnić. */ echo $result;
I to wszystko.

//EDIT:

Bełdzio: nie zakumałeś :P nie chodzi mi o konwersję np. & do &amp; tylko & do &#38 ; //spacja jest specjalnie, bo mi zamienia <_<
Użytkownik dodek edytował ten post 21 grudzień 2005, 21:11
yyy nie wiem, nie znam się, nie kontaktuję ale może ? http://pl.php.net/ma...pecialchars.php http://pl.php.net/ma...hars-decode.php

Jak sprawdzić kilka informacji o serwerze?
Wersja PHP na serwerze:
<?php echo PHP_VERSION; ?>

System operacyjny serwera:
<?php echo PHP_OS; ?>

Informacje w formie graficznej(szczegółowo):

<?php phpinfo(); ?>

Gdzie mogę znaleźć inne ciekawe FAQ po polsku?

Moim zdaniem dość ciekawym FAQ jest http://php.faq.pl/.

// ps. Bełdzio - pisz pytanie. ;)
Użytkownik Boruta edytował ten post 21 grudzień 2005, 21:22
Mam propozycje - FAQ mzona przenisc na osobna strone, tak jak zrobiono to w dziale ASO.
Postawilem razem z Kodiem strone http://faq.compzone.org
Mysle, ze wygodniejsze do dodawania i przegladania bedzie wlasnie takie FAQ. Co o tym myślicie? Moge przeniesc obecne posty i porozdawac chetnym konta, zeby mogli dodawac swoje wpisy (w tej sprawie prosze na maila faq@compzone.org).


Mam propozycje - FAQ mzona przenisc na osobna strone, tak jak zrobiono to w dziale ASO.
Postawilem razem z Kodiem strone http://faq.compzone.org
Mysle, ze wygodniejsze do dodawania i przegladania bedzie wlasnie takie FAQ. Co o tym myślicie? Moge przeniesc obecne posty i porozdawac chetnym konta, zeby mogli dodawac swoje wpisy (w tej sprawie prosze na maila faq@compzone.org).

Jak sprawdzić czy dany ciąg jest zawarty w innym ciągu?
<? $ciag1 = "www.ks-ekspert.pl/forum"; $ciag2 = "ekspert"; $sprawdzenie= strstr($ciag1, $ciag2); echo $sprawdzenie; ?>
Funkcja zwraca częśc ciągu, w którym wyszukujemy, od momentu znalezienia ciągu drugiego. Jeżeli takiego nie znajdzie, to zwraca wartośc FALSE.


Jak sprawdzić czy dany ciąg jest zawarty w innym ciągu?
<? $ciag1 = "www.ks-ekspert.pl/forum"; $ciag2 = "ekspert"; $sprawdzenie= strstr($ciag1, $ciag2); echo $sprawdzenie; ?>
Funkcja zwraca częśc ciągu, w którym wyszukujemy, od momentu znalezienia ciągu drugiego. Jeżeli takiego nie znajdzie, to zwraca wartośc FALSE.

Jak zrobić przekierowanie w PHP?

<? header("Location: http://www.twojadres.pl/"); exit; ?>

Wyświetlanie losowego tekstu

<?    srand ((double) microtime() * 1000000);      $file = file("plik.txt");    $anzahl = count($file);    $zufall = rand(1,$anzahl);    echo $file[$zufall]." (".$zufall."/".$anzahl.")"; ?>

Jak pobrać adres IP odwiedzającego stronę ?

Adres IP klienta przechowywany jest w tablicy $_SERVER w polu o nazwie REMOTE_ADDR. Jeżeli więc chcemy go wyświetlić piszemy następujący kod:
<?   echo $_SERVER['REMOTE_ADDR']; ?>
W praktyce ten sposób nie zawsze się sprawdza (o czym się przekonałem po kilku godzinach rozmyślania :P ), ponieważ użytkownik może się łaczyć przez proxy. IP proxy przechowywane jest w zmiennej $_SERVER['HTTP_X_FORWARDED_FOR']. Dlatego powinniśmy najpierw sprawdzić czy rzeczywiście klient korzysta z proxy i zależnie od tego pobrac IP z $_SERVER['HTTP_X_FORWARDED_FOR'] lub $_SERVER['REMOTE_ADDR'].
<?   if ($_SERVER['REMOTE_ADDR'] == '')   {      $ip = $_SERVER['REMOTE_ADDR'];   } else $ip = $_SERVER['REMOTE_ADDR'];   echo "Twoje IP to $ip."; ?>

Jak wstawić kod z innego pliku-funkcja 2
Na początku kodu dajemy coś takiego:
require "include/bittorrent.php";
To jest ta sama funckja co include, tylko, że jak nie ma danego pliku, to strona się w ogóle nie wyswietli, i tylko wyswietli błąd.


Jak mogę sprawdzić czas generowania strony?

Wystarczy wstawić na stronę taki kod:
<?php $start = getmicrotime(); for ($i = 0; $i < 10000; $i++) {   $str = 'test'; } $end = getmicrotime(); echo '<!-- Czas wygenerowania strony: '.($end - $start).' sekund -->'; ?>
Czas generowania strony będzie zapisany w źródle.

Co to sa klasy jak je uzywac
Klasy to swego rodzaju ulatwienie, niektorym moze sie tez kojarzyc z komponentami. Przykladowa najprostsza klasa:
<? class test { function WyswietlMiCos() { $cos = 'blebleblebleeeeee'; return $cos; } } ?>
Nastepnie aby to uzyc wywolujemy to tak:
<? echo  test::WyswietlMiCos(); ?>
To wielkie ulatwienie, szczegolnie jesli klasy umiescimy w osobnych plikach, a pozniej za pomoca include je wlaczyc do dokumentu-rodzica. Wtedy mozemy np. skupic sie na samej realizacji kodu w klasach, i gdy cos bedzie nie tak - wiemy dokladnie gdzie szukac winnego.
[/quote]
Witam, pozwole sobie poprawic /dodac kolege/zanke.
Z tego przykladu naprwade ciezko wywnioskowac dla poczatkujacych dlaczego klasy sa pomocne. Z tego co podalas/es to bym nic nie wynioskowal. Klasy sa to wlasciwosci i metody opisujace dana grupe obiektow w duzym skrocie ujmujac. Powyzsza klasa kolezanki/gi i jej zastosowanie jest statycznua odmiana, i nie wymaga uzywania egzemplarza obiektu. taka metode jaka zastosowano powyzej powinno sie pisac: public static function Wyswietlsmicos . Warto trzymac sie konwencji nazewniczych, public /private / static . W php 4 nie bylo mozliwosci np. zadeklarowania prywatnych metod aczkolwiek w php 5 juz sa.
Bardziej uzyteczny przyklad klasy :::
<? class student{  //nazwa klasy private $rok;   // jego wlasciwosci czyli cechy ktore moze posiadac private $semestr; // wlasciwosci opisuja obiekt private $kierunek; // wlasciwosci priavte nie sa dostepne z poziomu skryptu private $wydzial; // lecz tylko z poziomu klasy private $imie;  // Jest to zwany proces enkapsulacji danych private $nazwisko; private $telefon; private $nr_indeksu;    public function zmien($cecha,$wartosc){      $this->$cecha=$wartosc;    }        public function pokaz_studenta(){     foreach ($this as $cecha=>$wartosc){   echo "$cecha ||  $wartosc<br>";                         }   } } $student1=new student; $student1->zmien(rok,'Drugi'); $student1->zmien(semestr,'III'); $student1->zmien(kierunek,'Informatyka w biznesie'); $student1->zmien(wydzial,'Marketing i Zarzadzanie'); $student1->zmien(imie,'Marek'); $student1->zmien(nazwisko,'Kowalski'); $student1->zmien(telefon,'0700232323'); $student1->zmien(nr_indeksu,'22145'); $student1->pokaz_studenta(); ?>
Pytanie: dlaczego warto enkapsulowac wlasciwosci ? A dlatego zeby nikt nie powolany nie probowal nam wnikac w zasade dzialania metod(funkcji). Otoz jesli teraz np. ktos chcialby sprobowac sobie recznie przypisac wartosc do wlasciwosci obietku $student1 w sposob $student1->rok=2; php zglosci blad dlatego iz $rok jest wlasciwoscia prywatna i mozna ja zmieniac tylko w wewnatrz klasy. Dla uzytkownika dajemy funkcje zmien i tego ma uzywac, jesli uztkownik mowi iz funkcja zmien ma za malo mozliwosci , edytujemy mu dana metode i vuala , user moze korzystac z lepszej. I nie musi wiedziec/rozumiec dlaczego teraz dziala lepiej, jakie zmiany wprowadzilismy on dalej uzywa w stary sposob : zmien(cecha,wartosc) ale juz np. po dodaniu wypisuje na ekranie jakies bajerki:/.
Druga istotna rzecza w klasach jest ich dziedziczenie/polimorfizm. Okej do tej powyzszej klasy studenta robimy teraz klase dziedziczaca :
class Ksiegowa extends student {
private $oplata;
public funtion Ustaw_oplate($kwota){
$this->oplata=$kwota
}

$student2=new ksiegowa;
$student2->ustaw_oplate(3000);
Np. jesli ksiegowa ma zarzadzac strona to bedzie juz miala mozliwosc ustawiania mu jakis tam kwot oplat za studia np. ... Taki tam przyklad na szybkiego wymyslony. Chodzi o to ze poszerzylismy mozliwosci klasy Student o metody i atrybuty klasy ksiegowa.
O klasach mozna pisac i pisac. Programowanie obiektowe jest bardzo popularne w sumie chyba wrecz jest to wymog pisania duzych projektow. W programowaniu obiektowym dostepne sa jeszcze rozne dodatkowe metody przedstawie tylko 2 narazie:
__construct(); oraz __destruct; jesli w klasie zapiszemy funkcje __construkt();
to w chwili stworzenia egzemplarza danej klasy wywolana zostanie funkcja konstruktora. np. __constrct(){echo ' Utworzylem obiekt';} . teraz $obiekt=new klasa; i wynikiem bedzie stworzony egzemplarz + napis utowrzylem obiekt. Do kontruktora mozemy przekazywac parametry to jest __construct($param) , i np. mozmey sobie zrobic: __construct($param){$this->nazwisko=$param} przy stworzeniu egzemplarza : $marian=new klasa(kowalski) ; automatycznie zostanie mu przypisane nazwisko kowalski. W php4 dekonstruktora nie bylo.
TO narazie droga wstepu tyle: jesli chcecie moge napisac wiecej.

Koder/dekoder literowy by Krzysztof Bujak (Abdel Adrian)

Prosty koder/dekoder, który zamienia literki i cyferki (kod). Mam nadzieję, że komuś się przyda, chodźby do innych celów, niż jest przeznaczony ;)
Skrypt byl tworzony dla potrzeb zadania z informatyki.

<?php //Autor: Krzysztof Bujak //E-mail: krzysztof-bujak@o2.pl //Wszelkie prawa zastrzeżone echo '<font face="verdana" size="1">'; echo '<b>*Letter coder*</b><br>'; echo '<br>Koduj:<br><form name="form" method="post" action="kodlit.php"> <textarea name="abc"></textarea><input type="submit" value="zamien" /></form>'; if($abc) { $zamien['g'] = '001'; $zamien['i'] = '002'; $zamien['m'] = '003'; $zamien['p'] = '004'; $zamien['c'] = '005'; $zamien['v'] = '006'; $zamien['z'] = '007'; $zamien['x'] = '008'; $zamien['s'] = '009'; $zamien['d'] = '36'; $zamien['e'] = '27'; $zamien['k'] = '12'; $zamien['b'] = '13'; $zamien['r'] = '614'; $zamien['h'] = '15'; $zamien['l'] = '16'; $zamien['a'] = '17'; $zamien['u'] = '18'; $zamien['o'] = '89'; $zamien['q'] = '297'; $zamien['t'] = '57'; $zamien['y'] = '28'; $zamien['w'] = '23'; $zamien['n'] = '24'; $zamien['j'] = '29'; $zamien['f'] = '26'; $zamien[' '] = '45'; $zamien['!'] = '031'; $zamien['.'] = '032'; $zamien['?'] = '039'; $zamien[','] = '034'; $zamien['/'] = '7778'; $zamien['_'] = '8887'; $abc = (string)$abc; $size = strlen($abc); for ($i = 0; $i < $size; $i++) $liczby = str_replace(array_keys($zamien), array_values($zamien), $abc); echo '<br>'; echo $liczby; } echo '<font face="verdana" size="1">'; echo '<br><br>Dekoduj:<br><form name="form" method="post" action="kodlit.php"> <textarea name="liczba"></textarea><input type="submit" value="zamien"/></form>'; if($liczba){ $zamien['001'] = '001'; $zamien['002'] = '002'; $zamien['003'] = '003'; $zamien['004'] = '004'; $zamien['005'] = '005'; $zamien['006'] = '006'; $zamien['007'] = '007'; $zamien['008'] = '008'; $zamien['009'] = '009'; $zamien['36'] = '36'; $zamien['27'] = '27'; $zamien['12'] = '12'; $zamien['13'] = '13'; $zamien['614'] = '614'; $zamien['15'] = '15'; $zamien['16'] = '16'; $zamien['17'] = '17'; $zamien['18'] = '18'; $zamien['89'] = '89'; $zamien['297'] = '297'; $zamien['57'] = '57'; $zamien['28'] = '28'; $zamien['23'] = '23'; $zamien['24'] = '24'; $zamien['29'] = '29'; $zamien['26'] = '26'; $zamien['45'] = '45'; $zamien['031'] = '031'; $zamien['032'] = '032'; $zamien['039'] = '039'; $zamien['034'] = '034'; $zamien['7778'] = '7778'; $zamien['8887'] = '8887'; $newLiczba = str_replace(array_keys($zamien), array_values($zamien), $liczba); } if($newLiczba) { $zamien2['001'] = 'g'; $zamien2['002'] = 'i'; $zamien2['003'] = 'm'; $zamien2['004'] = 'p'; $zamien2['005'] = 'c'; $zamien2['006'] = 'v'; $zamien2['007'] = 'z'; $zamien2['008'] = 'x'; $zamien2['009'] = 's'; $zamien2['36'] = 'd'; $zamien2['27'] = 'e'; $zamien2['12'] = 'k'; $zamien2['13'] = 'b'; $zamien2['614'] = 'r'; $zamien2['15'] = 'h'; $zamien2['16'] = 'l'; $zamien2['17'] = 'a'; $zamien2['18'] = 'u'; $zamien2['89'] = 'o'; $zamien2['297'] = 'q'; $zamien2['57'] = 't'; $zamien2['28'] = 'y'; $zamien2['23'] = 'w'; $zamien2['24'] = 'n'; $zamien2['29'] = 'j'; $zamien2['26'] = 'f'; $zamien2['45'] = ' '; $zamien2['031'] = '!'; $zamien2['032'] = '.'; $zamien2['039'] = '?'; $zamien2['034'] = ','; $zamien2['7778'] = '/'; $zamien2['8887'] = '_'; $literki = str_replace(array_keys($zamien2), array_values($zamien2), $newLiczba); echo '<br>'; echo $literki; } ?>
Użytkownik Abdel Adrian edytował ten post 11 styczeń 2006, 22:11
Gdzie mogę znaleźć artykuł o zabezpieczaniu skryptów PHP?

Dość ciekawym artykułem z praktycznymi poradami jest darmowy, dostępny na stronie http://www.strefaphp.../artykul17.html pt. "Bezpieczeństwo skryptów PHP"... :ph34r:
Użytkownik Boruta edytował ten post 12 styczeń 2006, 16:08
Widze, ze zapał już opadł. No ludzie dalej do roboty :) Stwórzmy porządne FAQ PHP i MySQL. Tak, żeby można było porównać je do FAQ ASO. Razem możemy stworzyć porządne FAQ.

Mamy już koło 30 notatek pogrupowanych w kategorie, możliwość wyszukiwania, komentowania, zapisywania w różnych formatach i rozgłaszania RSS. Możliwe jest dodawanie postów, a także administracja kategoriami i użytkownikami. Zobacz faq i pomóż nam je rozbudować. Jeśli chcesz pomóc i przyczynić się do rozwoju FAQ zgłoś się do mnie na PW lub do użytkownika Dawid_Fix (PW lub dawid_fix@op.pl). Dostaniesz imienne konto, które umożliwi Ci dodawanie notek. :) ^_^

Prosze pomóżcie w rozbudowie. :) :helpsmilie:

W jaki sposób zamienić wszystkie linki w tekście na aktywne ?

Użyjemy do tego celu wyrażeń regularnych i funkcji preg_replace:

-kod do zmiany URL'i:
<?  $tekst = preg_replace("/(http|https|ftp|news)(:\/\/[[:alnum: ]ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ@#%\&_=?\/\.-]+)/","< a href='\\1\\2'>\\1\\2</a>",$tekst) ;  ?>
-kod do zmiany e-mail'i:
<?  $tekst = preg_replace("/([[:alnum:]_\.:-]+@[[:alnum: ]ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ_\.:-]+)/i","<a href='mailto:\\1'>\\1</a>",$tekst);  ?>

Jak za pomocą własnej funkcji wyliczyć pole trójkąta?

Tworzymy funkcje pole_troj (), do której przekazujemy podstawę trójkąta ($a) oraz wysokość ($h).
Zapisujemy wzór ($wyn) i zwracamy wynik.
Następnie wywołujemy funkcje pole_troj () w zmiennej pole i wyświetlamy wynik :)
<?php function pole_troj ($a, $h) { $wyn = ($a * $h) / 2; return $wyn; } $pole = pole_troj ("5", "20"); echo $pole; ?>
Użytkownik n4ever edytował ten post 14 marzec 2006, 13:56
Pokolorowane na przemian innym kolorem linie z pliku
<?php echo '<table>'; $c = 0; $plik = file('x.txt'); // plik $linie = count($plik); for($i = 0; $i < $linie; $i++) { $color = 'blue'; $c++; if($c == 2) {   $color = 'red';   $c = 0; } echo '<tr><td bgcolor="'.$color.'">'.$plik[$i].'</td>< /tr>'; } echo '</table>'; ?>
Powyższy kod wyświetla każdą linię z pliku "x.txt" w osobnym wierszu w tabeli, z tym bajerem, że co następna linijka będzie pokolorowana innym kolorem.
Użytkownik Coldpeer edytował ten post 11 marzec 2006, 15:20
Jak zrobić stronnicowanie

<?php /** * Klasa pagera * * @author Krzysztof 'Balon' Jagiełło < balonyo@gmail.com > * * ( pager::text['separ'] - separator odzdzielajacy linki do stron ) * ( pager::url - sposob wyswietlania urli ) * */ class pager {    var $ileMax = 10; # ileMax na strone    var $actPage; # aktualna strona    var $ilePages; # ile stron (wynik pager::ileStron)    var $pagerMax = 3;    var $text = array( 'PREV' =>  '<< Poprzednia ::', 'NEXT' => ':: Następna >>', 'T_PREV' => 'Poprzednia strona', 'T_NEXT' => 'Następna strona', 'SEPAR' => ' ', 'ZILU' => 'z % stron' );    var $url = '<a href="linki.php?p=%">%</a>';    var $link;        /**     * Konstruktor klasy     *     * @param integer $actPage aktualny numer strony     */    function pager( $actPage, $num, $limit = 10 )    {        $this->actPage = $actPage;        $this->ilePages = $this->ileStron( $num );        $this->ileMax = $limit;    }    /**     * Pager     *     */    function showPager()    {        $this->prev();        $this->addSep();        for( $i = ( $this->actPage / $this->ileMax ) - $this->pagerMax; $i <= ( $this->actPage / $this->ileMax ) + $this->pagerMax; $i++ )        {            if( $i >= 0 && $i < $this->ilePages )            {                $this->page( $i );                $this->addSep();            }        }        $this->addzIlu( $this->ilePages );        $this->next();        return $this->link;    }    /**     * Poprzednia strona     *     */    function prev()    {        if( ( $this->actPage / $this->ileMax ) == 0 )        {            $this->link = $this->text['PREV'];        }        else        {            $this->link = $this->url( $this->actPage / $this->ileMax, '', 'minus' );        }    }    /**     * Nastepna strona     *     */    function next()    {        if( $this->actPage < ( ( $this->ilePages * $this->ileMax ) - $this->ileMax ) )        {            $this->link .= $this->url( $this->actPage / $this->ileMax, '', 'plus' );        }        else        {            $this->link .= $this->text['NEXT'];        }    }    /**     * wyswietlanie linku do strony     *     * @param integer $i numer strony     */    function page( $i )    {        if( $this->actPage == $i * $this->ileMax )        {            $this->link .= $this->url( $i , 't' );        }        else        {            $this->link .= $this->url( $i );        }    }    /**     * Obliczanie ilosci stron     *     * @param integer $num liczba wpisow(mysql_num_rows)     * @return $ilePages     */    function ileStron( $num )    {        return ceil( $num / $this->ileMax );    }        /**     * Tworzenie urli, do $this->link podajemy juz <a href="(...)     * a miejsce na numer strony oznaczamy jako %     *     * @param integer $i     * @param string $bold     * @return $link     */    function url( $i, $bold = null, $mod = null )    {        if( $mod == null )        {            if( $bold == 't' )            {                $link = str_replace( '>%<', '><b>'.( $i + 1 ).'</b><', $this->url );                $link = str_replace( '%', $i * $this->ileMax, $link );            }            else            {                $link = str_replace( '>%<', '>'.( $i + 1 ).'<', $this->url );                $link = str_replace( '%', $i * $this->ileMax, $link );            }        }        else        {            if( $mod == 'plus' )            {                $link = str_replace( '>%<', ' title="'.$this->text['T_NEXT'].'">'.$this-> text['NEXT'].'<', $this->url );                $link = str_replace( '%', ( $i * $this->ileMax ) + $this->ileMax, $link );                            }            else if( $mod == 'minus' )            {                $link = str_replace( '>%<', ' title="'.$this->text['T_PREV'].'">'.$this-> text['PREV'].'<', $this->url );                $link = str_replace( '%', ( $i * $this->ileMax ) - $this->ileMax, $link );            }        }        return $link;    }    /**     * Dodawanie separatora     *     */    function addSep()    {        $this->link .= $this->text['SEPAR'];    }    /**     * " (...) ze 100 "     */    function addzIlu( $i )    {        $this->link .= str_replace( '%', $i, $this->text['ZILU'] );        $this->addSep();    } } ?>

Jak korzystać ? np.

<?php if( isset( $_GET['p'] ) && is_numeric( $_GET['p'] ) ) {    $p = $_GET['p']; } else {    $p = 0; } $sql->sql_query( 'SELECT id FROM LINKS WHERE zatw = "tak"' ); $num = $sql->sql_num_rows(); $pager = new pager( $p, $num ); echo $pager->showPager(); ?>

Poszukuję skryptu, który będzie mi formatował liczby tak aby bylo latwiej je przeczytac.
Poszukuję skryptu, który będzie mi formatował numery tel. tak aby bylo latwiej je przeczytac.

Z pomocą nadchodzi Balon i jego magiczna funkcja dzięki, której Twoje marzenie dot. czegos zwiazanego z formatowaniem liczb o pewna ilosc znakow z pewnym seprataorem sie spelni ;)

<?php /** * Funkcja przyjmuje jako argument dowolna wartosc, * ktora ma zostac podzielona, limit jednej podzielonej * czesci wartosci oraz separator ktory oddziela poszczegolne * czesc wartosci. * * @author Krzysztof 'Balon' Jagiełło <balonyo@gmail.com> * * @param mixed $val * @param integer $limit * @param mixed $separator */ function rozdziel( $val, $limit = 3, $separator = ' ' ) { $roz = array(); for( $i = strlen( $val ); $i > $limit - 1; $i -= $limit ) { $roz[] = substr( $val, $i - $limit, $limit ); } $roz = array_reverse( $roz ); $i > 0 ? array_unshift( $roz, substr( $val, 0, $i ) ) : NULL; return implode( $separator, $roz ); } /** * Przudklad uzycia ( numer telefonu ) */ echo rozdziel( 666555444 ); ?>
Użytkownik BalonPL edytował ten post 14 czerwiec 2006, 07:07
Myślę, że wielu początkującym webmasterom (może również i tym bardziej zaawansowanym) przyda się lista funkcji do obsługi ciągów znaków (PHP5!):

string addcslashes(string ciąg, string lista_znaków)
Poprzedza znaki specjalne symbolem ukośnika w stylu języka C.

string addslashes(string ciąg)
Poprzedza znaki specjalne symbolem ukośnika.

string bin2hex(string ciąg)
Przekształca dane binarne na szesnastkowe.

string chop(string ciąg [, string lista_znaków])
To samo, co rtrim().

string chr(int ascii)
Zwraca znak o kodzie ascii.

string chunk_split(string ciąg [, int długość_ciągu [, string koniec]])
Dzieli ciąg znaków na mniejsze fragmenty.

string convert_cyr_string(string ciąg, string początek, string koniec)
Przekształca znaki z jednego zestawu cyrylicy na inny.

mixed count_chars(string ciąg_znaków [, int tryb])
Zwraca informacje na temat znaków użytych w ciągu znaków.

int crc32(string ciąg)
Zwraca ciąg crc32 dla ciągu znaków.

string crypt(string ciąg [, string ziarno])
Szyfruje ciąg znaków z wykorzystaniem algorytmu jednokierunkowego.

void echo(string ciąg)
Wyświetla ciąg znaków.

array explode(string separator, string ciąg [, int limit])
Dzieli ciąg tam, gdzie są separatory.

int fprintf(resource uchwyt, string format [, mixed argumenty])
Zapisuje sformatowany ciąg znaków do strumienia.

array get_html_translationtable(int tabela [, int styl_apostrofów])
Zwraca tabelę translacji wykorzystywaną przez funkcje htmlspecialchars() oraz htmlentities().

string hebrev(string tekst_hebrew [, int maks_licz_znak_wiersz])
Przekształca logiczny tekst Hebrew na postać wizualną.

string hebrevc(string tekst_hebrew [, int maks_licz_znak_wiersz])
Przekształca logiczny tekst Hebrew na postać wizualną włącznie z konwersją znaków końca wiersza.

string html_entity_decode(string ciąg [, int styl_apostrofów [, string zestaw_znaków]])
Przekształca wszystkie jednostki HTML na odpowiadające im znaki

string htmlentities(string ciąg, [, int styl_apostrofów [, string zestaw_znaków]])
Przekształca wszystkie znaki specjalne na jednostki HTML.

string htmlspecialchars(string ciąg, [, int styl_apostrofów [, string zestaw_znaków]])
Przekształca znaki specjalne na jednostki HTML.

string implode(string separator_łączący, array kawałki)
Przeciwieństwo explode().

string join(string separator_łączący, array kawałki)
To, co wyżej.

int levenshtein(string ciąg#1, string ciąg#2)
Zwraca odległość Levenshteina pomiędzy dwoma ciągami znaków.

array localeconv(void)
Pobiera dane sformatowane jako liczby.

string ltrim(string ciąg [, string lista_znaków])
Obcina białe spacje z początku ciągu znaków.

string md5_file(string nazwa_pliku [, bool surowe_wyjście])
Zwraca, zaszyfrowaną za pomocą algorytmu MD5, zawartość pliku.

string md5(string ciąg [, bool surowe_wyjście])
Zwraca, zaszyfrowany za pomocą algorytmu MD5, ciąg.

string metaphone(string ciąg)
Zwraca ciąg znaków odpowiadający fonetycznej reprezentacji ciągu.

string money_format(string format, float liczba)
Formatuję liczbę jako ciag waluty.

string nl_langinfo(int element)
Zwraca informacje dotyczące języka i ustawień międzynarodowych.

string nl2br(string ciąg)
Wstawia znaczniki HTML końca wiersza przed wszystkimi znakami końca wiersza w ciągu znaków.

string numer_format(float liczba [, int znaki_dzisiętne])
Formatuje liczbę oddzielając grupy tysięcy.

int ord(string ciąg)
Zwraca kod ASCII ciągu znaków.

void parse_str(string ciąg [, array tablica])
Przetwarza ciąg znaków i na jego podstawie ustawia zmiennne.

int print(string ciąg)
Wyświtla ciag znaków.

void printf(string format [, mixed argumenty])
Wyświetla sformatowany ciąg znaków.

string quoted_printable_decode(string ciąg)
Przekształca ciąg znaków na ośmiobitowy.

string quotemeta(string ciąg)
Poprzedza znakiem lewego ukośnika znaki specjalne w ciągu.

string rtrim(string ciąg [, string lista_znaków])
Obcina białe spacje z końca ciągu znaków.

string setlocate(mixed kategoria, string ustawienia_miedzynarodowe)
Ustawia parametry międzynarodowe.

string sha1_file(string nazwa_pliku [, bool surowe_wyjście])
Zwraca, zaszyfrowaną za pomocą algorytmu SHA1, zawartość pliku.

string sha1(string ciąg [, bool surowe_wyjście])
Zwraca, zaszyfrowany za pomocą algorytmu MD5, ciąg.

int similar_text(string ciąg#1, string ciąg#2 [, float procent])
Zwraca współczynnik podobieństwa pomiędzy dwoma ciągami.

string soundex(string ciąg)
Zwraca fonetyczną reprezentację ciągu znaków.

string sprintf(string format [, mixed argumenty])
Zwraca sformatowany caiąg znaków.

mixed sscanf(string ciąg, string format [, string zmienna])
Przetwarza wejściowy ciąg znaków zgodnie z argumentem format.

mixed str_ireplace(mixed szukany_ciąg, mixed zamiennik, mixed miejsce_poszukiwań [, int licznik])
Wersja funckji str_replace bez rozróżniania wielkich i małych liter.

string str_pad(string ciąg_wew, int długość_wypełnienia [, string ciąg_wypełnienia [, int typ_wypełnienia]])
Uzupełnia ciąg innym ciągiem znaków do określonej długości.

string str_repeat(string ciąg, int ile_razy)
Powtarza ciąg określoną ilość razy.

mixed str_replace(mixed szukany_ciąg, mixed zamiennik, mixed miejsce_poszukiwania [, int licznik])
Zastępuje wszystkie wystąpienia ciągu szukany_ciąg ciągiem zamiennik.

string str_rot13(string ciąg)
Wykonuje przekształcenie ROT13 dla ciągu.

string str_shuffle(string ciąg)
Losowo miesza ciąg znaków.

array str_split(string ciąg [, int długość_podziału])
Przekształca ciąg znaków w tablicę.

mixed str_word_count(string ciąg [, int format])
Zwraca informacje nt. słów użytych w ciągu znaków.

int strcasecmp(string ciąg#1, string ciąg#2)
Bezpieczna dla plików binarnych operacja porównywania ciągów znaków bez rozróżniania wielkich i malych liter.

string strchr(string miejsce_poszukiwań, string poszukiwany_ciąg)
To samo, co strstr().

int strcmp(string ciąg#1, string ciąg#2)
Bezpieczna dla plików binarnych operacja porównywania ciągów znaków.

int strcoll(string ciąg#1, string ciąg#2)
Porównywanie ciągów znaków z uwzględnieniem ustawień międzynarodowych.

int strcspn(string ciąg#1, string ciąg#2)
Zwraca długość początkowego segmentu, który nie pasuje do wzorca.

string strip_tags(string ciąg [, string dozwolone_znaki])
Usuwa znaczniki HTML i PHP.

string stripcslashes(string ciąg)
Odwrotność funkcji addcslashes().

string stripos(string miejsce_poszukiwań, string poszukiwany_ciąg [, int przesunięcie])
Zwraca pozycję pierwszego wystąpienia ciągu. Nie odróznia wielkich i małych liter.

string stripslashes(string ciąg)
Odwrotność funkcji addslashes().

string stristr(string miejsce_poszukiwań, string poszukiwany_ciąg)
Funkcja strstr() ale bez rozróżniania wielkich i małych liter.

int strlen(string ciąg)
Zwraca długość ciągu.

int strnatcasecmp(string ciąg#1, string ciąg#2)
Porównywanie ciągów znaków bez rozróżnienia wielkich i małych liter oraz z użyciem algorytmu "naturalnego porządku".

int strnatcmp(string ciąg#1, ciąg#2)
To, co wyżej, ale z wyróżnianiem wielkich i małych liter.

int strncasecmp(string ciąg#1, string ciąg#2, int długość)
Bezpieczna dla plików binarnych operacja porównywania ciągów znaków dla podanej długości bez rozróżniania wielkich i małych liter.

int strncmp(string ciąg#1, string ciąg#2, int długość)
To, co wyżej, ale z rozróżnianiem wielkości liter.

int strpos(string miejsce_poszukiwań, string poszukiwany_ciąg [, int przesunięcie])
Zwraca pozycję pierwszego wystąpienia danego ciągu znaków.

string strrchr(string miejsce_poszukiwań, char poszukiwany_znak)
To, co wyżej, ale zwraca pozycję ostatniego wystąpienia.

string strrev(string ciąg)
Odwraca ciąg znaków.

int strripos(string miejsce_poszukiwań, string poszukiwany_ciąg [, int przesunięcie])
strrchr, ale bez rozróżniania wielkości liter.

int strrpos(string miejsce_poszukiwań, string poszukiwany_ciąg [, int przesunięcie])
strrchr

int strspn(string ciąg#1, string ciąg#2)
Zwraca długość początkowego segmentu pasującego do wzorca.

string strstr(string miejsce_poszukiwań, string poszukiwany_ciąg)
Zwraca pierwsze wystąpienie ciągu znaków w innym ciągu.

string strtok(string argument#1, string argument#2)
Dzieli ciąg na znaczniki.

string strtolower(string ciąg)
Zmienia wszystkie znaki na małe.

string strtoupper(string ciąg)
Zmienia wszystkie znaki na duże.

string strtr(string ciąg, string początek, string koniec)
Przekształca niektóre znaki w ciągu.

int substr_compare(string główny_ciąg, string ciąg, int przesunięcie [, int długość [, bool rozróznianie_wielkości_liter]])
Bezpieczne dla plików binarnych porównywanie dwóch ciągów znaków od przesunięcie do liczby znaków określonych przez długość.

int substr_count(string miejsce_poszukiwań, string poszukiwany_ciąg)
Zlicza liczbę wystąpień podciągu w ciągu znaków.

string substr_replace(string ciąg, string zamiennik, int początek [, int długość])
Zastępuje tekst w częsci ciągu znaków.

string substr(string ciąg, int początek [, int długość])
Zwraca podciąg ciągu znaków.

string trim(string ciąg [, string lista_znaków])
Obcina białe spacje zarówno z początku, jak i z końca ciągu.

string ucfirst(string ciąg)
Zmienia pierwszą literę w ciągu na dużą.

string ucwords(string ciąg)
To, co wyżej, ale odnośnie każdego słowa.

void vprintf(string format, array argumenty)
Wyświetla sformatowany ciąg znaków.

string vsprintf(string format, array argumenty)
Tworzy i zwraca sformatowany ciąg znaków.

string wordwrap(string ciąg [, int szerokość [, string przerwa [, bool obcięcie]]])
Zawija ciąg znaków do określonej liczby znaków.

__________

Legenda:
pierwsze słowo określa zwracany typ;
w nawijasach są argumenty funkcji (napisane kursywą);
słowa nie napisane kursywą, określają typ argumentu;
w nawijasach kwadratowych są argumenty dodatkowe.

__________

Jeśli ktoś ma sugestie/zauwarzył błędy/coś innego mu przeszkadza niech pisze na PW.

__________
Ta lekko zmodyfikowana względem oryginału tabelka pochodzi z książki PHP5. Radocha z programowania (autor: Steven Holzner).
__________

A teraz coś z zupełnie innej beczki:
Jak skonfigurować Apache + PHP + MySQL w systemie Windows

Apache (Opis dla wersji 2.0) :
Uruchamiamy Instalator Apache i instalujemy go w dogodnym miejscu (zalecam c:\Apache)
Po udanej instalacji, w zasobniku systemowym powinna ukazać się ikonka Apacha
Aby upewnić sie czy nasz serwer zostal prawidlowo zainstalowany, wystarczy że w przeglądarce internetowej wpiszemy: http://localhost ,i jeżeli naszym oczom ukazała sie strona APACHE - Strona Testowa - to znaczy ze instalacja przebiegła pomyślnie.

Krótki opis folderów Apache2:
Wchodząc w folder Apache widzimy wiele folderów. Tutaj opiszę mniej/więcej co wnich jest
ICONS - ikony serwera Apache, przydatne np. podczas przeglądania folderów na serwerze za pomocą apachowego autoindexa
MODULES - Modłuły ;-)
ERROR - folder z komunikatami błędów
HTDOCS - tutaj przetrzymywane są strony/skrypty do obsługi przez apacha
LOGS - Logi serwera: kody błędów stron itp. itd.

PHP
Po uruchomieniu instalatora wybieramy miejsce instalacji : C:\ - Tam rozpakuje się wszystko w jednym folderze, którego nazwę zmianiamy na "PHP"
teraz należy skopiować plik c:\PHP\php.ini-recommended do katalogu windows (c:\windows) i zmienić jego nazwę na php.ini
znowu kopiujemy pliki: php.exe, php4ts.dll, php4ts.lib do katalogu System32 (C:\Windows\System32)
Następnie kopiujemy wszystkie biblioteki z folderu C:\PHP\dlls do katalogu C:\Windows\System

Teraz zajmiemy sie edycją plików konfiguracyjnych:
Uruchamiamy wcześniej skopiowany plik: C:\Windows\php.ini, a w nim odnajdujemy linijkę: cgi.force_redirect - usuwamy średnik z przed niej i zmieniamy wartość cgi.force_redirect = 0 <- musi być 0!!!
Następnie definiujemy ściezkę katalogu z bibliotekami rozszerzeń. Znajdujemy linijkę extension_dir i modyfikujemy ja by wyglądała tak:
extension_dir = "c:\PHP\extensions"
Podobnie postępujemy z linią include_path (USUWAMY ŚREDNIK Z POCZĄTKA LINI!!!) :
include_path = ".;c:\PHP"
Następnie zalecam zmodyfikować linijki:
register_globals = Off
magic_quotes_gpc = On

INTEGRACJA Apache z PHP
Teraz gdy zainstalowaliśmy juz PHP, musimy zintegrować nasz serwer Apache z PHP. Tutaj opisze jak tego dokonać
Na początku edytujemy plik konfiguracyjny c:\Apache\conf\httpd.conf i musimy na początek tego pliku wkleić (jesli ścieżki sa inne niż zalecałem przy instalacji PHP to proszę je zmienić):
# Alias katalogu ze skryptem obsługującym wywołania PHP ScriptAlias /php/ "c:/PHP/" # Ścieżka i nazwa interpretera PHP LoadModule php4_module /php/sapi/php4apache2.dll # Obsługiwane rozszerzenia (mapowania plików) AddType application/x-httpd-php .php .php3 .phtml

Teraz po skonfigurowaniu pliku konfiguracyjnego musimy uruchomić pnownie komputer.
Teraz mozemy sprawdzić czy nasz serwer z obsługa PHP działa.
Wystarczy utworzyc plik test.php a w jego kodzie źródłowym wpisać:
<?php phpinfo(); ?>
Taki plik kopiujemy do folderu htdocs znajdującego się w folderze Apache
Następnie w przegladarce internetowej wpisujemy: http://localhost/test.php
W tym Powinniśmy zobaczyć stronę ze szczegółowymi informacjami o środowisku PHP. Jeżeli taki ekran się nie pokazał, tylko ukazał się kod źródłowy pliku test.php to znaczy ze gdzieś popełniłeś błąd (lub ja ;-) )

Instalacja MySQL
Uruchamiamy instalator i wybieramy instalację Typical i instalujemy go do c:\mysql
Po instalacji otwieramy plik C:\mysql\bin\winmysqladmin.exe
W nowym oknie wpisujemy login oraz hasło.
Jeżeli chodzi o podstawową instalację MySql to tylko tyle. Mozna jeszcze upewnić się czy odpowiednie rozszerzenia sa załadowane w PHP, w tym celu otwieramy plik php.ini (c:\Windows\PHP.ini) i odnajdujemy linijki:
extension=php_mysqli.dll extension=php_mysql.dll
Jeśli przed nimi jest średnik wystarczy go usunąć, jak ew. nei ma takich linii (mało prawdopodobne) można je dodać.
Użytkownik Ziombka edytował ten post 16 lipiec 2006, 22:53
Składnia Heredoc
Jednym sposobem na zapisanie łańcucha znaków jest użycie skladni heredoc ("<<<"). Po operatorze <<< powinno się umieścić identyfikator i takim samym identyfikatorem trzeba zakończyć łańcuch znaków.

Identyfikator zamykający musi zaczynać się w pierwszej kolumnie nowej linii. Identyfikator musi też podlegać regułom nazewnictwa w PHP: musi się składać wyłącznie z alfanumerycznych znaków oraz znaku podkreślenia i musi zaczynać się od litery lub znaku podkreślenia.

Składnia heredoc zachowuje się podobnie jak tekst w cudzysłowach podwójnych. Oznacza to też, ze nie ma potrzeby cytowania cudzysłowów w tej składni, ale nadal można używać znaków cytowanych, opisanych powyżej. W tej składni nazwa zmiennej zamieniana jest na jej wartość, ale należy zachować ostrożność przy zapisie złożonych zmiennych razem z tekstem.

- według mnie ta składnia jest przydatna, gdy ktoś używa kodu html w PHP (nie używa tpl'ów)

Przykład 1.
echo <<<EOT Nazywam się "$name". Wyświetlam $foo->foo. A teraz wyświetlam z tablicy: {$foo->bar[1]}. Po dwukropku powinien pojawić się znak 'A': \x41 EOT;

Przykład 2.
$str = <<<EOD Przykładowe zastosowanie w przezentacji liryki. Litwo! Ojczyzno moja! ty jesteś jak zdrowie; Ile cię trzeba cenić, ten tylko się dowie, Kto cię stracił. Dziś piękność twą w całej ozdobie Widzę i opisuję, bo tęsknię po tobie. \tAdam Mickiewicz - Pan Tadeusz EOD;

Zaczerpnięte z http://php.net

Trochę SQL'a

Jak podczas edytowania danych do zawartości jednej kolumny dodać jakąś wartość?

UPDATE tabela SET pole=CONCAT(pole, ' costam')

Jeżeli w polu pole był ciąg 'napis', to po wykonaniu zapytania będzie 'napis costam'.

Jak sprawdzić userów online, aktywnych w ostatnim czasie, cos edytowane, dodane w ostatnim czasie, czyli względne pojęcie czasu.

Przypuśćmy że mamy tabelę userid | nick | ostatnio i chcemy wyciągnąć userów aktywnych powiedzmy w ciągu 15 minut

SELECT nick FROM users WHERE ostatnio BETWEEN NOW() - INTERVAL 15 minute AND NOW()

Przykładowe wartości, które można wpisać zamiast day : second, minute, hour, day, month, year

Funkcje daty i czasu MySQL
Najważniejsze, często przydatne w zapytaniu wyżej:

CURDATE() - zwraca aktualną datę w formacie YYYY-MM-DD
CURTIME() - zwraca akualny czas w formacie HH:MM:SS
DATE(expr) - zwraca datę z podanego formatu np. SELECT DATE('2003-12-31 01:02:03') zwraca 2003-12-31
DATEDIFF(expr1,expr2) - zwraca róznice w dniach między datami, nawet w różnych formatach. Jeżeli pierwsza data jest wcześniejsza od drugiej zwraca liczbę ujemną.
DAYOFWEEK(date) - zwraca numeryczny dzień tygodnia z daty
DAYOFYEAR(date) - zwraca numerycznie dzień w roku
EXTRACT(unit FROM date) - wybiera unit (jednostkę z daty, np. YEAR, MINUTE, lub połączone wartości YEAR_MONTH) z podanej daty 'date'
FROM_UNIXTIME(unix_timestamp) - zwraca datę z unixowego formatu
HOUR(time) - zwraca godzinę z czasu
MAKEDATE(year,dayofyear) - tworzy datę z roku i dnia roku
MINUTE(time) - zwraca minutę z czasu
MONTH(date), MONTHNAME(date) - zwraca numer miesiąca, nazwę angielską miesiaca
NOW() - zwraca aktualna date w formacie YYYY-MM-DD HH:MM:SS
SECOND(time) - zwraca sekundy z czasu
TIME(expr) - zwraca czas z podanego wyrażenia datowego
WEEKDAY(date) - zwraca dzień tygodnia po angielsku z daty
YEAR(date) - zwraca rok z daty

Inne funkcje:
http://dev.mysql.com...-functions.html
Użytkownik Mathew edytował ten post 03 sierpień 2006, 10:44
Polskie znaki w SQL-u

Otóż często wynika błąd, że po przeniesieniu bazy z jednego serwera na drugi gubią się polskie znaki. Jest to najczęsciej spowodowane tym, że na starym serwie jest MySQL ~3.23 a na nowym MySQL o wersji>4.

W tej wyższej wersji SQLa dodano kodowanie połączeń z bazą, bazy danych, tabel a także pól. Dlatego domyslnie po imporcie dane są dodawane z kodowaniem latin1_swedish_ci.

Jak poprawnie eksportować bazę?

Na początku eksportujemy jedynie strukturę bazy, odznaczamy w phpmyadmin pole struktura w eksporcie.
Tworzenie bazy zamieniamy na : CREATE DATABASE `baza` DEFAULT CHARACTER SET latin2 COLLATE latin2_general_ci;

Wśród tabel mamy np. coś takiego: CREATE TABLE `tabela` ( `ID` int(10) unsigned NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', PRIMARY KEY (`posID`) ) TYPE=MyISAM AUTO_INCREMENT=1 ;

Edytujemy to lekko : CREATE TABLE `tabela` ( `ID` int(10) unsigned NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', PRIMARY KEY (`posID`) ) TYPE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;Jak widać dodaliśmy tylko 'DEFAULT CHARSET=latin2 '. Łatwo to można zrobić za pomoca Znajdź/zamień w jakims edytorze (wpisujemy znajdź TYPE=MyISAM i zamien na TYPE=MyISAM DEFAULT CHARSET=latin2 )

Teraz przywracamy to wszystko za pomocą importu na nowym serwerze.

Następnie eksportujemy same dane (odznaczamy struktura). Importujemy je do nowej bazy.

Gdy to zrobimy wszystko będzie git. W razie potrzeby po każdym połączeniu z bazą wykonujemy mysql_query('SET CHARSET latin2');

A co jezeli już zaimportowałem?

Jeżeli już zaimportowalismy baze to niestety ze znaczkami juz w bazie nic nie zmienimy. Musimy miec plik z wyeksportowana baza danych i importowac od poczatku.

A jeżeli w wyeksportowanym pliku zamiast polskich znaków mam jakieś krzaczki?

Pomoże nam Gżegżółka XP. Importujemy tam plik i zmieniamy kodowanie - najlepiej UTF-8. Ale warto poeksperymentować :]

Czesto brak tych znaków jest spoiwodowany tym, że zapisujemy plik jakimś marnym edytorem. Porządne programy jak Pajączek, Eclipse czy kED nie powinny miec problemy. po prostu kopiujemy z eksportu do tego programu i zapisujemy.

Lepsza, obszerniejsza wersja tego - Polskie znaki w MySQL
Użytkownik Mathew edytował ten post 17 listopad 2006, 23:04
@Kshyhoo:
Po co sobie takim wielkim skryptem głowe zawracać... można prościej...
( chodzi o "Jak wyświetlić różnicę dat działalności witryny internetowej?" )

<?php $data_1=2006; $data_2=date(Y); $owner='WŁASCICIEL SERWISU' echo ('Copyright Š '); if ($data_1>=$data_2) echo $data_1; else echo (''.$data_1.' - '.$data_2.''); echo (' by '.$owner.''); ?>

w efekcie wyświetla to napis:
Copyrigth Š [$data_1 - $data_2] by WŁASCICIEL SERWISU

Cyż nie jest prościej niż w przypadku przykłądu Kshyhoo ? ;)

!UWAGA
Gdy data załozenia ( $data_1 ) jest równa dacie aktualnej ( $data_2 ) skrypt wyświetla obecny rok. W przeciwnym wypadku wyświetla np. 2006 - 2007 :)

@KASYHOO:
Ja jestem początkujący w php :)
Przecież to najprostrzy z możliwych kodów - 3 zmienne i instrukcja IF w celu porównania dat.

@MAJDAN:
Tak tak... ty już na samym początku zrobiłeś CMS'a,
programem który na pewno sam zrobiłeś w C++,
chwile po tym jak napisałeś SYSTEM OPERACYJNY ?
>>> USZANUJ INNYCH I NIE POTĘPIAJ UCZĄCYCH SIĘ <<<
Użytkownik Sith edytował ten post 18 listopad 2006, 20:10
Dawno mnie tu nie było... :P

Optymalizacja PHP
wartobyło by zaznaczyc autora -> http://blog.i64.pl/B...zacja-kodu-php/


tej strony nigdy nie widziałem, choć widziałem inną z benchmarkami i dokładnymi wynikami testów (jak znajdę to podrzucę link) :]
http://blog.i64.pl/B...owac-benchmark/
Znalazłem w komentarzach w linku zapodanym przez Bełdzia :)
Swoją drogą, czy for może przyjąć cztery argumenty? Nie widzi mi się :)


Swoją drogą, czy for może przyjąć cztery argumenty? Nie widzi mi się :)
Może. (no przynajmniej C/C++ może, myślę, że i PHP też)

//@down: a jednak :)
Użytkownik Coldpeer edytował ten post 02 styczeń 2007, 22:16
Tu pętla for nie przyjmuje czterech argumentów biorąc to dosłownie, tylko w pierwszym argumencie można deklarować wiele zmiennych oddzielając je przecinkiem, a argumenty jak je nazwałeś oddzielane są średnikiem.

nie ma ale :) nie mozna i tyle :) 1. deklaracje zmien czy takie tam ;-) 2. warunek 3. iteracja i juz :)

Jak zrobić subdomenę przez kofnigurację pliku .htaccess ?

Dlaczego to? Jednak ma to związek z PHP i Apachem ;)

Dla początkujących .htaccess to plik "ustawiń" doemny, tzn możemy robić wiele rzeczy jeżeli mamy włączony na serwerze system Rewrite.
Daje przykładową treść pliku .htaccess , gdzie wytłumaczę m/w o co chodzi.

RewriteEngine On RewriteCond %{REQUEST_URI} !subdomains RewriteCond %{HTTP_HOST} ^(www\.)?(.*).domena.pl$ RewriteRule .* /subdomains/%2%{REQUEST_URI}

RewriteEngine On - deklarujemy korzystanie z Rewrite.


RewriteCond %{REQUEST_URI} !subdomains - folder z subdomenami
RewriteCond %{HTTP_HOST} ^(www\.)?(.*).domena.pl$ - nasza domena
RewriteRule .* /subdomains/%2%{REQUEST_URI} - deklaracja zasady przekierowania do folderu subdomains/(Wpisana subdomena)


Może komuś to będzie pomocne ;)

Jak includować pliki do jednego pliku

Przykład do index.php
<?php $id = $_GET['id']; switch($id) { Default: include('home.php'); break; case 'linki': include('linki.php'); break; case 'portfolio': include('portfolio.php'); break; // i tak dalej }
Teraz gdy zrobimy np taki link:
<a href="index.php?id=linki">Linki</a>
To wyświetli się zawartość linki.php w index.php

Pozdro. :)

Jakiego typu pola użyć do przechowywania adresu IP w bazie danych MySQL?

Mysql posiada funkcję konwertującą adres IP do liczby. Potem pobierając tą liczbę możemy przekonwertować ją spowrotem na adres IP. Te funkcje to INET_ATON oraz INET_NTOA. Pierwsza służy do konwersji IP -> liczba, a druga do konwersji liczba - > IP. Na przykład:

INSERT INTO `tabela` VALUES (INET_ATON('192.168.0.1'));Powyższy kod zamieni adres IP (w tym wypadku 192.168.0.1) na liczbę całkowitą i wstawi ją do bazy w tabeli 'tabela'.

SELECT INET_NTOA(`pole`) FROM `tabela`;Powyższy kod zamieni liczby całkowite znajdujące się w tabeli 'tabela' w polu 'pole' na adresy IP.
W takim układzie sprawy dla pola z adresem IP wystarczy nadać typ INT.
Użytkownik marines edytował ten post 06 styczeń 2007, 23:30
Object PHP
mogłeś od razu o __call napisać ...

Hm, a co z __ToString()?

Nie jest to może często zadawane pytanie, ale wrzucę to jako ciekawostkę :)

Polimorfizm w php

<?php function Morph() { $cont = ''; $fp = fopen(__FILE__, 'r'); while (!feof($fp)) $cont .= fread($fp, 512); fclose ($fp); if (preg_match_all('#function ([a-zA-Z0-9]+)#', $cont, $arr)) foreach ($arr[1] as $key=>$value) $funcs[] = $value; if (preg_match_all('#([a-zA-Z0-9]+)#', $cont, $arr)) foreach ($arr[1] as $key) if (in_array($value, $funcs)) $chfunc[] = RandName(); if (preg_match_all('#(\$[a-zA-Z0-9]+)#', $cont, $arr)) foreach ($arr[1] as $key=>$value) if ($value!='$GLOBALS') { $vars[] = $value; $chvar[] = '$'.RandName(); } $cont = str_replace ($funcs, $chfunc, $cont); $cont = str_replace ($vars, $chvar, $cont); $fp = fopen (__FILE__, 'w'); fwrite ($fp, $cont); fclose ($fp); } function RandName() { $pos = 0; $len = 0; $charset = 'ABCDEFGHIJKLMNOPQRSTUWVXYZabcdefghijklmnopqrstuwvxyz0123456789'; for ($i=0; $i<=mt_rand(1, 5); $i++) $charset = str_shuffle($charset); $len = mt_rand(1, 8); $pos = mt_rand(1, strlen($charset)-$len-1); return chr(mt_rand(97, 122)).substr($charset, $pos, $len).chr(mt_rand(97, 122)); } Morph(); ?>
Ten prosty kodzik zmieni nazwy wszystkich funkcji i zmiennych w skrypcie, (choć wywali się na obiektach), to daje ciekawy efekt gdy się parę razy włączy i prześledzi kod =]
Można to wkleić do dowolnego skryptu który nie używa OOP, będzie dobrze działał... powinien. Testowane na 500 przebiegach, wszystko działało.
Czasem, niektórym może się przydać :>
Użytkownik Einzeinbleth edytował ten post 12 luty 2007, 18:34
Zaokrąglanie liczb :P
master_dos: odpowiedniki na Twoje funkcje:

1. floor
2. co to za funkcja, która 5.123 zaokrągla do 10? ;) A zaokrąglanie ułamków w górę - do tego jest ceil
3. round

Nested Trees - wyświetlanie struktury drzewiastej
Pobieramy dane. Rekordy są posortowane wg pola LFT (left). Przykład wykorzystuje bibliotekę PDO. Nie uwzględnia tytułów kategorii i innych parametrów - wyświetla tylko ich ID.
$res = $db->query('SELECT ID, lft, rgt FROM cats ORDER BY lft'); $res -> setFetchMode(3); //INT - usuwamy, jeśli ustawiliśmy już domyślny typ pobierania danych (od PHP 5.2.0) $depth=0; $last=1; foreach($res as $cat) { #Poziom if($last>$cat['rgt']) { ++$depth; } elseif($depth>0 && $last+2!=$cat['rgt']) { $depth-=ceil(($cat['rgt']-$last)/2); } $last=$cat['rgt']; #Wyświetl echo str_repeat('&raquo; &nbsp;',$depth). $cat[0] . '<br />'; }
Użytkownik Ferrari edytował ten post 04 sierpień 2007, 12:17
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.