Problem z bazą danych

Wszystko o językach skryptowych takich jak PHP i Perl, serwerach WWW, CGI, bazach danych i języku SQL.
jery0000
Posty: 6
Rejestracja: 06 sie 2014, 20:54:43
Płeć: Niewybrana
User Agent: Chrome Windows

Problem z bazą danych

Post autor: jery0000 »

Witam. Jestem osobą która stara się nauczyć programowania php i mysql. Otóż ostatnio próbowałem zrobić prosty skrypt rejestracji użytkowników który wykorzystywał by bazy danych my_sql. Niestety nie wiem dlaczego moja baza danych nie chce przyjmować żadnych wprowadzanych w nią rekordów (na sprawdzenie tego w poniższym kodzie umieściłem instrukcje if która sprawdza czy w tabeli istnieją jakiekolwiek rekordy). Proszę o pomoc i wyrozumiałość. Oto napisany przeze mnie kod:

Kod: Zaznacz cały

<?php
function spr($c,$e)
{
while ($wiersz=mysql_fetch_row($e))
{
if($c==$wiersz[0])
{
$d=1;
exit;
}
else
{
$d=0;
}
}
return $d;
}
function licz($tekst)
{
$ilosc=strlen($tekst);
return $ilosc;
}
$sql_conn=mysql_connect('mysql.cba.pl','jarus4','poziomd');
mysql_select_db('jarus_cba_pl');
$a='CREATE TABLE ussers_table (id int NOT NULL AUTO_INCREMENT, login char(15), e_mail char(15), haslo char(15), zalogowany bolb, aktywowany bolb, PRIMARY KEY(id))';
$idzza=mysql_query($a);
$login = $_GET['login'];
$mail = $_GET['mail'];
$password = $_GET['password'];
$password2 = $_GET['password2'];
if ($password==$password2)
{
if (licz($password)>=5)
{
if (licz($login)>=5)
{
$zapytanie1= "SELECT `login` FROM `ussers_table`";
$idzzapytanie1=mysql_query($zapytanie1);
if (spr($login,$idzzapytanie1)==0)
{
$zapytanie2= "SELECT `e_mail` FROM `ussers_table`";
$idzzapytanie2=mysql_query($zapytanie2);
if (spr($mail,$idzzapytanie2)==0)
{
$zapytanie3="INSERT INTO `ussers` (`login`,`e_mail`,`haslo`,`zalogowany`,`aktywowany`) VALUES ('$login','$mail','$password','0','0')";
$idzzapytanie3=mysql_query($zapytanie3);
if(mysql_num_rows($idzzapytania) == 0) 
{ 
echo "nie wiem dlaczego ale żadne wartości nie zostały wprowadzone do tabeli";
}
else
{
header('Location:aktywuj.html');
}
}
else
{
header('Location:error_mail.html');
}
}
else
{
header('Location:error_login.html');
}
}
else
{
header('Location:error_login2.html');
}
}
else
{
header('Location:error_password.html');
}
}
else
{
header('Location:error_password2.html');;
}
?>
Przy kolejnych wykonywaniach skryptu usunąłem linijki tworzące tabele (bo w moim mniemaniu ona już przecież istnieje). Nadal istniał ten sam problem co wcześniej.
Awatar użytkownika
Norbitor
Posty: 36
Rejestracja: 20 sie 2014, 20:00:41
Strona na CBA.pl: http://norbitor.cba.pl/
Lokalizacja: Poznań
Płeć: Niewybrana
User Agent: Firefox Windows 1366x768
Kontakt:

Re: Problem z bazą danych

Post autor: Norbitor »

Pierwsze, co mu się rzuca w oczy to nazwa tabeli: ussers - wygląda mi na literówkę.
Druga sprawa, stworzyłeś tabelę ussers_table, z niej pobierasz dane SELECT-em, ale dane próbujesz wpisać do tabeli ussers, czyli do takiej, co nie istnieje. To tak na pierwszy rzut oka.

Po trzecie - gorąco polecam do łączenia się z bazą danych używać klas PDO. Używana przez Ciebie metoda strukturalna jest przestarzała i w przyszłości zniknie z specyfikacji PHP.
Two minutes of thinking can save hours of unnecessary work.
jery0000
Posty: 6
Rejestracja: 06 sie 2014, 20:54:43
Płeć: Niewybrana
User Agent: Chrome Windows 1440x900

Re: Problem z bazą danych

Post autor: jery0000 »

Zmieniłem nazwę tabeli w poleceniu Insert na "ussers_table" niestety problem nadal istnieje.
Awatar użytkownika
Norbitor
Posty: 36
Rejestracja: 20 sie 2014, 20:00:41
Strona na CBA.pl: http://norbitor.cba.pl/
Lokalizacja: Poznań
Płeć: Niewybrana
User Agent: Firefox Windows
Kontakt:

Re: Problem z bazą danych

Post autor: Norbitor »

Z tego, co przeczytałem w dokumentacji PHP, to przy wywoływaniu funkcji mysql_select_db oraz każdym mysql_query w drugim argumencie powinieneś podać identyfikator połączenia, czyli np. w Twoim kodzie będzie to:

Kod: Zaznacz cały

mysql_select_db('jarus_cba_pl', $sql_conn);
// ...
mysql_query($a, $sql_conn);
// i tak dalej
 
Dobrze jest też zamykać drzwi za sobą (kończyć połączenie z bazą), czyli użyć na końcu skryptu funkcji:

Kod: Zaznacz cały

mysql_close($sql_conn); 
Two minutes of thinking can save hours of unnecessary work.
jery0000
Posty: 6
Rejestracja: 06 sie 2014, 20:54:43
Płeć: Niewybrana
User Agent: Chrome Windows 1024x768

Re: Problem z bazą danych

Post autor: jery0000 »

Mój kod wygląda teraz tak niestety nadal nie działa:

Kod: Zaznacz cały

<?php
function spr($c,$e)
{
while ($wiersz=mysql_fetch_row($e))
{
if($c==$wiersz[0])
{
$d=1;
exit;
}
else
{
$d=0;
}
}
return $d;
}
function licz($tekst)
{
$ilosc=strlen($tekst);
return $ilosc;
}
$sql_conn=mysql_connect('mysql.cba.pl','jarus4','poziomd');
mysql_select_db('jarus_cba_pl', $sql_conn);
$a='CREATE TABLE ussers (id int NOT NULL AUTO_INCREMENT, login char(15), e_mail char(15), haslo char(15), zalogowany bolb, aktywowany bolb, PRIMARY KEY(id))';
$idzza=mysql_query($a, $sql_conn);
$login = $_GET['login'];
$mail = $_GET['mail'];
$password = $_GET['password'];
$password2 = $_GET['password2'];
if ($password==$password2)
{
if (licz($password)>=5)
{
if (licz($login)>=5)
{
$zapytanie1= "SELECT `login` FROM `ussers`";
$idzzapytanie1=mysql_query($zapytanie1, $sql_conn);
if (spr($login,$idzzapytanie1)==0)
{
$zapytanie2= "SELECT `e_mail` FROM `ussers`";
$idzzapytanie2=mysql_query($zapytanie2, $sql_conn);
if (spr($mail,$idzzapytanie2)==0)
{
$zapytanie3="INSERT INTO `ussers` (`login`,`e_mail`,`haslo`,`zalogowany`,`aktywowany`) VALUES ('$login','$mail','$password','0','0')";
$idzzapytanie3=mysql_query($zapytanie3, $sql_conn);
if(mysql_num_rows($idzzapytanie3) == 0) 
{ 
mysql_close($sql_conn);
echo "nie wiem dlaczego ale żadne wartości nie zostały wprowadzone do tabeli";
}
else
{
mysql_close($sql_conn);
header('Location:aktywuj.html');
}
}
else
{
mysql_close($sql_conn); 
header('Location:error_mail.html');
}
}
else
{
mysql_close($sql_conn); 
header('Location:error_login.html');
}
}
else
{
mysql_close($sql_conn); 
header('Location:error_login2.html');
}
}
else
{
mysql_close($sql_conn); 
header('Location:error_password.html');
}
}
else
{
mysql_close($sql_conn); 
header('Location:error_password2.html');;
}
?>
Awatar użytkownika
Fineas_Nigellus
Posty: 582
Rejestracja: 08 lis 2012, 17:33:45
Płeć: Niewybrana
User Agent: Opera Windows 1440x900

Re: Problem z bazą danych

Post autor: Fineas_Nigellus »

jery0000 , powiem szczerze, że to jest całkowicie beznadziejnie napisane ;p Jeszcze z każdym error'em odsyłasz do innej strony.

Spróbuj tak (oczywiście musisz dopasować wszystko do swojej bazy danych, i oczywiście w skrypcie musisz dołączyć jakiś plik, w którym łączysz się z bazą) :

Kod: Zaznacz cały

