programowalnia.info

Nowy mechanizm forum! Problemy i sugestie proszę zgłaszać do administratora
Teraz jest 2010-07-30, 09:12

Wszystkie czasy w strefie UTC + 1




Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
 Tytuł: [PHP, MySQL] FAQ
PostNapisane: 2007-10-06, 11:40 
Offline

Dołączył(a): 2007-10-06, 11:18
Posty: 52
Aby uniknąć tematów typu: Jak połączyć się z bazą, jak dodać rekord? Itd...
Napiszę ten temat...
Chcesz coś napisać to napisz :)

Regulamin FAQ:
1. Pytanie piszemy pogrubionym tekstem, niebieskim kolorem. Przykład:
Pytanie: Jak połączyć się z bazą danych?

2. Odpowiedź normalnie, a kod PHP czy MySQL w ramach code.

To zaczynam od pierwszego pytania...


_______________________

1. Pytanie: Jak połączyć się z bazą danych?

Najlepiej łączyć się za pomocą funkcji.

Napiszmy więc ją...:

Zakładamy plik np: functions.php
Kod funkcji:

Kod:
<?php

function baza_polacz() {
   
    $mysql_serwer = "localhost"; // Tutaj wpisujemy serwer bazy
   
    $mysql_admin = "uzytkownik";  // Administrator bazy
   
    $mysql_pass = "haslo"; // Hasło do bazy
   
    $mysql_db = "baza_danych"; // Nazwa bazy danych
   
    @mysql_connect($mysql_serwer, $mysql_admin, $mysql_pass)
    or die('Błąd podczas łączenia z serwerem');
    // łączymy się z bazą danych
    @mysql_select_db($mysql_db)
    or die('Błąd przy wybieraniu bazy danych');
}

?>


Funkcje wywołujemy następująco:
Kod:
<?

require 'functions.php';
baza_polacz();
// INSTRUCJE...
?>


Sposób inny, łączymy się bezpośrednio w pliku bez użycia funkcji:

Kod:
<?php

$connection = @mysql_connect('localhost', 'uzytkownik', 'haslo')

or die('Błąd połączenia<br />Komunikat: '.mysql_error());

echo "Połączono<br />";

$db = @mysql_select_db('nazwa_bazy', $connection)

or die('Błąd w łączeniu z bazą danych<br />Komunikat: '.mysql_error());

echo "Połączono z bazą danych!";
// INSTRUKCJE...

mysql_close($connection);

?>


2a. Pytanie: Jak dodać rekord do bazy danych?

Służy do tego kod:

Kod:
INSERT INTO tabela (pole1, pole2, pole3) VALUES (tresc1, tresc2, tresc3) WHERE warunek


Prawda że proste?

2b. Jak dodać rekord do bazy za pomocą formularza?

Tworzymy odpowiedni dla nas formularz:


Kod:
<form action="dodaj.php" method="post">
Imię: <input type="text" name="imie"><br/>
Nazwisko: <input type="text" name="nazwisko"><br/>
<input type="submit" value="Dodaj">
</form>


Teraz plik dodaj.php:

Kod:
<?

$imie = $_POST['imie'];
$nazwisko = $_POST['nazwisko'];

// Łączenie z bazą pomijam....

$query = "INSERT INTO spis (imie, nazwisko) VALUES ('$imie', '$nazwisko');";
$result = mysql_query($query);

echo 'Dodano';

?>



3a. Pytanie: Jak pobrać dane z bazy danych?

Struktura zapytania:
Kod:
SELECT pole FROM tabela WHERE warunek ORDER BY sortowanie


W miejsce pole wstawiamy nazwę pola z tabeli (np. imie) lub * (wybieramy wszystko).

W praktyce ma się to tak:

Kod:
<?

// Łączenie z bazą....

$wynik = mysql_query("SELECT * FROM osoby WHERE aktywna='1' ORDER BY id DESC");

while ($row = mysql_fetch_array($wynik)) {

$imie = $row['imie'];
$nazwisko = $row['nazwisko'];

echo $imie;
echo '<br>';
echo $nazwisko;
echo '<br><br';
}
?>


Pojawiła się pętla (wihle) Po co?
A żeby pobrać wszystkie rekordy za jednym razem i je wyświetlić.

3b. Pytanie: Jak wyświetlić ostatnie X rekordów z bazy?

Służy to tego parametr
Kod:
LIMIT X


Trochę praktyki:
Kod:
// Łączenie z bazą....

$wynik = mysql_query("SELECT * FROM osoby WHERE aktywna='1' ORDER BY id DESC LIMIT 5");

// Dalej pętla
?>

To spowoduje wyświetlenie pięciu pozycji.


4. Pytanie: Jak zabezpieczyć stronę hasłem?

Można to zrobić na wiele sposobów, jeden z nich (nie jest za bardzo bezpieczny i nie polecam stosować do przechowywania ważnych informacji):

Tworzymy formularz logowania:
Kod:
<form action="loguj.php" metchod="post">
Nick: <input type="text" name="login"><br/>
Hasło: <input type="password" name="pass"><br/>
<input type="submit" value="Zaloguj">
</form>


