Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: tworzenie sklepu internetowego
Forum PHP.pl > Forum > PHP
kujol
Witam, tworzę swój pierwszy silnik pod sklep internetowy, ma to być najprostszy silnik z kilkoma funkcjami, który z czasem zostanie rozbudowany.
W związku z tym mam kilka pytańbiggrin.gif
Tworząc sklep wszystkie informacje o produktach oraz podstronach(które mają jakieś funkcje np. dodawanie produktu) będę trzymał w bazie danych.
Produkty będę dodawał za pomocą dodawania rekordu oraz będę wyświetlał ten rekord w celu uzyskania "efektu" dodanego przedmiotu.
To mniej więcej wiem jak zrobić, lecz problem mam z tym jak dodawać zdjęcia. Np. na stronie jest 10 przedmiotów jeden pod drugim i one mają swoje zdjęcia miniaturki. I właśnie tego na razie nie wiem, dlatego proszę o pomoc:)
nospor
Upload pliku/zdjecia
http://www.php.net/manual/pl/features.file...post-method.php
Wazniak96
Uploaduj pełnowymiarowe zdjęcia(tak jak napisal Nospor) a potem twórz miniaturki za pomocą GD
kujol
Dzięki.
Mam kolejne pytanie:D
Zrobiłem takie coś, że z formularza pobieram dane i je dodaje do jako rekord do bazy. Następnie na jakiejś podstronie wyświetlam ten rekord pięknie w tabelce, jeden pod drugim (jeśli jest ich kilka).
Ale chciałbym zrobić takie coś, aby przy każdym wyświetlonym rekordzie pojawiał się guzik, którym można było by go usunąć i żeby skrypt do tego guzika automatycznie się uzupełniał danymi (jeśli to możliwe), że to właśnie o ten rekord chodzi, a nie o inny, który jest pod nim.
pitu
Wraz z pobranymi danymi pobieraj id. Przyciski możesz zrobić w formie linków, wtedy przypisujesz każdemu np. /delete.php?id=tutaj_pobrane_id

W pliku delete.php tworzysz już sprawdzanie, usuwanie itp.
gitbejbe
jeśli to Twój 1 taki projekt, to zamiast linków możesz też użyć button'a gdzie dla wartosci value podajesz : value="<?php echo $id_produktu; ?>". Wtedy po kliknięciu sprawdzasz postem który button został kliknięty i go osuwasz. Różnica niewielka pomiędzy linkiem, ale trochę bezpieczniej z racji tego, że taki link do usuwania może wpisać każdy w przeglądarce. No ale to już drobiazg bo łatwo to zabezpieczyć : ) sprawdzaj przy każdej operacji w panelu administratora, czy istnieje sesja admina.
kujol
Mam takie coś, ma to za zadanie wyświetlać rekordy z bazy.
Kod
$zapytanie = "SELECT `login` FROM `uzytkownicy`";
$idzapytania = mysql_query($zapytanie);
while ($wiersz = mysql_fetch_row($idzapytania))


echo "<table border=1 bgcolor=green>
<tr><td>$wiersz[0] </td></tr>
</table>"


Można to przerobić w ten sposób, aby to działało, bo w tym jest coś nie tak

Kod
while($wiersz=mysql_fetch_row(mysql_query(SELECT `login` FROM `uzytkownicy`)));


