Pary_anime
Wrzucam tu rzeczy, które będą, a przynajmniej moga być później potrzebne. Nie chcę by to gdzieś uleciało.
Innych też do tego zachęcam.
Często chcemy, by elementy na stronie ulegały częstym zmianom, tj. odswiezaly się w miarę często. Można to wykorzystać na wiele sposobów, chociażby do rotacyjnego wyswietlania się banerów.
Najlepiej taki element umiescic w ramce pływającej (ostatnio spotkałem nazwę lokalnej).
Syntax dla ramki pływającej (jeśli ktoś zapomniał):
Cytat:<iframe src="sciezka_dostepu_do_strony" width="100" height="100" name="nazwa_ramki" id="id_dla_ramki" class="klasa_dla_ramki" frameborder="0" scrolling="no" marginwidth="0" marginheight="0" hspace="0" vspace="0">
Jakaś treść. Tak na wszelki wypadek.
</iframe>
Proszę zwrócić uwagę na wartości frameborder, scrolling, marginwidth i marginheight. Wartości hspace i vspace też są istotne!
Po tych przygotowaniach określamy wielkość banera. Dla banera 400x60
width i heigh przybiorą odpowiednio wielkości 400 i 60.
Dla parametru src określamy nazwę ładowanego pliku z rozszerzeniem wykonywalnym, np. baner.php
Kod wywołujący ramkę pływającą umieszczamy w dokumencie nadrzędnym - nie musi być *.php. Będzie on miał taką mniej więcej treść:
codeDivStart() <iframe src="element.php" width="400" height="60" name="elementy" id="id_elementy" class="klasa_elementy" frameborder="0" scrolling="no" marginwidth="0" marginheight="0" hspace="0" vspace="0">
Elementy. </iframe>
Teraz przystepujemy do budowy skryptu. Jesli to jest system banerowy, to problem mamy z głowy. W innym przypadku wstawiamy coś takiego:
----------------------------------------------------
CONTENT -> określa częstoliwość odświeżania strony
ze skryptem podany w sekundach -
w naszym przykłądzie co 30 sekund
----------------------------------------------------
codeDivStart() <head>
<meta HTTP-EQUIV="Refresh" CONTENT="30;
URL=<? echo"$PHP_SELF"; ?>">
</head>
<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
<?
$width="400"; //szerokosc elementu
$height="50"; //długosc elementu
/* -----------------------------------
* Wstawiamy trzy tablice:
* 1) adresy internetowe,
* 2) adresy internetowe do elementu,
* 3) opisy elementów,
*
* Wszystkie w. tablice muszą mieć po tyle samo elementów
* Elementy powinny być oddzielone przecinkami jak w przykładach
----------------------------------- */
/*
* Przykładowa tablica zawierająca adresy internetowe.
*/
$adresy = array
(
"http:// skorosze.pl",
"http:// emedia.pl",
"http:// adres3.pl",
"http:// adres4.pl",
"http:// adres5.pl"
);
/*
* Przykładowa tablica zawierająca adresy internetowe do elementu.
*/
$elementy = array
(
"http:// skorosze.pl/element.gif",
"http:// emedia.pl/element.gif",
"http:// adres3.pl/element.gif",
"http:// adres4.pl/element.gif",
"http:// adres5.pl/element.gif"
);
/*
* Przykładowa tablica zawierająca opisy dla elementow (alt)
* które będą widoczne po najechaniu myszką.
*/
$alt = array
(
"Element do strony skorosze.pl",
"Element do strony emedia.pl",
"Element do strony adres3.pl",
"Element do strony adres4.pl",
"Element do strony adres5.pl"
);
srand(time());
/*
* Zliczamy liczbe elementów w tablicach
*/
$liczba_elementów = count($adresy);
/*
* Losowo wybieramy numer elementu
*/
$numer_elementu = (rand()%$liczba_elementów);
//wyświetlamy element
echo "<a href=\"$adresy[$numer_elementu]\">
<img src=$elementy[$numer_elementu]
alt=\"$alt[$numer_elementu]\" width=\"$width\"
height=\"$height\" border=\"0\">
</a>";
?>
</body>
Istotne dla celów matketingowych i adminisytacyjnych jest możlość poznania odwiedzjących serwis.
PHP posiada kilka funkcji, które w tym celu można wykorzystać. W celu zebrania wiekszej lizby informacji warto poslużyć sie JavaScriptem, dzieki czemu będziemy w stanie zebrać dodatkowe informacje, jak np. o rozdzielczości obrazu i wczytać je do skryptu (jak pokazane poniżej).
Odczytywanie podstawowych zmiennych predyfioniowanych informujących o odwiedzającym i kliencie
Najważniejszymi są chyba jednak następujące zmienne predefiniowane (nadawane automatycznie) :
$HTTP_REFERER - pełny adres dokumentu,
$HTTP_USER_AGENT - sygnatura przeglądarki
$REMOTE_HOST - nazwa hosta z którego się odwołano
$REMOTE_ADDR - adres ip komputera z którego się odwołano
Zmienne mogą być jedynie wyświetlane na stronie, ale również moga być zapisywane w bazie danych w celu stworzenia późniejszych raportów i statystyk.
Poniższy przykład pokazuje jak powinien wyflądać plik jedynie wyświetlajacy informację o odwiedzającym:
codeDivStart() [size=9]<?php
$sygantura_przegladarki =$HTTP_USER_AGENT;
$ip=$REMOTE_ADDR;
/*
* lista z krajami, dla odpowiednicjh końcówek nazwy hosta
*/
$lista_krajow = array("pl" => "Polska", "au" => "Australia",
"de" => "Niemcy", "ru" => "Rosja"); // itd dla innych krajów
/*
* funkcja pobierająca nazwę hosta ze zmiennej $ip
*/
$host=gethostbyaddr($ip);
if
($host != $ip)
{ // sprawdz czy ip ma nazwę swojego hosta
$tld = substr(strrchr($host, "."), 1); /* wytnij z nazwy hosta TLD */
while
(lista_krajow($kod_kraju, $nazwa_kraju) = each($lista))
{ /* przeszukujesz liste karajow */
if ($kod = $tld) $kraj = $nazwa_kraju; // jeżeli kod z listy = TLD przypisz zmiennej $kraj pełną nazwę */
}
}
else $kraj = " dla mnie nieistotny: $REMOTE_ADDR";
if (eregi("opera", $sygantura_przegladarki)) $przegladarka = "Opera";
elseif(ereg("IE", $sygantura_przegladarki)) $przegladarka = "Microsoft Internet Explorer";
elseif (ereg("Mozilla/3.01", $sygantura_przegladarki)) $przegladarka = "Internet Explorer 3";
elseif (ereg("MSIE", $sygantura_przegladarki)) $przegladarka = "Internet Explorer " .substr($sygantura_przegladarki, strpos($sygantura_przegladarki, "MSIE")+5, 1);
elseif (ereg("Mozilla/4.7", $sygantura_przegladarki)) $przegladarka = "Netscape 4";
elseif (ereg("Gecko", $sygantura_przegladarki)) $przegladarka = "Netscape 6";
elseif (eregi("[", $sygantura_przegladarki)) $przegladarka = "Netscape Navigator";
elseif (ereg("lynx", $sygantura_przegladarki)) $przegladarka = "Lynx";
elseif(ereg("Konqueror", $sygantura_przegladarki)) $przegladarka = "Konqueror";
else $przegladarka = "inna";
if(eregi("win", $sygantura_przegladarki)) $system = "Windows";
elseif(eregi("x11", $sygantura_przegladarki)) $system = "X11, Linux/Unix";
elseif(eregi("linux", $sygantura_przegladarki)) $system = "Linux";
elseif(eregi("beos", $sygantura_przegladarki)) $system = "BeOS";
elseif(eregi("mac", $sygantura_przegladarki)) $system = "MacOS";
elseif(eregi("sun", $sygantura_przegladarki)) $system = "SunOS";
elseif(eregi("unix", $sygantura_przegladarki)) $system = "Unix";
elseif(eregi("freebsd", $sygantura_przegladarki)) $system = "FreeBSD";
elseif(eregi("os/2", $sygantura_przegladarki)) $system = "OS/2";
else $system = "inny";
echo "Korzystasz z $przegladarka w systemie operacyjnym $system. Twój adres IP to: $ip. Wszedłeś tu z hosta: $host". Kraj z którego się łączysz to z $kraj";
?>[/size]
Walczymy z proxy
Są jednak sytuację, gdy użytkownik korzysta z sewera PROXY. Wtedy w $REMOTE_ADDR bedzie zwracał IP serwera, a nie osoby łączącej się z serisem.
W przypadku, gdy osoba ta korzysta z anonimowego Proxy, to niewiele da się zrobić. Jednak zazwyczaj proxy wysyła równiez IP klienta.
Warto sprawdzić oś takiego:
codeDivStart() function CheckUserIP() {
if (getenv('HTTP_CLIENT_IP')) $ip = getenv("HTTP_CLIENT_IP");
elseif (getenv('HTTP_X_FORWARDED_FOR')) $ip = getenv("HTTP_X_FORWARDED_FOR");
elseif (getenv('HTTP_X_COMING_FROM')) $ip = getenv("HTTP_X_COMING_FROM");
elseif (getenv('HTTP_FORWARDED_FOR')) $ip = getenv("HTTP_FORWARDED_FOR");
elseif (getenv('HTTP_COMING_FROM')) $ip = getenv("HTTP_COMING_FROM");
elseif (getenv('HTTP_FROM')) $ip = getenv("HTTP_FROM");
else $ip = getenv("REMOTE_ADDR");
return $ip!="" ? $ip : "Unknown IP address";
}
Ale nie ktoś to przetestuje, bo ja po prostu znalazłem takie rozwiązanie i je tu zapisałem.
Wczytywanie danych do skryptu PHP z JavaScriptuMożna to zrobic podobnie jak z informacjami o rozdzielczości.
PHP samodzielnie nic nam tu nie pomoże, gdyż istnieje tu konieczność zebrania informacji pprzez JavaScript. Warto jednak te zebrane informacje połączyć poprzez PHP. Napewno trzeba zmusić przeglądarkę to wysłania tych informacji do nas. Najprościej oszukac przeglądarkę, że ma doczynienie z obrazkiem.
codeDivStart() <script language="javascript">
<!--
document.write("<img width=1 height=1 border=0 src= http:// nazwa_serwera.pl/nazwa_skryptu.php?szerokosc = "+screen.width+" &wysokosc= "+screen.height+" &kolory= "+screen.colorDepth+" >");
//-->
</script>
Co prawda informacje te nie wyświetla się na ekranie klienta, ale zostaną przez nas zebrane i przekazane do skryptu get_res.php w postaci zmiennych $szerokosc, $wysokosci $kolory.
Oczywiście ta metoda pozwoli na zebranie dowolnych danych sczytanych z JavaScriptu.
Informacje o sprzęcie
$PROCESSOR_ARCHITECTURE - architektura procesora,
$PROCESSOR_IDENTYFIER -identyfikator procesora,
$PROCESSOR_LEVEL - poziom procesora,
$PROCESSOR_REVISION - wersja procesora,
Prędzej czy później bedziesz potrzebował rozesłać jakąś wiadomość do dużej grupy użytkowników. Nie pisze tu o spamie, ale chociażby wysłać życzenia świąteczne.
Poniższy przykład zakłada istninie pliku z adresami pocztowymi, np. o nazwie adresy_pocztowe.php
codeDivStart() <form>
temat:<br>
<input type="text" name="temat"><br>
treśc:<br>
<textarea rows="10" name="tresc" cols="60"></textarea><br>
<input type="submit" name="submit" value="wyślij">
</form>
<?php
if($submit)
{
$naglowek = "From: Nazwa serwisu <uzytkownik@nazwa_serwera.pl>";
$adresy = file("adresy_pocztowe.php");
/*
* Tu wstawiamy petle ktorej celem pobieranie danych
* z listy adresowej i wstawiani ich
* do instrucji rozsylajacej poczte.
*/
for ($index=0; $index < count($adresy); $index++)
{
mail("$adresy[$index]","$temat","$tresc","$naglowek");
}
echo"Operacja wykonana. Wiadomość została rozesłana";
}
?>
(Od PHP4)
Tablica asocjacyjna, to tablica do której odwołujemy poprzez jej nazwę komórki, a nie poprzez numer komórki.
W celu odczytania dużej ilości pól można wykorzystać tablicę asocjacyjne
$HTTP_POST_VARS i $HTTP_GET_VARS. Dzięki temy nie ma potrzeby wszystkich zmiennych osobno
codeDivStart() /*
* przykład dla metody POST
*==================
*/
/*
* Aby przeglądać tablice od początku
* na początku musimy ustawić reset
*/
reset ($HTTP_POST_VARS);
while (list($key, $val) = each($HTTP_POST_VARS))
/*
* $key mamy nazwe pola
* $val jego wartosc...
*/
Stronicowanie, czy też pocjowanie wyników nie jest niczym skomplikowanym, gdy się wie jak to zrobić
Kiedy jest to potrzebne? Ano wtedy, gdy się ma kilkadziesiąt elementów i wyświetlenie ich wszytskich zajęłoby godziny
Bardzo przydatna jest LIMIT. np. codeDivStart() SELECT * FROM tabela LIMIT 0,10; zwróci 10 kolejnych rekordóow (wierszy) poczynając od rekordu 0 (w MySQL to jest pierwszy rekord). Dalsze wyniki otrzymamy zmienajac liczby np, na LIMIT 10,10.
Można to zrobić łatwiej.
codeDivStart() $strona = 2;
$mnożnik_rekordów = 10;
SELECT * FROM tabela LIMIT ".($strona*$mnożnik_rekordów ).",$mnożnik_rekordów ");
I tak już mamy serce całego systemu. Przydłaby się jedynie informacja o liczbie stron oraz system nawigacji: poprzednia strona, następna strona, a także lista stron.
Przy liczeniu liczby stron pamiętać należy o zaokrągleniu wyniku w górę:
codeDivStart() $liczba_stron=ceil($liczba_rekordów/$mnożnik_rekordów);
Czas na przycisk poprzednia strona
codeDivStart() if ($strona>0) echo "<a href=stronicowanie.php?strona=".($strona-1).">Poprzednia</a>"; else echo "Poprzednia";
Jak łątwo się domyślić przycisk natępna strona, będzie miał wiele wspólnego z przyciskiem poprzednia strona
codeDivStart() if ($strona<$liczba_stron) echo "<a href=stronicowanie.php?strona=".($strona+1).">Następna</a>"; else echo "Następna";
Przydałoby sie również umożliwienie szybkiego dostepu do pozostałych rekordów. W tym celu tworzymy listę stron, gdzie pierwsza strona będzie miała numer 1:
codeDivStart() for ($i=1; $i<=$liczba_stron; $i++) {
if ($i==$strona-1) echo "$i"; else echo "<a href=stronicowanie.php?page=$i> $i
</a>";
}
Jeśli to powyzej nie było zbyt czytelnie napisane przejrzyj poniższy opis.
lNa początek musisz sprawdzić ile masz wszystkich rekordów. Nastepnie dopiero wyszukujesz rekordy.
l Określasz parametr $strona, dla którego przykładową wartością może być mp. 10 rekordów.
codeDivStart() if(!isset($strona)) {
$od_rekordu = 0;
} else {
$od_rekordu = ($strona-1)*10;
}
l Wyszukujesz rekordy w zależności która to dziesiątka ($strona * 10)
codeDivStart() $result = mysql_query("SELECT * FROM tabela LIMIT $od_rekordu,10");
l Generujesz odnośniki do kolejnych i poprzednich 10 rekordów
codeDivStart() if($strona > 1) {
$prev_page = $strona -1;
echo "<a
href=\"plik.php?strona=".$prev_page."\">Nowsze</a> ] ";
} else {
echo "<br> [ « Nowsze ] ";
}
if($all_records > $strona*10) {
$next_page = $strona+1;
echo " [ <a href=\"plik.php?strona=".$next_page."\">Starsze
»</a> ]";
} else {
echo " [ Starsze » ]";
}
Tu akurat trochę inne rozwiąznie w jednym kawałku, które korzysta z MySQLa, ale można przerobić . W przyladzie wyswietlanych jest 10 wyników na stronę
codeDivStart() <?php
$page = $_REQUEST['page'];
$query = $_POST['query'];
// check to see if $page is set
if (!$page) {
$page = 1;
}
// Change $query to a request super global after the first page.
if($page > 1){
$query = $_REQUEST['query'];
}
//set up some limits
$limit = $page * 10;
$limit = $limit - 10;
//get the count from the database table
$sql_num = mysql_query("SELECT * FROM table WHERE column LIKE %query%");
$num = mysql_num_rows($sql_num);
// query your database for the final results
$sql_results = mysql_query("SELECT something FROM table WHERE column LIKE %query% LIMIT $limit,10");
if($num < 10){
$through = $num;
} else {
$through = $limit + 10;
}
if ($through > $num){
$through = $total;
}
if($page > 1){
$from = $limit +1;
} else {
$from = $limit;
}
if($from == 0){
$from = $from +1;
}
echo "Rezultat wyszukiwania:";
echo "<p align=\"right\">";
if ($page > 1) {
echo "<a
href=\"$PHP_SELF?query=$query&page=".($page -1)."\"><< poprzednia</a> ";
}
if (($num > 10) && (($limit + 10) < $num)) {
echo "<a href=\"$PHP_SELF?query=$query&page=".($page +1)."\">następna >></a>";
}
while(list($results)=mysql_fetch_array($sql_results)){
echo "Rezultat: $results";
}
if ($page > 1) {
echo "<a
href=\"$PHP_SELF?query=$query&page=".($page -1)."\"><< poprzednia</a> ";
}
if (($num > 10) && (($limit + 10) < $num)) {
echo "<a href=\"$PHP_SELF?query=$query&page=".($page +1)."\">następna >></a>";
}
?>
Ogólnie idea jest taka:
codeDivStart() $liczba_wierszy = iles tam;
while ($liczba_wierszy=0, liczba wierszy-1)
wiersz kolejny w kolorze 1;
$liczba_wierszy++;
wiersz kolejny w kolorze 2;
$liczba_wierszy++;
A teraz kilka podobnych sposobów
- lSposób 1
codeDivStart() $result = mysql_db_query ("Zapytanie SQL...");
$i = 1;
while ($row = mysql_fetch_array ($result)) {
if ($i % 2 == 0) {
$kolor = "white";
} else {
$kolor = "gray";
}
echo "<tr bgcolor='$kolor'>";
/* ciag dalszy wyswietlania */
$i++;
}
lSposób 2 (tablica z kolorami)
codeDivStart() $kolor[0] = "white";
$kolor[1] = "black";
i pętle skonstruować następująco:
while ($row = mysql_fetch_array ($result)) {
echo "<tr bgcolor=\"".$kolor[$i % 2]."\">";
/* ciag dalszy wyswietlania */
$i++;
}
lSposób 3 (więcej informacji o sposobie użycia)
codeDivStart() <table border="1" width="100%" cellpadding="3">
<?php
$licznik="0";
for($i=0; 100 > $i; $i++){
$color="#77EF98";
$c++;
if($licznik=="2"){ $color="#7798EF"; $licznik="0"; }
echo"<tr><td bgcolor=\"$color\">".$i."</td></tr>";
}
?>
</table>
Jak widać wiele metod, chociaz mnie się podoba ta z tablicami
codeDivStart() <?php
$wiadomosc = "
<html>
<head>
<title>Tutaj tytuł strony</title>
</head>
<body bgcolor=\"white\">
<h1>Nagałówek wiadomości</h1>
<p>Pierwszy paragraf</p>
<p>Dalsze paradgrafy....</p>
</body>
</html>
";
//Tu określamy Mime i kodowanie strony
//Mime to nic innego jak spis akceptowanych przez serwer typów plików - mime type,
//kodowania chyba nie trzeba tłumaczyć
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
//Zwróć uwagę na kropki znajdujące się w dodatkowych nagłówkach
//nagłówek od kogo wysyłana jest poczta, jeśli to pominiesz
//adresat dostanie pocztę od (najczęściej) nobody@adres.com.pl
$headers .= "From: Skorosze <nobody@skorosze.pl>\r\n";
//dodatkowe nagłówki C.Copy
$headers .= "Cc: kopia@xuz1.com.pl\r\n";
$headers .= "Bcc: druga_kopia@xyz2.com.pl\r\n";
//wysyłamy maila
mail("nobody@skorosze.pl", "temat wiadomości", $wiadomosc, $headers);
?>
W tym celu towrzymy dwa pliki.
-- upload_plikow.php --
codeDivStart() <?
copy($userfile, "$DOCUMENT ROOT/$userfile name")
?>
-- formularz.html --
codeDivStart() <FORM ENCTYPE="multipart/form-data" ACTION="upload_plikow.php" METHOD=POST><br>
<INPUT TYPE="hidden" name="MAX FILE SIZE" value="100000"><br>
Plik do wysłania: <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="OK"><br>
</FORM>
Jako, że istni8eje obawa przed wykorzystaniem takiego pliku do ataku z internetu należy zabezpieczyć sie przed taką sytuacją. Należy umieścic taki plik w katalogu poza dostepem z www, potem skrypt powinien sprawadzać uperawnienia i wysyala plik, tzn wysyla odpowiedni naglowek w typem MIME, otwiera plik i wysyla bajt po bajcie.
np.
codeDivStart() <?
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=downloaded.pdf");
/* ... treść pliku pdf ... */
Inne propozycje
formularz
codeDivStart() <form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
<input name="plik" type="file">
<input type="submit" value="wyslij">
</form>
plik upload.php
codeDivStart() <?php
if (is_uploaded_file($plik)) {
move_uploaded_file($plik, "/usr/local/apache/www/downloads/nowyplik.mp3");
}
else {
echo "Mozliwy atak podczas wysylania";
}
?>
Należy pamiętać o nadaniu wlasciwych uprawnien katalogom, do ktorych kopiowane są pliki.
Czasami trzeba wyciąć tagi i zostawić pomiędzy nimi czysty tekst. Dzięki temu mamy między innymi pewność, że nikt nie załaduje nam czegoś na stronę i nie będzie to wyświetlane wbrew naszym intencjom.
W tym celu używamy funkcji zamiany wyrażeń regularnych.
Przykład pierwszy:
codeDivStart() <?php
$url="jakiś tam tekst <a href=\" bastek.tvs.pl/index.php3\" target=\" blank\"> bastek.tvs.pl/index.php3
</a> jakiś tam tekst";
$url = eregi replace("href=","",$url);
$url = eregi replace("<a[^>]*>","",$url);
$url = eregi replace("</a[^>.]*>","",$url);
echo"$url";
?>
Przykład drugi:
codeDivStart() <?
$text="<font face=\"Tahoma\" color=\"red\">czerwony tekst</font>";
$text = eregi replace("<font[^>.]*>","",$text);
$text = eregi replace("</font[^>.]*>","",$text);
echo"$text";
?>
strtolower() - zmienia cały tekst na małe litery
strtoupper() - zmienia cały tekst na duże litery
ucfirst() - zmienia pierwszą literę tekstu na dużą
ucwords() - zmienia pierwszą literę każdego słowa na dużą
codeDivStart() <?php
//przykład zmiany wiekości liter
$dane="jeSTem wTóRNyM anALFabetĄ.";
echo"<br>";
echo"tekst orginalny: $dane<br><br>";
$dane1=strtolower($dane);
echo"zmiana tekstu na małe litery: $dane1<br>";
$dane2=strtoupper($dane);
echo"zmiana tekstu na duże liter: $dane2<br>";
$dane3=ucfirst($dane);
echo"Pierwsza litera z dużej litery: $dane3<br>";
$dane4=ucwords($dane);
echo"Każde słowo z dużej litery: $dane4<br>";
$dane5=ucfirst($dane1);
echo"<br>Praktyczne wykorzystanie:<br>";
echo"Tekst jak w zdaniu: $dane5<br><br>";
echo"inne:<br>";
$dane5=strrev($dane);
echo"Tekst w odbiciu lustrzanym: $dane5<br>";
?>
filectime();
wyświetla dokładny czas utworzenia pliku
filemtime();
wyświetla dokładny czas modyfikacji pliku
fileatime();
wyświetla datę ostatniego otwarcia pliku
Przykład:
codeDivStart() <?php
$file="jakis_plik.php";
$ct=filectime("$file");
$mt=filemtime("$file");
$at=fileatime("$file");
echo"Data utworzenia pliku: ".date("n-j-Y h:i:s", $ct)."<br>";
echo"Data ostatniej aktualizacji pliku: ".date("n-j-Y h:i:s", $mt)."<br>";
echo"Ostatnio otwarty: ".date("n-j-Y", $at)."";
?>
Uwaga na:
".date("n-j-Y h:i:s", $ct)." . To Ci pozowli na poprawne i czytelne wyświetlenie daty.
sort() - funkcja porządkująca od najmniejszej do największej
rsort() - funkcja porządkująca od największej do najmniejszej
sizeof() - funkcja, która liczy elementy tablicy
Przykład
codeDivStart() <?php
$tablica=array(1,3,2,4,8,9,7,5,6);
//sortujemy od najmniejszej do największej
//wykorzystujemy funkcję sort()
echo"sortowanie od najmniejszej do największej:<br>";
$total = sizeof($tablica);
for($i=0; $total > $i; $i++){
sort($tablica);
echo"$tablica[$i]<br>";
}
//a teraz przesortujemy od największej do najmniejszej
//wykorzystujemy funkcję rsort()
echo"sortowanie od największej do najmniejszej:<br>";
for($i=0; $total > $i; $i++){
rsort($tablica);
echo"$tablica[$i]<br>";
}
?>
Nie jest to sposób na kogoś, kto chce nam rozwalić stronę, ale dla osób, które jedynie pomylili się, albo coś zrobili nieumyślnie to całkowicie wystarczy.
Pomysł polega na tym, że dokonuje się zamiany wyrazów na tablicę i mierzy długości jej elementów.
codeDivStart() <?php
//dzielimy cały wpis i zamieniamy na tablicę
$nowatresc=explode(" ",$tresc);
//liczymy elementy tablicy
$total=sizeof($nowatresc);
//przy pomocy pętli pobieramy każdy element tablicy i mierzymy
for($i=0; $total > $i; $i++){
//jeśli długość któregoś z elementów tablicy przekracza 30 znaków
//zmienna weryfikacja jest pusta
if(strlen($nowatresc[$i])>"30"){
$weryfikacja="";
}}
//jeśli weryfikacja jest pusta informujemy że wystąpił błąd
if ($weryfikacja!="ok") {
echo"Za długi wyraz, chińczyków nie obsługujemy";
}
else {
echo"Wszystko w porządku";
//tu wykonują się dalsze czynności skryptu
//jeśli wszystko jest w porządku
}
?>
Nader często zdarza się, że podczas wywoływania czegokolwiekk z MySQLa pojaiają się błędy i właściwie nie wiadomo dlaczego.
Dobrym pomysłem jest sprawdzanie kodu błędu zwracanego przez funkcję. Wszystkie funkcje dla MySql zwracaja fałsz(false) gdy zakończyły się niepowodzeniem, możesz to sprawdzić korzystajac z wyrażenia logicznego OR:
codeDivStart() $res = mysql_query("SELECT * FROM table") or die(mysql_error());
Dzięki temu, jesli zapytanie do bazy się nie powiedzie, zostanie wyswietlony komunikat błędu .
Czasami serwer nie wyswietla bledow w php gdyż w php.ini jest usunięta ta opcja. W takich sytuacjach można spróbować dopisać:
codeDivStart() <?php
error_reporting(63);
?>
Niestety z polskimi literami są problemy. Duża liczba standardów powoduje, że ciagle istnieje konieczność konwersji kodów do innego standardu.
Przykłądowo (CP1250 to inaczej WIN-1250):
llitera Ą - a6 (kod dla ISO-8859-2) oraz 8c (kod dla CP1250)
llitera Ś - a1 (kod dla ISO-8859-2) oraz a5 (kod dla CP1250)
llitera Ę - af (kod dla ISO-8859-2) oraz af (kod dla CP1250)
llitera Ż - ca (kod dla ISO-8859-2) oraz ca (kod dla CP1250)
llitera Ź - c6 (kod dla ISO-8859-2) oraz c6 (kod dla CP1250)
llitera Ć - ac (kod dla ISO-8859-2) oraz 8f (kod dla CP1250)
Najczęściej używanym sposobem zamiany strony kodowej dla dowolnego tekstu z ISO-8859-2 na CP1250 robi się według ponizswzego wzoru:
codeDivStart() <?php
$tekst =
strtr($tekst,
"\xa6\xa1\xaf\xca\xc6\xac\xd3\xa3
\xb6\xb1\xbf\xea\xe6\xbc\xf3\xb3",
"\x8c\xa5\xaf\xca\xc6\x8f\xd3\xa3
\x9c\xb9\xbf\xea\xe6\x9f\xf3\xb3");
echo $tekst;
?>
Ciekawym pomysłem jest "Konwerter polskich znaczkow". Pamiętam podobny zrobiony jeszcze za czasów Atari ST.
codeDivStart()
function PolConvert($zczego,$doczego,$tekst)
{
$excel=array
(165,198,202,163,209,211,140,175,143,
185,230,234,179,241,243,156,191,159);
$iso88592 = array
(161,198,202,163,209,211,166,172,175,
177,230,234,179,241,243,182,188,191);
$nofont = array
(65,67,69,76,78,79,83,90,90,
97,99,101,108,110,111,115,122,122);
$cp1250 = array
(165,198,202,163,209,211,140,143,175,
185,230,234,179,241,243,156,159,191);
for ($i=0; $i<=18; $i++)
{
$z=$$zczego;
$do=$$doczego;
$tekst=str_replace(Chr($z[$i]),Chr($do[$i]),"$tekst");
}
return $tekst;
}
/*
{
A C E L N O S X Z
a c e l n o s x z}
{Mazovia}
(143,149,144,156,165,163,152,160,161,
134,141,145,146,164,162,158,166,167),
{CSK}
(128,129,130,131,132,133,134,136,135,
160,161,162,163,164,165,166,168,167),
{Cyfromat}
(128,129,130,131,132,133,134,136,135,
144,145,146,147,148,149,150,152,151),
{DHN}
(128,129,130,131,132,133,134,135,136,
137,138,139,140,141,142,143,144,145),
{Latin2}
(164,143,168,157,227,224,151,141,189,
165,134,169,136,228,162,152,171,190),
{IEA}
(143,128,144,156,165,153,235,157,146,
160,155,130,159,164,162,135,168,145),
{LOGIC}
(128,129,130,131,132,133,134,136,135,
137,138,139,140,141,142,143,145,144),
{Microvex}
(143,128,144,156,165,147,152,157,146,
160,155,130,159,164,162,135,168,145),
{ISO_Latin2}
(161,198,202,163,209,211,166,172,175,
177,230,234,179,241,243,182,188,191),
{Cofanki}
( 44, 39, 44, 47, 39, 39, 39, 39, 45,
44, 39, 44, 47, 39, 39, 39, 96, 39),
{Cofanki 1}
( 44, 39, 44, 47, 39, 39, 39, 39, 45,
44, 39, 44, 47, 39, 39, 39, 96, 39),
{CSK-1}
(128,129,130,131,132,133,134,135,136,
160,161,162,163,164,165,166,167,168));
*/
Funkcję wywołuje się poleceniem:
codeDivStart() $tekst=PolConvert("iso88592","cp1250",$tekst);
Niniejsza funkcja dokonuje zamiany polskich liter do standardu unicode:
codeDivStart() function unikod($string)
{
$string = ereg_replace(chr(185), chr(177), $string);
$string = ereg_replace(chr(156), chr(182), $string);
$string = ereg_replace(chr(159), chr(188), $string);
$string = ereg_replace(chr(165), chr(161), $string);
$string = ereg_replace(chr(140), chr(166), $string);
$string = ereg_replace(chr(143), chr(172), $string);
return($string);
}
Najprościej to zapisać dane do tablicy o wdziecznej nazwie tablica_z_formularza[]
codeDivStart() <?php
$liczba = 1000 // przykladowo
for ($x=0;$x<$liczba;$x++)
{
"<input type="text" name="tablica_z_formularza[]">"
}
?>
codeDivStart() <?php
function validEmail($email)
{
if (eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,3}$", $email))
return true;
else
return false;
}
?>
codeDivStart() <?php
$mail1= "jakis@adres.w.sieci";
if(validEmail($email1))
echo "adres poczty elektonicznej prawidłowy";
else
echo "adres poczty elektonicznej nieprawidłowy";
?>
Ponizsza funkcja sprawdza poprawność zapisu zgodnie z szablonem oraz to czy podany host w rzeczywistości istnieje.
codeDivStart() <?php
function verifyEmail($email) {
$wholeexp = '/^(.+?)@(([a-z0-9\.-]+?)\.[a-z]{2,5})$/i';
$userexp = "/^[a-z0-9\~\!\#\$\%\&\(\)\-\_\+\=\[\]\;\:\'\"\,\.\/]+$/i";
if (preg_match($wholeexp, $email, $regs)) {
$username = $regs[1];
$host = $regs[2];
if (checkdnsrr($host, MX)) {
if (preg_match($userexp, $username)) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
?>