Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL]Dodawanie rekordow do bazy
Suule
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 11.01.2009

Ostrzeżenie: (0%)
-----


Witam, mam oto taki skrypcik:
  1. <?php
  2. mysql_connect("localhost", "root", "krasnal") or
  3.       die ("Nie mozna polaczyc sie z mysql");
  4.       mysql_select_db("ksiazka") or
  5.       die ("nie mozna polaczyc sie z baza ksiazka");
  6.      
  7.       if ($POST_['co'] == 'dodaj') {
  8.         if ($_POST['imie'] && $_POST['nazwisko'] && $_POST['waga']) {
  9.         $query = "INSERT INTO osoby (imie, nazwisko, ";
  10.         $query .= "waga) VALUES ('".$_POST['imie']."', '".$_POST['nazwisko']."', '".$_POST['waga']."');";
  11.         $wynik = mysql_query($query);
  12. }
  13.       }
  14.      
  15.       $wynik = mysql_query("SELECT * FROM osoby;") or
  16.       die ("nie mozna polaczyc sie z tabela osoby");
  17.       echo '<table cellpadding=5 border=1>';
  18.       echo'<tr><td>Imie:</td> <td>Nazwisko:</td>';
  19.       echo'<td>waga:</td></tr>';
  20.      
  21.       while($rekord=mysql_fetch_assoc($wynik)) {
  22.         $nr=$rekord['nr'];
  23.         $imie=$rekord['imie'];
  24.         $nazwisko=$rekord['nazwisko'];
  25.         $waga=$rekord['waga'];
  26.    
  27.       echo '<tr><td>'.$imie.'</td><td>'.$nazwisko.'</td>';
  28.       echo '<td>'.$waga.'</td></tr>';
  29.       }
  30.       echo '</table>';
  31.       echo '<Form method="post"> Nowy rekord: ';
  32.       echo '<input type="hidden" name="co" value="dodaj">';
  33.       echo '<table><tr><td>Imie: <input type="text" name="imie"></td>';
  34.       echo '<td>nazwisko: <input type="text" name="nazwisko"></td>';
  35.       echo '<td>waga: <input type="text" name="waga"></td></tr></table>';
  36.       echo '<input type="submit" value="dodaj"></form>';
  37. ?>