Plik sprawdzający poprawność wpisanych danych (loguj.php) powinien mieć mniej więcej taką strukturę:

Kod:
<?

$nick = $_POST['nick']; // Pobieramy nick z formularza
$haslo = $_POST['pass']; // Pobieramy hasło z formularza

if ( $nick == $_POST['nick']; && $haslo == $_POST['pass']; ) { // Sprawdzamy poprawność danych

echo 'Treść dla zalogowanego...';

else {

echo 'Błąd';

}

?>


5a. Pytanie: Jak usunąć rekord z bazy?

Struktura zapytania, pozwalająca na usunięcie rekordu:
Kod:
DELETE pole FROM tabela WHERE warunek


W praktyce:
Kod:
<?

// Łączenie z bazą....

$wynik = mysql_query("DELETE FROM osoby WHERE ban='1'");

?>


5b. Pytanie: Jak usunąć rekord za pomocą linku?

Aby to zrobić, musimy pobrać jakąś istotną informacje (pole) z tabeli i pokierować ją do zapytania, pod postacią wartości warunku... A więc pokażmy rekordy (linki):

Kod:
<?

// Łączenie z bazą....

$wynik = mysql_query("SELECT * FROM osoby WHERE ban='1'");
while ($row = mysql_fetch_assoc($wynik)) {
$id = $row['id'];
$imie = $row['imie'];

echo "<a href='delete.php?id=$id'>$imie - usuń</a>";

}

?>


W ten sposób pokazaliśmy dane z bazy, i przekazaliśmy zmienną id do pliku delete.php...
Plik Delete.php:

Kod:
<?

$id = $_GET['id'];

$wynik = mysql_query("DELETE FROM osoby WHERE id='$id'");

echo 'Usunięto!';

?>


6. Pytanie: Jak zaktualizować rekord?

Struktura zapytania:
Kod:
UPDATE tabela SET pole='tresc1', pole2='tresc2' WHERE warunek


W praktyce wygląda to tak:

Kod:
<?

$imie = "Daniel";
$nazwisko = "XXX";

$wynik = mysql_query("UPDATE osoby SET imie='$imie', nazwisko='$nazwisko' WHERE id=".$_GET['id']."");

echo 'Zaktualizowano';

?>



7. Pytanie: Co to są zmienne i jak ich używać?


Zmienne to coś mniej więcej: zdefiniowana wcześniej wartość, którą możemy wywołać...

Przykład zmiennych:

Kod:
<?
$imie = "Daniel";
$liczba = 1;
?>


Wywołanie zmiennych odbywa się w następujący sposób:
Kod:
<?

echo $imie;
echo $liczba;
echo "$imie - $liczba";

?>


Można z tym kombinować wg. upodobań :)

8. Pytanie: Jak wysłać e-maila z poziomu strony?

Kod:
<?php
if(isset($_POST['tresc'])) { // Jeżeli z formularza przyjdzie tresc
mail('email@odbiorcy.pl','Temat wiadomości','Treść wiadomości...','From: Szczepan Wąs <twoj@email.com>'); // Wysyłamy maila!
?>


To tyle - w kodzie wszystko pisze :]
Aby wysłać maila ze strony trzeba mień włączoną funkcję mail() na serwerze.

9. Pytanie: Jak zrobić licznik odwiedzin strony oparty na plikach tekstowych?

Kod:
<?
$licznik = 'licznik.txt'; // Nazwa pliku z licznikiem
if(!file_exists($licznik)  // Jeżeli plik licznik.txt nie istnieje
{
$plik = fopen($licznik, 'w'); // Utwórz plik licznik.txt
fwrite($plik, '0'); // Zapisz do niego 0
fclose($plik); // Zamknij niepotrzebny już wskaźnik pliku
echo 'Odwiedzin: 0';
}
else
{
$ilosc = file_get_contents($licznik); // Pobierz zawartość pliku licznik.txt
$ilosc++; // Zwiększamy liczbę odwiedzin o jeden
echo 'Odwiedzin: '.$ilosc; // Wyświetlamy liczbę odwiedzin
$plik=fopen($licznik,'w'); // Kasujemy zawartość pliku licznik.txt
fwrite($plik, $ilosc); // Zapisujemy nową liczbę odwiedzin
fclose($plik);
}
?>


Kod utworzy plik licznik.txt i będzie do niego zapisywał odsłony strony :)

10. Pytanie: Jak wylosować losową liczbę?

Struktura kodu wygląda tak:
Kod:
<?

$losowa_liczba = rand(x, y)

?>


X - Liczba minimalna
Y - Liczba maxymalna
Skrypt losuje liczbę z przedziły x i y.

Służy do tego jak widać funkcja rand()
Możemy też napisać:

Kod:
print rand();


Wyświetli to całkiem losową liczbę.
Można to stosować do generowania kodów przy rejestracji :)
Praktyka:

Kod:
<?

$liczba_losowa = rand(100, 999);

