Forlumarz Rejestracyjny z bazą Mysql


(Wojtik3) #1

Witam!

Jestem grafikiem i z php nie mam wiele wspólnego, jednak dostałem wyjątkowo zadanie stworzenia forlumarza rejestracji korzystającego z bazy danych oraz czegoś w stylu panelu do wyświetlania tych danych... Sam stworzyłem coś takiego:

Formularz:

Pierwsze imię: 


Drugie imię: 


Telefon stacjonarny: 


Telefon komórkowy: 


Fax: 


E-mail: 


strona WWW:

Skrypt wrzucający do bazy:

<?

$username="user";

$password="pass";

$database="basename";


$nip=$_POST['nip'];

$pesel=$_POST['pesel'];

$phone=$_POST['phone'];

$mobile=$_POST['mobile'];

$fax=$_POST['fax'];

$email=$_POST['email'];

$web=$_POST['web'];


mysql_connect(localhost,$username,$password);

@mysql_select_db($database) or die("Nie znaleziono bazy danych");


$query = "INSERT INTO dane VALUES ('','$nip','$pesel','$phone','$mobile','$fax','$email','$web')";

mysql_query($query);


mysql_close();

?>

No i coś nie działa... Hmm Generalnie chodzi o to żeby osoba wpisała swoje dane, dane mają się pojawić w bazie danych a później przy pomocy jakiegoś skryptu/strony (Nie mam pojęcia jak to zrobić) admin mógl wejść, będą wyświetlały się imiona i nazwiska a po kliknięciu wyświetli się reszta informacji o osobie...

Nie wiem czy jest to duży problem, sam z php nie mam nic wspólnego nie potrafie tego ocenić, w zamian mogę zająć się topem na strone lub stworzyć design...

Z góry dziękuje za pomoc...


(flaszer) #2

1) sprawdzaj sobie, czy w ogóle się połączyłeś z bazą

2) utworzyłeś sobie odpowiednią bazę i tabelki na localhoscie? bo to tak jakbyś wrzucał dane "do nikąd"

3) zawsze czytaj jakie Ci błędy wyrzuca

EDIT: sorki, popatrzyłem pobieżnie. W formularzu musisz w ogóle zdefiniować takie cuś jak

, tak samo w pliku PHP musisz sprawdzać, kiedy te dane ma wrzucać do bazy, czyli w Twoim przypadku zmieniasz button na

Potem tylko