echo "<table border=1 bgcolor=green>
<tr><td>$wiersz[0] </td></tr>
</table>"
hind
@kujol: Nie zadziała, bo za każdym razem będzie nowy handler dla zapytania i w nieskończoność będzie Ci zwracać pierwszy rekord.
zebrowski1073
Zgadzam się z tym że zawsze będzie zwracał pierwszy rekord , ale jak będzie pusta tabela w bazie danych wyświetli ci tabelę z niczym. Ja sprawdzam czy istnieją jakieś dane za pomocą if(is_array($dana)) { i tu wyświetlam dane } coś w tym stylu

  1. $zapytanie = "SELECT `login` FROM `uzytkownicy`";
  2. $dane = mysql_query($zapytanie);
  3. if(is_array($dane) {
  4. wyświetlam tu tablę z danymi jeżeli jest dużo rekordów stronicuję je
  5. }


Ja używam foreach




kujol
Tworze swój skrypt logowania, tylko coś jest nie tak, może ktoś mi wytłumaczyć co robię nie tak, i jak to powinno wyglądać.
1. plik to formularz logowania, nie umieszczam go ponieważ każdy pewnie wie jak takie coś wygląda.
2. plik to logowanie, który wygląda następująco, i to w nim są błędy.

Kod
<?php

mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą");    //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");


$login = $_POST['login'];    //pobieram dane z formularza
$haslo = $_POST['haslo'];