<?php
if (!empty($_POST)){
    if (!empty($_POST['login']) && !empty($_POST['haslo']) && !empty($_POST['haslo2']) && !empty($_POST['email']) && ($_POST['haslo'] == $_POST['haslo2'])){
        $login = vtxt($_POST['login']);
        $haslo = vtxt($_POST['haslo']);
        $haslo2 = vtxt($_POST['haslo2']);
        $email = vtxt($_POST['email']);
            if ($login != $haslo){
                if (strlen($_POST['login']) >= 3 && strlen($_POST['haslo']) >= 3) {
                    if (ctype_alnum($login)){
                        if (filter_var($email,FILTER_VALIDATE_EMAIL)){
                            $przypisano = row("SELECT id FROM users WHERE email='$email'");
                            if($przypisano) echo 'Podany E-mail jest już przypisany do innego użytkownika.';
                            else {
                                $haslo = md5($haslo);
                                $istnieje = row("SELECT id FROM users WHERE login='$login'");
                                if ($istnieje) echo 'Użytkownik z takim loginem już istnieje.';
                                else {
                                    mysql_query("INSERT INTO users (login, haslo, email, register_data) VALUES ('$login', '$haslo', '$email', now())");
                                    echo "Rejestracja przebiegła pomyślnie.<br>";
                                }
                                }
                            } else echo 'To nie jest poprawny adres e-mail.';
                        } else echo 'To nie jest poprawny login.';
                    } else echo 'Login i Hasło muszą mieć minimum 3 znaki.';
                } else echo 'Nazwa użytkownika nie może być taka sama jak hasło.';
            } else echo 'Wypełnij wszystkie pola poprawnie.';
}
?>
<form action="rejestracja.php" method="POST">
        <table>
                <tr>
                        <td>Login:</td>
                        <td><input type='text' name='login' placeholder="Login.."/></td>
                </tr>
                <tr>
                        <td>Hasło:</td>
                        <td><input type='password' name='haslo' placeholder="Hasło.."/></td>
                </tr>
                <tr>
                        <td>Powtórz Hasło:</td>
                        <td><input type='password' name='haslo2' placeholder="Powtórz Hasło.."/></td>
                </tr>
                 <tr>
                        <td>E-mail:</td>
                        <td><input type='text' name='email' placeholder="E-mail.."/></td>
                </tr>
                <tr>
                        <td></td>
                        <td><center><input type='submit' style="width: 100px" value='Zarejestruj'/></center></td>
                </tr>
        </table>
</form>
A tu są te 2 funkcje, które są wykorzystane przy tej rejestracji (wklej je najlepiej w tym samym pliku, w którym łączysz się z bazą danych) :

Kod: Zaznacz cały

function vtxt($var){
        return trim(mysql_real_escape_string(strip_tags($var)));
}
 
function row($sql){
        return mysql_fetch_assoc(mysql_query($sql));
}
Mówimy STOP Reklamie-Sygnaturce! ;)
rkd77
Admin CBA
Posty: 4170
Rejestracja: 24 maja 2009, 16:45:21
Płeć: Niewybrana
User Agent: Chrome Linux 1024x768

Re: Problem z bazą danych

Post autor: rkd77 »

jery0000, na początku wstaw:
error_reporting(E_ALL);
Po drugie: exit; kończy natychmiastowo skrypt. Chyba tego nie chcesz.
Po trzecie: Po wywołaniu każdej funkcji "mysqlowej" dopisz
echo mysql_error();
I dojdziesz co jest źle.
Czy wiesz, że:
  • W Panelu CBA w sekcji "wsparcie" jest dedykowany system ticketów (obsługi technicznej)
  • Odpowiadamy na Forum oraz na adres mailowy obsluga(malpa)cba.pl
  • Jesteśmy również na Facebooku! Znajdź nas na facebook.com/hostingcba | cba.pl
W czym jeszcze możemy pomóc?
jery0000
Posty: 6
Rejestracja: 06 sie 2014, 20:54:43
Płeć: Niewybrana
User Agent: Chrome Windows 1366x768

Re: Problem z bazą danych

Post autor: jery0000 »

W porządku. Bardzo dziękuje. Wybaczcie mi jestem początkującym.
Awatar użytkownika
Fineas_Nigellus
Posty: 582
Rejestracja: 08 lis 2012, 17:33:45
Płeć: Niewybrana
User Agent: Opera Windows 1440x900

Re: Problem z bazą danych

Post autor: Fineas_Nigellus »

'W porządku' czyli wszystko działa jak należy ?
Mówimy STOP Reklamie-Sygnaturce! ;)
timeschat
Posty: 6
Rejestracja: 26 paź 2014, 17:18:50
Płeć: Niewybrana
User Agent: Opera Windows 800x600

Re: Problem z bazą danych

Post autor: timeschat »

mam pytanko. czy baze danych do elgg daloby sie utworzyc? chodzi o druga baze danych bez tego nie moge zainstalowac oprogramowania elgg
ODPOWIEDZ