if(isset($_POST['send']) {

//teraz łaczysz sie i wrzucasz dane

}

(adpawl) #3

co do inserta, to może zajść konieczność zadeklarowania dodawanych pól:

mysql_query("INSERT INTO tabela (x, y, z) VALUES ('$x','$y','$z')");

Ponadto radził bym filtrować otrzymane z formularza zmienne, poczytaj o wyrażeniach regularnych (np. preg_match http://pl2.php.net/preg_match) -chyba że chcesz żeby ci ktoś rozwalił baze.

funkcjach sprawdzających typ danych http://pl2.php.net/manual/pl/ref.var.php

rzutowaniu typu http://wortal.php.pl/wortal/artykuly/ph ... anie_typow


(Wojtik3) #4

Dobra to ja może napiszę od początku... Troche popracowałem i mam coś takiego:

Plik index:

<?php 

//wczytanie pliku z funkcjami 

  require_once ("funkcje.php"); 

  //rozpoczęcie sesji 

session_start(); 

session_cache_limiter('nocache'); 


  //formularz logowania 

  dodaj_form(); 

?>

Funkcje.php

<?php  


function pol_mysql() 

{ 



//ustawiamy teraz dane naszej bazy  



//ustawiamy polączenie z bazą danych 

$lacz = mysql_pconnect($db_host, $db_user, $db_pass); 

    if(!$lacz) 

    { 

     echo "Wystąpił błąd: Połączenie z bazą nie powiodło się."; 

     exit; } 


//wybieramy bazę  

if(!@mysql_select_db($db_name, $lacz)) { 

echo 'Baza danych chwilowo niedostepna. Przepraszamy.'; 

exit; } 


} 


function wynik_db_do_tablicy($wynik) 

{ 

  $tablica_wyn=array(); 


  for($licznik=0; $rzad=@mysql_fetch_array($wynik); $licznik++) 

    $tablica_wyn[$licznik]=$rzad; 


  return $tablica_wyn; 

} 


function html_url($url, $nazwa) 

{ 

  // wyświetlenie URL-a jako łącza 

?>

<?=$nazwa?> <? } //wyswietla nam pole do zalogowania się, bądź rejestracji :wink: function wy_form_logo() { ?>

| Login: | | Hasło: | | | Rejestracja |

<? } // formularz rejestracji function dodaj_form() { ?>

|

Dodanie nowego użytkownika

| |
| imię: | |
| Drugie imię: | |
| Nazwisko | |
| Nazwisko Rodowe | |
| Imię matko | |
| Imię ojca | |
| Obywatelstwo | |
| Płeć: | Mężczyzna: Kobieta: |
| Stan Cywilny | Żónaty/Żonata Wolny/Wolna |
| Liczba dzieci | |
| |

<? } //dodajemy użytkownika do bazy danych function dodaj_usera($imie, $imie2, $nazwisko, $nazw_rodowe, $imie_matki, $imie_ojca, $obywatelstwo, $plec, $stan_cywilny, $liczba_dzieci) { $polaczenie= pol_mysql(); // sprawdzenie, czy login nie powtarza się $czas = date("j-m-Y-G:i:s"); // umieszczenie usera w bazie danych $zapytanie = "insert into users values ('', '$imie', '$imie2', '$nazwisko', '$nazw_rodowe', '$imie_matki', '$imie_ojca', '$obywatelstwo', '$plec', '$stan_cywilny', '$liczba_dzieci' '$czas')"; $wynik=mysql_query($zapytanie); if($wynik) { echo "

Rejestracja zakończona pomyśllnie

"; echo "

Strona Logowania

"; exit; } return true; } function logowanie($login, $haslo) { $polaczenie= pol_mysql(); // sprawdzenie, czy login nie powtarza się $wynik = mysql_query("select * from users where login='$login'"); if(!$wynik) return "Problem: zapytanie z bazy nieudane"; if (mysql_num_rows($wynik)== 0) { echo "

Niema takiego użytkownika w bazie danych

"; wy_form_logo(); exit; } $tab_user = wynik_db_do_tablicy($wynik); if ($tab_user[0]['haslo'] != $haslo) { echo "

Niepoprawne hasło

"; wy_form_logo(); exit; } $user = $login; //rejestrowanie danych sesji session_register("user"); echo "zalogowany jako: " .$user." , jeste z ".$tab_user[0]['skad'].", data twojej rejestracji to: ".$tab_user[0]['data'].""; echo "Strona o mnie"; } ?> [/code] Rejestracja.php
[code] <? //wczytanie pliku z funkcjami require_once ("funkcje.php"); //rozpoczęcie sesji session_start(); session_cache_limiter('nocache'); //kod PHP if ($login && $plec && $haslo) $wynik = dodaj_usera($imie, $imie2, $nazwisko, $nazw_rodowe, $imie_matki, $imie_ojca, $obywatelstwo, $plec, $stan_cywilny, $liczba_dzieci); else exit; ?>

Wszystko ładnie się odpala kiedy wchodzę w index, wpisuje dane ale otrzymuje:

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\usr\krasnal\www\marek\funkcje.php:163) in c:\usr\krasnal\www\marek\rejestracja.php on line 5

tabela mysql:


(Tom 85) #5

sesje musisz rozpocząć przed rozpoczęciem wysyłania nagłówków czyli np sesion_start(); a potem require_once("funkcje.php");


(Wojtik3) #6
<?php 



  //rozpoczęcie sesji 

session_start(); 

session_cache_limiter('nocache'); 