if (isset($_POST['zaloguj']));    //sprawdza czy użytkownik wcisną przycisk    
{
if (!empty($_POST['login']) && !empty($_POST['haslo']);    //sprawdzam czy uzupełniono pola login oraz hasło
{
if (mysql_num_rows(mysql_query("SELECT login, haslo FROM uzytkownicy WHERE login = '".$login."' AND haslo = '".$haslo."' ")) > 0);        //sprawdza czy użytkownik istnieje

session_start( );    //rozpoczynam sesje
$_SESSION['zalogowany'] = 1;
$_SESSION['login'] = $login;
$_SESSION['haslo'] = $haslo;
echo "jestes zalogowany";

elseif (mysql_num_rows(mysql_query("SELECT login, haslo FROM uzytkownicy WHERE login = '".$login."' AND haslo = '".$haslo."' ")) = 0);    //jeśli urzytkownik nie istnieje to wyświetla komunikat
echo "taki uzytkownik nie istnieje";
}
echo "uzupełnij wymagane pola";
}
?>


zebrowski1073
if (mysql_num_rows(mysql_query("SELECT login, haslo FROM uzytkownicy WHERE login = '".$login."' AND haslo = '".$haslo."' ")) > 0); //sprawdza czy użytkownik istnieje

session_start( ); //rozpoczynam sesje
$_SESSION['zalogowany'] = 1;
$_SESSION['login'] = $login;
$_SESSION['haslo'] = $haslo;
echo "jestes zalogowany";

else if (mysql_num_rows(mysql_query("SELECT login, haslo FROM uzytkownicy WHERE login = '".$login."' AND haslo = '".$haslo."' ")) == 0); //jeśli urzytkownik nie istnieje to wyświetla komunikat
echo "taki uzytkownik nie istnieje";

================================================================================
==========

Powinno być :


  1. session_start( ); //rozpoczynam sesje
  2.  
  3. if (mysql_num_rows(mysql_query("SELECT login, haslo FROM uzytkownicy WHERE login = "'.$login.'" AND haslo = ".$haslo)) > 0);
  4. //sprawdza czy użytkownik istnieje
  5. {
  6. $_SESSION['zalogowany'] = 1;
  7. $_SESSION['login'] = $login;
  8. $_SESSION['haslo'] = $haslo;
  9. echo "jestes zalogowany";
  10. }
  11. else echo "taki uzytkownik nie istnieje";

================================================================================
=========

ja używam przenoszenia na stronę wyświetlania odpowiedniego komunikatu np :

else header("Location: /logowanie/"); lub nie ukrywasz kodu php
else header("Location: logowanie.php");
CuteOne
1. Nie trzymaj w sesji hasła...
2. Po co trzymać login?
3. Wystarczy samo id zalogowanego użytkownika

  1. if(!empty($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) { //polecam rozbić na dwa ify
  2.  
  3. $login = mysql_real_escape_string($_POST['login']);
  4. $pass = sha1($_POST['pass']); // lub inne hashowanie
  5.  
  6. $result = mysql_query("SELECT `id` FROM users WHERE `login` = '".$login."' AND `password` = '".$pass."'");
  7.  
  8. if(mysql_num_rows($result)) {
  9.  
  10. $row = mysql_fetch_assoc($result);
  11.  
  12. $_SESSION['logged'] = 1;
  13. $_SESSION['id_user'] = $row['id'];
  14. }
  15. }
kujol
Mam takie coś, co wyświetla mi wszystkie loginy z bazy, a obok nich przyciski do usunięcia. Lecz to coś nie działa, a wygląda następująco:

Plik 1. guzik.php

Kod
$zapytanie = "SELECT `login`, `id` FROM `uzytkownicy`";     //pobieram loginy i id, oraz za pomocą pętli wyświetlam
$idzapytania = mysql_query($zapytanie);
while ($wiersz = mysql_fetch_row($idzapytania))

echo "<table border=1 bgcolor=gray>      //wszystko ładnie w tabelach
<tr>

<td width=40 height=50><b>Login:</b></td>

<td width=80 height=50>$wiersz[0]</td>

<form  action=zniszcz.php method=post>

<input type=submit value=$wiersz[1] />       //przypisuje id przyciskowi

</ Form>

</tr>
<table>"


Plik 2. zniszcz.php

Kod
$usun=$_POST['$wiersz[1]'];      //odbieram id z przycisku

$zapytanie = "DELETE FROM `uzytkownicy` WHERE `id`='$usun'";      //usuwam uzytkownika
$idzapytania = mysql_query($zapytanie);



Plik 1 działa raczej dobrze lecz w pliku 2 tak jakby nie pobiera wartości id.

Jak mogę to poprawić, oraz jak zrobić aby przycisk nie miał swojej nazwy np. 21, czyli pobranego id lecz np. usun.

pitu
W pierwszym pliku zmień przycisk, czyli linijkę:
Kod
<input type=submit value=$wiersz[1] />


na:
Kod
<button name="delete" type="submit" value=".$wiersz[1].">Usuń</button>


W drugim pliku natomiast:
  1. $usun=$_POST['$wiersz[1]'];


na:
  1. $usun=$_POST['delete'];
kujol
Jak można zrobić takie coś aby wyświetlało mi ilość rekordów w bazie.
Chodzi mi o taki efekt, jak w niektórych sklepach w menu z kategoriami (obok nazwy tej kategorii) w nawiasie jest podana ilość produktów.
I jak można zrobić ze tak ujmę automatyczne tworzenie kolejnej strony np. na stronie mam wyświetlonych 10 produktów ale łącznie ich jest 50 i chciałbym aby one były na kolejnej stronie (na każdej po 10). Ja tylko tworzę skrypt dla jednej strony a reszta automatico:D jeśli tak się da.

nerdsmiley.png
Wazniak96
1 używasz funkcji mysql_num_rows

2. To o czym piszesz nazywa się stronnicowanie. Wygoogluj sb te hasło i poczytaj. Możesz skożystać też z klasy którą udostępnił nospor na swojej stronie pod nazwą paginator.
kujol
Wysyłam prościutkie zapytanie o to czy użytkownik o podanym loginie i haśle istnieje, jeśli tak to wyświetla "ok", a jeśli nie to "no", lecz serwer wywala mi error.

Wygląda to tak:
Kod
<?
session_start();

mysql_connect("mysql.cba.pl", "zul_cba_pl", "QWERTY123")or die("Nie można nawiązać połączenia z bazą");    //łącze z bazą danych
mysql_select_db("zul_cba_pl")or die("Wystąpił błąd podczas wybierania bazy danych");

$login = $_POST['login'];    //pobieram dane z formularza
$haslo = $_POST['haslo'];
if(mysql_num_rows(mysql_query("SELECT login haslo FROM uzytkownicy WHERE login = '".$login."' && haslo = '".$haslo."' ")) > 0 );

{
echo "OK";
}

else

{
echo "NO";
}

?>


Gdy usunę tą część:
Kod
else

{
echo "NO";
}


to wyświetla mi tylko ok, a według mnie nie powinno nic, ponieważ wartość jest "=0"
Może ktoś doradzić jak to powinno być.
pitu
po instrukcji if() nie stawia się średnika ";"
kujol
Sprawdzam warunek if() jeśli nie zostanie on spełniony to wykonuje przekierowanie za pomocą header().
I chciałbym na przekierowanej stronie wyświetlić jakiś tekst odnośnie nie spełnionego warunku. Jak to można zrobić? wink.gif
ssstrz
chodzi ci np zeby sobie w warunku zapisac informacje do sesji po przekierowaniu sobie je odczytasz

  1.  
  2. $_SESSION[ 'warunek' ] = 'cos sie dzieje';
kujol
Kiedy zrobię tak:

Kod
$_SESSION['zle'] = Podano_zle_dane;


i to wyświetlę, to wszystko jest ok, ale kiedy już robię tak:

Kod
$_SESSION['zle'] = Podano zle dane;


to jest error.
A ja wolałbym to wyświetlić bez underline "_". Można to jakoś przekształcić smile.gif
kristaps
?

  1. ... = 'Podano zle dane';

webmaniak
Rozumiem że jest jakiś początek, no ale takie coś jak walidacja email - to jest konieczność. Tymczasem co tam nie wpiszę to przechodzi smile.gif
kujol
Znalazłem takie coś:

Kod
function  checkEmail($email) {
if (!preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $email)) {
  return false;
}
return true;
}


Ma to za zadanie sprawdzić poprawność formatu adresu email, ale nie za bardzo wiem jak to połączyć z plikiem "rejestracja.php", który jest powyżej. Może mnie ktoś nakierować smile.gif
kristaps
Obsłużysz to zwykłymi warunkami if/else.
ssstrz
daj tam gdzie masz warunki gdzie sprawdza wszystkie pola, a zamiast wyrazen regularnych lepiej uzyc gotowca
  1. filter_var($email, FILTER_VALIDATE_EMAIL)
kujol
Małe modyfikacje systemu logowania, teraz powinno być lepiej. Dodałem filtrowanie danych, Hashowanie hasła, sprawdzanie budowy adresu email, loginu i hasła.
Demo dostępne tutaj
Całość można pobrać tutaj, jeśli komuś się przyda
Wygląda to tak:

index.php

Kod
<?php
session_start();

mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą");    //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");