Skrypt wyswietla i dodaje (powinien) rekordy z/do bazy danych ktora wczesniej stworzylem w PMA.
Jednak problem w tym iz nie dodaje, nie wyswietla mi sie zaden blad... poprostu po wcisnieciu przycisku odswieza mi sie strona nie dodajac rekordu... Prosilbym o sprawdzenie poprawnosci kodu.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
melkorm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Kod
  if ($POST_['co'] == 'dodaj') {


literówka.
Go to the top of the page
+Quote Post
Suule
post
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 11.01.2009

Ostrzeżenie: (0%)
-----


Ech, dzieki... szukalem dlugi czas i nie moglem znalesc, moglem sie domyslec ze zrobilem gdzies bardzo durny blad. ;/
Go to the top of the page
+Quote Post
melkorm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Na przyszłość polecam debugować skrypt, czyli jak masz warunek to dajesz w nim "var_dump('a');" i patrzysz czy w ogóle wchodzi do tego warunku jak masz kilka warunków zagnieżdżonych to tak samo i patrzysz gdzie się "wysypuje" i masz zawężone pole błędu wtedy o wiele łatwiej coś znaleźć. Także na zapytania możesz dawać var_dump'y (praktycznie na wszytsko) by sparwdzac jak wygląda zapytanie , jakie dane Tobie przychodzą i czy są poprawne.

W/g mnie bardzo dobry nawyk (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Suule
post
Post #5





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 11.01.2009

Ostrzeżenie: (0%)
-----


Witam ponownie, znowu zamierzam Was troche pomeczyc, a mianowicie... kolejno postanowilem sobie zrobic skrypcik z mini logowaniem. Stworzylem baze danych z ID Nazwa i Haslem, dodalem poczatkowo jeden rekord(root root) - testowy.
Kolejno przeszedlem do zabawy juz z pisaniem, i splodzilem cos takiego :
  1. <?php
  2.        mysql_connect("localhost", "root", "krasnal") or
  3.    die ("Nie mozna polaczyc sie z mysql'em");
  4.        mysql_select_db("komentarze") or
  5.    die ("Nie mozna polaczyc sie z baza komentarze ");
  6.    
  7.    $zawartosc=mysql_query("SELECT * FROM osoby")or
  8.    die ("nie mozna polaczyc sie z taela osoby");
  9.    
  10.    while ($rekord=mysql_fetch_assoc($zawartosc)){
  11.        $nr=$rekord['nr'];
  12.        $nazwa=$rekord['nazwa'];
  13.        $haslo=$rekord['haslo'];
  14.         }
  15.    
  16.    IF ($_POST['nazwa']) {
  17.           IF ($_POST['nazwa']==$nazwa)
  18.        echo "Zalogowales sie!";
  19. }
  20.    echo $nazwa;
  21.        echo '<table><tr><td>Nazwa uzytkownika:</td><td>Haslo:</td></tr>';
  22.        echo '<tr><td><input type="text" name="nazwa"></td></tr>';
  23.        echo '<tr><td><input type="submit" name ="dodaj" value="Zaloguj"></td></tr><table>';
  24. ?>

Prawdopodobnie, calkowicie zle obmyslilem warunek, jestem tego swiadom. Jezeli ma ktos jakis pomysl to czekam.
P.s
Narazie by nie zamacac sobie glowy, chcialem zrobic by sprawdzilo mi tylko nazwe uzytkownika... jezeli taka istnienieje to wyswietlilo by mi napisa "Zalogowales sie!".
No i jeszcze jak tam sie zastanawiam to czy przypadkiem nie trzeba byloby petla sprawdzac uzytkownikow z bazy?
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nadpisujesz sobie cały czas zmienną tak, że przechowuje tylko ostatni rekord.

Poza tym, zainteresuj się klauzulą WHERE, ponieważ Twój kod wczytuje do pamięci wszystkich użytkowników zamiast jednego.
Go to the top of the page
+Quote Post
Suule
post
Post #7





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 11.01.2009

Ostrzeżenie: (0%)
-----


Hmm, usunalem petle while i zmienilem troszke skrypt. Ale mimo wszystko nie chce mi pokazac napisu "udalo sie zalogowac" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. <?php
  2. IF ($_POST['nazwa']) {    //sprawdzam czy zostalo cos wpisane w formularz
  3.           $zawartosc="SELECT nazwa FROM osoby WHERE nazwa=".$_POST['nazwa']."";
  4.           $wykonaj=mysql_query($zawartosc);
  5. // kreuje zapytanie do mysql czy istnienie taki rekord w bazie danych
  6.           IF ($wykonaj == $_POST['nazwa'])
  7.             echo "zalogowales sie!";
  8.            else
  9.             echo "nie powiodlo sie";
  10. // jezeli tak to wyswietla mi "zalogowales sie", jezeli nie "nie powiodlo sie"
  11. ?>

Reszta skryptu wyglada tak jak poprzednio.
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. IF ($wykonaj == $_POST['nazwa'])
  3. ?>

Przecież w $wykonaj masz zasób wyniku, a nie wartość.

Spróbuj:
  1. <?php
  2. IF (mysql_fetch_assoc($wykonaj))
  3. ?>
Go to the top of the page
+Quote Post
--ghost--
post
Post #9





Grupa: Zarejestrowani
Postów: 2
Pomógł: 1
Dołączył: 14.01.2009

Ostrzeżenie: (0%)
-----


Witam.

1)
  1. <?php
  2. $wykonaj=mysql_query($zawartosc);
  3. ?>


W manualu pisze iż funkcja mysql_query() służy do wysyłania zapytań do aktywnej bazy danych i zwróci w Twoim przypadku identyfikator wyniku, (lub FALSE w przypadku niepowodzenia) a nie wynik zapytania.

2) W tym przypadku, do sprawdzenia czy użytkownik podał właściwą nazwę, można wykorzystać funkcję mysql_num_rows() która jak pisze w manualu zwraca liczbę wierszy w wyniku. Więc można zastosować:

  1. <?php
  2. IF ($_POST['nazwa']) {                                             //sprawdzam czy zostalo cos wpisane w formularz
  3.           $zawartosc="SELECT nazwa FROM osoby WHERE nazwa=".$_POST['nazwa']."";
  4.           $wykonaj=mysql_query($zawartosc);
  5.                                                                             // kreuje zapytanie do mysql czy istnienie taki rekord w bazie danych
  6.          $ilosc_wierszy = mysql_num_rows($wykonaj);      // jeśli w bazie istnieje taki użytkownik zwróci 1 jeśli nie zwróci 0
  7.  
  8.           IF ($ilosc_wierszy > 0)
  9.             echo "zalogowales sie!";
  10.            else
  11.             echo "nie powiodlo sie";                                 // jezeli tak to wyswietla mi "zalogowales sie", jezeli nie "nie powiodlo sie"
  12. ?>


Pozdrawiam.
Go to the top of the page
+Quote Post
Suule
post
Post #10





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 11.01.2009

Ostrzeżenie: (0%)
-----


Wszystko ładnie i pieknie, ale wyskakuje mi taki blad:
"Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\skrypty\logowanie.php on line 21"

Czyli z jakiegos powodu nie laczy dziala mi linijka z:
  1. <?php
  2. $ilosc_wierszy = mysql_num_rows($wykonaj);
  3. ?>

Nie wiem czemu, moze zle zapytanie jest stworzone, zapewniam ze z baza i tabelka wszystko jest dobrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zapytanie zwrocilo ci blad
Musisz uzyc mysql_error() by dowiedziec sie co to za blad
http://nospor.pl/php-faq-n29.html#faq-6

ps: skoro nazwa to tekst to nelezy ją objąc w 'apostrofy ', czego poprzednik nie uczynil.
Go to the top of the page
+Quote Post
Suule
post
Post #12





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 11.01.2009

Ostrzeżenie: (0%)
-----


Hmm, napisalem bardzo prosty skrypt logowania i rejestracji, bez uzycia sesji (poki co) i zabezpieczen.
I tak z ciekawosci sie chce zapytac czy najbezpieczniejszym miejscem przechowywania uzytkownikow i hasel jest baza, czy moze lepsza sa zwykle pliki... a moze sa jeszcze lepsze pomysly? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
logowanie.php
  1. <?php
  2.        mysql_connect("localhost", "root", "krasnal") or
  3.    die ("Nie mozna polaczyc sie z mysql'em");
  4.        mysql_select_db("komentarze") or
  5.    die ("Nie mozna polaczyc sie z baza komentarze ");
  6.    
  7.        $adres = 'http://localhost/~skrypty/Logowanie%20i%20Rejestracja/glowna.php';
  8.    
  9.    
  10.    
  11.    IF ($_POST['nazwa'] && $_POST['haslo'])
  12.     {
  13.           $zawartosc_nazwy="SELECT nazwa FROM osoby WHERE nazwa='".$_POST['nazwa']."'";
  14.           $wykonaj_nazwy=mysql_query($zawartosc_nazwy);
  15.           $ilosc_wierszy = mysql_num_rows($wykonaj_nazwy);
  16.          
  17.           $zawartosc_hasla="SELECT haslo FROM osoby WHERE haslo='".$_POST['haslo']."'";
  18.           $wykonaj_haslo = mysql_query($zawartosc_hasla);
  19.           $ilosc_wierszy_hasla = mysql_num_rows($wykonaj_haslo);
  20.           IF ($ilosc_wierszy>0 && $ilosc_wierszy_hasla>0)
  21.        {
  22.            echo '<meta http-equiv="refresh" content="1;url=http://localhost/~skrypty/Logowanie%20i%20Rejestracja/glowna.php">';
  23.        }
  24.           else
  25.        echo "nie powiodlo sie";
  26.         } else
  27.         echo "<p>nie wprowadzono danych</p>";
  28.          
  29.        echo '<table><tr><td>Nazwa uzytkownika:</td><td>Haslo:</td></tr>';
  30.        echo '<form method="post">';
  31.        echo '<tr><td><input type="text" name="nazwa"></td> <td><input type="password" name="haslo"></td></tr>';
  32.        echo '<tr><td><input type="submit" name ="dodaj" value="Zaloguj"></td></form>';
  33.        echo '<form method="post" action="rejestracja.php"><td><input type="submit" value="zarejestruj" ></td></tr></table></form>'
  34. ?>

rejestracja:
  1. <?php
  2. mysql_connect('localhost', 'root', 'krasnal');
  3. mysql_select_db('komentarze');
  4.  
  5. if($_POST['nazwa'] && $_POST['haslo'] && $_POST['powtorz'])
  6. {
  7.  $query = "SELECT nazwa FROM osoby WHERE nazwa='".$_POST['nazwa']."'";
  8.  $zawartosc=mysql_query($query);
  9.  $spr = mysql_num_rows($zawartosc);
  10.    if ($spr == 0)
  11.     {
  12.       if ($_POST['haslo'] == $_POST['powtorz'])
  13.       {
  14.         $zapytanie = "INSERT INTO osoby(nazwa, haslo) VALUES('".$_POST['nazwa']."','".$_POST['haslo']."');";
  15.         $wynik=mysql_query($zapytanie);
  16.       } else
  17.         echo '<p>Podane haslo nie jest takie same jak powtorzone haslo</p>';
  18.     }
  19.    else
  20.    echo "<p>Podany uzytkownik juz istnienie. Sprobuj jeszcze raz.</p>";
  21.  
  22. }
  23. else
  24. echo '<p> Nie wprowadzono danych! Wprowadz dane!';
  25. ?>
  26. <h1>  Rejestracja </h1>
  27. <form  method="post">
  28. <table>
  29. <tr> <td><b>Podaj nazwe uzytkownika: </b></td>  <td> <input type="text" name="nazwa" /></td> </tr>
  30. <tr> <td><b>Podaj haslo uzytkownika: </b></td>  <td> <input type="text" name="haslo" /></td> </tr>
  31. <tr> <td><b>Powtorz haslo: </b> </td>  <td>  <input type="text" name="powtorz" /></td> </tr>
  32. <tr> <td> <input type="submit" value="Wyslij" /> </td> </tr>
  33. </table>
  34.  
  35. </form>


P.s
Przekierowanie musialem wykonac za pomoca meta poniewaz header nie dzialal, moze ma ktos jakis pomysl czemu? Pozatym jezeli ktos dopatrzyl sie sporego bledu to prosze o wskazowke.

Ten post edytował Suule 16.01.2009, 16:05:29
Go to the top of the page
+Quote Post
erix
post
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. $zawartosc_nazwy="SELECT nazwa FROM osoby WHERE nazwa='".$_POST['nazwa']."'";
  3. ?>

Twój skrypt nie ma nic wspólnego z bezpieczeństwem.

Szukajka: sql injection
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:00