//wczytanie pliku z funkcjami 

require_once ("funkcje.php"); 


  //formularz logowania 

  dodaj_form(); 

?>

I niestety ciągle:

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\usr\krasnal\www\marek\funkcje.php:162) in c:\usr\krasnal\www\marek\rejestracja.php on line 5


(Tom 85) #7

przecież ci pisze że masz błąd w pliku rejestracja.php a z tego co pokazujesz to zdaje się żę zmieniłeś kolejność w pliku index.php. Czytaj dokładnie błędy generowane przez interpreter php tam wszystko pisze :slight_smile:

... no ale w index.php też był błąd... :smiley:


(Wojtik3) #8
<? 

require_once ("funkcje.php"); 

session_start(); 

session_cache_limiter('nocache');

require_once ("funkcje.php");

if ($login && $plec && $haslo) 

$wynik = dodaj_usera($imie, $imie2, $nazwisko, $nazw_rodowe, $imie_matki, $imie_ojca, $obywatelstwo, $plec, $stan_cywilny, $liczba_dzieci); 

else 

exit; 

?>

I dalej:Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\usr\krasnal\www\wojtek\funkcje.php:162) in c:\usr\krasnal\www\wojtek\rejestracja.php on line 3Jak rozumiem coś z session_start(); ale co? Dobra zrobiłem, wiem że powinno być:

<? 

session_start(); 

session_cache_limiter('nocache');

require_once ("funkcje.php");

if ($login && $plec && $haslo) 

$wynik = dodaj_usera($imie, $imie2, $nazwisko, $nazw_rodowe, $imie_matki, $imie_ojca, $obywatelstwo, $plec, $stan_cywilny, $liczba_dzieci); 

else 

exit; 

?>

I ok żaden błędu nie pokazuje ale w bazie też nic nie zostaje umieszczone? Ja już nie kumam... może da się to zrobić łatwiej?

Niech ktoś mi tylko pokaże jak zrobić formularz z hmm 3 polami różnego rodzaju który prześle do bazy danych informacje z tego pola... ale tez jak zrobić baze która będzie te dane odbierała... i skrypt który będzie do niej wysłał... reszte sobie poradze bo to małpia robota ale z tym skryptem sobie nie radze:/


(Tom 85) #9
<?

require_once ("funkcje.php");

session_start();

session_cache_limiter('nocache');

require_once ("funkcje.php");

przecież w pliku funkcje.php masz cały html (w tym nagłówki) więc musisz go dodać na końcu, tzn za sesion start a tu nie dość że gdyby nie to że używasz funkcji require_once to byś ten plik dodał dwa razy...

<?

session_start();

session_cache_limiter('nocache');

require_once ("funkcje.php");

tak napisz początek pliku rejestracja.php

spoko damy rade... tylko sie nie poddawaj :slight_smile:


(Wojtik3) #10

Dobra mam:

<?

session_start();

session_cache_limiter('nocache');

require_once ("funkcje.php");

$wynik = dodaj_usera($imie, $imie2, $nazwisko, $nazw_rodowe, $imie_matki, $imie_ojca, $obywatelstwo, $plec, $stan_cywilny, $liczba_dzieci); 

require_once ("funkcje.php"); 

?>

I jest ok ale teraz i tak nie dodaje do bazy i jest to chyba wynik złych wpisów odnośnie bazy no i tak: login do bazy root hasło krasnal nazwa bazy: bezrobotni tabela w bazie: dane_osob Co nie gra? bo plik funkcje.php wygląda tak:

<?php  


function pol_mysql() 

{ 



//ustawiamy teraz dane naszej bazy  

$db_host = 'localhost'; 

$db_user = 'root'; 

$db_pass = 'krasnal'; 

$db_name = 'bezrobotni'; 


//ustawiamy polączenie z bazą danych 

$lacz = mysql_pconnect($db_host, $db_user, $db_pass); 

    if(!$lacz) 

    { 

     echo "Wystąpił błąd: Połączenie z bazą nie powiodło się."; 

     exit; } 


//wybieramy bazę  

if(!@mysql_select_db($db_name, $lacz)) { 

echo 'Baza danych chwilowo niedostepna. Przepraszamy.'; 

exit; } 


} 