print 'Liczba losowa: '.$liczba_losowa;

?>



KOPIOWANIE BEZ MOJEJ ZGODY ZABRONIONE!!!
[/code]


Ostatnio edytowano 2007-10-06, 11:50 przez Sajam, łącznie edytowano 2 razy

Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 2007-10-06, 11:42 
Offline
Avatar użytkownika

Dołączył(a): 2007-09-08, 16:37
Posty: 316
Świetnie napisane wszystko za pierwszym razem zrozumiałem a jak ja za pierwszym razem coś zrozumiem to na prawdę jest dobrze :mrgreen: dostajesz oczywiście CJP, tak dalej! komuś się przydać może :)


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 2007-10-06, 11:47 
Offline
Avatar użytkownika

Dołączył(a): 2007-09-08, 16:38
Posty: 196
Lokalizacja: Kraków
Dobrze napisanie!
Dostajesz CJP


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 2007-10-06, 14:07 
Offline
Avatar użytkownika

Dołączył(a): 2007-09-09, 13:16
Posty: 204
Sajam napisał(a):
$nick = $_POST['nick']; // Pobieramy nick z formularza
$haslo = $_POST['pass']; // Pobieramy hasło z formularza

if ( $nick == $_POST['nick']; && $haslo == $_POST['pass']; ) {


wiesz co?
taki kod to se mzoesz wiesz gdzie wsadzic
to co napisales to to samo co:

Kod:
if ($_POST['nick'] == $_POST['nick']; && $_post['pass'] == $_POST['pass']; ) {


a taki warunek zawsze bedzie spelniony!!!!

_________________
Niedługo rozpoczną się prace nad nPack2
Wszelkie propozycje proszę wpisywać w tym temacie.


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 2007-10-06, 15:17 
Offline

Dołączył(a): 2007-10-06, 11:18
Posty: 52
k@mil napisał(a):
Sajam napisał/a:
$nick = $_POST['nick']; // Pobieramy nick z formularza
$haslo = $_POST['pass']; // Pobieramy hasło z formularza

if ( $nick == $_POST['nick']; && $haslo == $_POST['pass']; ) {


wiesz co?
taki kod to se mzoesz wiesz gdzie wsadzic
to co napisales to to samo co:

Kod:
if ($_POST['nick'] == $_POST['nick']; && $_post['pass'] == $_POST['pass']; ) {


a taki warunek zawsze bedzie spelniony!!!!


No tak :P
To pisałem dość dawno temu na forum o programowaniu :D
Wtedy jeszcze byłem zielony :D


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 2007-10-06, 17:33 
Offline
Avatar użytkownika

Dołączył(a): 2007-09-18, 19:51
Posty: 117
Lokalizacja: Sieradz
Punkt 2b do poprawki. Co się stanie w przypadku wysłania pustego formularza? Wyskoczy błąd? Jaki? PHP? SQL? Lepiej napisać tak:
Kod:
if(isset($_POST["imie"]) $imie = $_POST['imie']; else $imie = "";
if(isset($_POST["nazwisko"]) $nazwisko = $_POST['nazwisko']; else $nazwisko = "";


Dalej w tym punkcie jest:
Kod:
$result = mysql_query($query);
echo 'Dodano';

Co się stanie jeśli będzie błąd w składni (choćby ktoś wpisze w imieniu apostrof? Wyświetli się komunikat "Dodano". Lepiej dać:
[code]if (mysql_query($query)) echo "Dodano"; else echo "Wystąpił błąd";


O spapranym punkcie 4 już wiesz. Miałem napisać przykładowy kod, ale on nie jest wcale najprostszy. Dane usera (login i hasło) pobiera z bazy i stan zalogowania przechowuje w sesji.

Punkt 5. Prawidłowa składnia DELETE wygląda tak:
[code]DELETE FROM tabela WHERE warunek;[/code]
Nie podaje tu się żadnego konkretnego pola, co sugerujesz. Nie da się wyczyścić 1 pola w rekordzie za pomocą DELETE. Do tego potrzebny jest UPDATE.

_________________
Forum numizmatyczne - sekretarz TPZN
Administrator forum monety.pl
Forum Kolekcjonerów Rzeczy Najróżniejszych


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 2007-10-06, 18:38 
Offline

Dołączył(a): 2007-09-09, 17:53
Posty: 220
Lokalizacja: Bruksela
Dobry FAQ.

Punkt CJP leci.


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 2008-08-18, 19:08 
Offline

Dołączył(a): 2007-10-06, 11:18
Posty: 52
FAQ nie polecam już stosować w praktyce ;P Niebezpieczne błędy są tutaj ;x


Góra
 Zobacz profil Wyślij e-mail  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Wszystkie czasy w strefie UTC + 1


Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów

Szukaj:
Skocz do:  
 cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
opisy gg :: portal zdrowie :: sport i turystyka :: katalog dobrych stron :: ciekawostki komputerowe :: prawo i podatki :: Numizmatyka

Przyjazne użytkownikom polskie wsparcie phpBB3 - phpBB3.PL
phpBB SEO