echo "<center>$_SESSION[zle]</center>";
unset($_SESSION['zle']);

echo "<center>$_SESSION[wymagane]</center>";
unset($_SESSION['wymagane']);

echo "<center>$_SESSION[uzupelnij]</center>";
unset($_SESSION['uzupelnij']);

echo "<center>$_SESSION[dostep]</center>";
unset($_SESSION['dostep']);

echo "<center>$_SESSION[logut]</center>";
unset($_SESSION['logut']);


?>
<html>
<center>
<form method="POST" action="logowanie.php">
<b>login:</b><input type="text" name="login"><br />
<b>haslo:</b><input type="password" name="haslo"><br />
<input type="submit" value="zaloguj się" name="zaloguj"><br />
</form>
<b>Jesli nie jesteś zalogowany kliknij </b><a href="formularz.php"><b>tutaj</b></a>
</center>
</html>


logowanie.php

Kod
<?
session_start();    //rozpoczyna sesję

mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą");    //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");

function filtruj($filtracja)

{
if(get_magic_quotes_gpc())

$filtracja = stripslashes($filtracja);     //usuwa slashe

return mysql_real_escape_string(htmlspecialchars(trim($filtracja)));    // usuwa spacje, tagi html oraz niebezpieczne znaki
}

$login = filtruj($_POST['login']);        //pobiera dane z formularza
$haslo = filtruj($_POST['haslo']);

if (isset($_POST['zaloguj']))    //sprawdza czy użytkownik wcisną przycisk zaloguj    