function wynik_db_do_tablicy($wynik) 

{ 

  $tablica_wyn=array(); 


  for($licznik=0; $rzad=@mysql_fetch_array($wynik); $licznik++) 

    $tablica_wyn[$licznik]=$rzad; 


  return $tablica_wyn; 

} 


function html_url($url, $nazwa) 

{ 

  // wyświetlenie URL-a jako łącza 

?>

<?=$nazwa?> <? } //wyswietla nam pole do zalogowania się, bądź rejestracji :wink: function wy_form_logo() { ?>

| Login: | | Hasło: | | | Rejestracja |

<? } // formularz rejestracji function dodaj_form() { ?>

|

Dodanie nowego użytkownika

| |
| imię: | |
| Drugie imię: | |
| Nazwisko | |
| Nazwisko Rodowe | |
| Imię matko | |
| Imię ojca | |
| Obywatelstwo | |
| Płeć: | Mężczyzna: Kobieta: |
| Stan Cywilny | Żónaty/Żonata Wolny/Wolna |
| Liczba dzieci | |
| |

<? } //dodajemy użytkownika do bazy danych function dodaj_usera($imie, $imie2, $nazwisko, $nazw_rodowe, $imie_matki, $imie_ojca, $obywatelstwo, $plec, $stan_cywilny, $liczba_dzieci) { $polaczenie= pol_mysql(); // sprawdzenie, czy login nie powtarza się $czas = date("j-m-Y-G:i:s"); // umieszczenie usera w bazie danych $zapytanie = "insert into users values ('', '$imie', '$imie2', '$nazwisko', '$nazw_rodowe', '$imie_matki', '$imie_ojca', '$obywatelstwo', '$plec', '$stan_cywilny', '$liczba_dzieci' '$czas')"; $wynik=mysql_query($zapytanie); if($wynik) { echo "

Rejestracja zakończona pomyśllnie

"; echo "

Strona Logowania

"; exit; } return true; } function logowanie($login, $haslo) { $polaczenie= pol_mysql(); // sprawdzenie, czy login nie powtarza się $wynik = mysql_query("select * from users where login='$login'"); if(!$wynik) return "Problem: zapytanie z bazy nieudane"; if (mysql_num_rows($wynik)== 0) { echo "

Niema takiego użytkownika w bazie danych

"; wy_form_logo(); exit; } $tab_user = wynik_db_do_tablicy($wynik); if ($tab_user[0]['haslo'] != $haslo) { echo "

Niepoprawne hasło

"; wy_form_logo(); exit; } $user = $login; //rejestrowanie danych sesji session_register("user"); echo "zalogowany jako: " .$user." , jeste z ".$tab_user[0]['skad'].", data twojej rejestracji to: ".$tab_user[0]['data'].""; echo "Strona o mnie"; } ?> [/code]


(Wojtik3) #11

Hmm ja chyba nie rozumiem problemu z bazami danych... Powiem od początku o co chodzi... ma być formularz pytający usera o dane, kiedy user to wpisze dane mają zapisać się w bazie danych, tak żebym mógł sobie później je odczytać przez strone... ehh wiem że to nie jest nic skomplikowanego ale jak na głowe grafika pierwsza styczność z php to już za dużo..:confused:


(Tom 85) #12

wydaje mi się że tu jest błąd jeszcze...

$polaczenie= pol_mysql();

ale funkcja pol_mysql() nic nie zwraca.... w funkcji pol_mysql() dopisz jeszcze na końcu wiersz:

return $lacz;

.... acha i pousuwaj te @ bo jak będziesz miał błąd to nie będzie ci go wyświetlało.... na etapie tworzenia skryptu to tylko przeszkadza bo ukrywa wyświetlanie błędów.....