if(!empty($_POST['login']) AND !empty($_POST['haslo']))    //sprawdza czy użytkownik wypełnił wszystkie pola

if (mysql_num_rows(mysql_query("SELECT login haslo FROM uzytkownicy1 WHERE login = '".$login."' && haslo = '".md5($haslo)."' ")) > 0 )        //sprawdza czy użytkownik o podanym loginie i haśle istnieje w bazie

{
$_SESSION['zalogowany'] = '1';        //zapisuje sesję
$_SESSION['login'] = $login;
header("Location: dziala.php");
}

else    //jeśli użytkownik o podanym loginie i haśle nie istnieje wykonuje instrukcje

{
$_SESSION['zle'] = 'Podano zle dane';
header("Location: index.php");
}

else    //jeśli użytkownik nie wypełnił wszystkich pól

{
$_SESSION['wymagane'] = 'Wypełnij wszystkie pola';
header("Location: index.php");
}

else    //jeśli ktoś próbuje wejść na stronę z adresu

{
$_SESSION['uzupelnij'] = 'Najpierw uzupelnij wszystkie pola';
header("Location: index.php");
}

?>


formularz.php

Kod
<?
session_start();

mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą");    //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");

echo "<center>$_SESSION[uzupelnij]</center>";
unset($_SESSION['uzupelnij']);

echo "<center>$_SESSION[wymagane]</center>";
unset($_SESSION['wymagane']);

echo "<center>$_SESSION[adres]</center>";
unset($_SESSION['adres']);

echo "<center>$_SESSION[log]</center>";
unset($_SESSION['log']);

echo "<center>$_SESSION[has]</center>";
unset($_SESSION['has']);

echo "<center>$_SESSION[zle]</center>";
unset($_SESSION['zle']);

echo "<center>$_SESSION[email]</center>";
unset($_SESSION['email']);

echo "<center>$_SESSION[haslo]</center>";
unset($_SESSION['haslo']);

echo "<center>$_SESSION[dodano]</center>";
unset($_SESSION['dodano']);
?>

<html>
<center>
<form method="POST" action="rejestracja.php">
<b>Twoj login:</b><input type="text" name="login"><br />
<b>Twoje haslo:</b><input type="password" name="haslo"><br />
<b>Powtorz haslo:</b><input type="password" name="haslo1"><br />
<b>Adres email:</b><input type="text" name="email"><br />
<input type="submit" value="zarejestruj się" name="zarejestruj"><br />
</form>
<b>Powrot na strone logowania </b><a href="index.php"><b>tutaj</b></a>
</center>
</html>


rejestracja.php

Kod
<?php
session_start();

mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą");    //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");

function filtruj($filtracja)

{
if(get_magic_quotes_gpc())

$filtracja = stripslashes($filtracja);     //usuwa slashe

return mysql_real_escape_string(htmlspecialchars(trim($filtracja)));    // usuwa spacje, tagi html oraz niebezpieczne znaki
}

$login=filtruj($_POST['login']);    //pobiera dane z formularza
$haslo=filtruj($_POST['haslo']);
$haslo1=filtruj($_POST['haslo1']);
$email=filtruj($_POST['email']);

if (isset($_POST['zarejestruj']))        //sprawdza czy użytkownik wcisną przycisk zarejestruj    

if (!empty($_POST['login']) AND !empty($_POST['haslo']) AND !empty($_POST['haslo1']) AND !empty($_POST['email']))    //sprawdza czy zostały uzupełnione wszystkie pola

if(preg_match('/^[a-zA-Z0-9\.\-_]+\@[a-zA-Z0-9\.\-_]+\.[a-z]{2,4}$/D', $_POST['email']))    //sprawdza poprawność struktury adresu email

if(preg_match('/^[a-zA-Z0-9\-_]{4,30}$/D', $_POST['login']))        //sprawdza poprawność struktury loginu

if(preg_match('/^[a-zA-Z0-9\-_]{6,30}$/D', $_POST['haslo']))        //sprawdza poprawność struktury hasła

if ($haslo == $haslo1)        //sprawdza czy podane chasła są takie same

if (mysql_num_rows(mysql_query("SELECT email FROM uzytkownicy1 WHERE email = '".$email."' ")) == 0 )    //sprawdza czy użytkownik o podanym adresie email istnieje

if (mysql_num_rows(mysql_query("SELECT login FROM uzytkownicy1 WHERE login = '".$login."' ")) == 0 )    //sprawdza czy użytkownik o podanym logonie  istnieje
    
{
mysql_query("INSERT INTO `uzytkownicy1` (`login`,`haslo`,`email`) VALUES ('".$login."','".md5($haslo)."','".$email."')");        //zapisuje do bazy    
$_SESSION['dodano'] = 'Dodano pomyslnie';
header("Location: formularz.php");
}

else
{
$_SESSION['haslo'] = 'Uzytkownik o podanym loginie juz istnieje';
header("Location: formularz.php");
}


else

{
$_SESSION['email'] = 'Uzytkownik o podanym adresie email juz istnieje';
header("Location: formularz.php");
}

else

{
$_SESSION['zle'] = 'Hasla nie sa identyczne';
header("Location: formularz.php");
}

else
{
$_SESSION['has'] = 'Haslo jest za krotkie, lub zawiera nie dozwolone znaki<br />( min. 6 max. 30 znakow, wtym - i _ )';
header("Location: formularz.php");
}

else
{
$_SESSION['log'] = 'Login jest za krotki, lub zawiera nie dozwolone znaki<br />( min. 4 max. 30 znakow, wtym - i _ )';
header("Location: formularz.php");
}

else
{
$_SESSION['adres'] = 'Nie poprawny adres email';
header("Location: formularz.php");
}

else

{
$_SESSION['wymagane'] = 'Wypełnij wszystkie pola';
header("Location: formularz.php");
}

else

{
$_SESSION['uzupelnij'] = 'Najpierw uzupelnij wszystkie pola';
header("Location: formularz.php");
}
?>


dziala.php (jakaś strona dla zalogowanych)

Kod
<?
session_start();

if($_SESSION['zalogowany'] == 1)
{
echo "Witaj $_SESSION[login]<br />Tu maja dostep tylko zalogowani<br /><a href=wyloguj.php>Wyloguj się</a>";
}

else
{
$_SESSION['dostep'] = 'Nie masz prawa dostepu';
header("Location: index.php");
}
?>


wyloguj.php

Kod
<?
session_start();

if(isset($_POST['wyloguj']))

$_SESSION['zalogowany'] = '0';
session_destroy();

header("Location: logut.php");
?>


logut.php

Kod
<?
session_start();

$_SESSION['logut'] = 'Zostałeś wylogowany';
header("Location: index.php");
?>


Jak można wyświetlić np. 5 najnowszych rekordów z bazy.
Mam pole z datą, lecz rekordy ustawiają się w bazie w dół, czyli najnowsze na dole. I dlatego nie mogę ich wyświetlić poprzez
dodanie
Kod
LIMIT 5

ponieważ to mi pokaże te pierwsze, czyli ostatnie.
Można to jakoś zmienić?
toffiak
Tak można proszę poszukać pod frazą "mysql order by"
kujol
W bazie mam zapisane kategorie np. 'Dom i AGD', jeśli to prześlę za pomocą GET i wyświetlę to pojawia mi się samo 'Dom' ponieważ jest to napisane ze spacjami.
Gdy natomiast zmienię nazwę kategorii na 'Dom_i_AGD' to wtedy wyświetla mi się cała nazwa. Czy istnieje możliwość usunięcia '_' już po odebraniu danych?

@
Działa to mniej więcej tak po kliknięciu w kategorie Komputery lub Dom_i_AGD:
Efekt
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.