Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]Dodawanie rekordow do bazy
Forum PHP.pl > Forum > Przedszkole
Suule
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.
melkorm
Kod
  if ($POST_['co'] == 'dodaj') {


literówka.
Suule
Ech, dzieki... szukalem dlugi czas i nie moglem znalesc, moglem sie domyslec ze zrobilem gdzies bardzo durny blad. ;/
melkorm
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 smile.gif
Suule
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?
erix
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.
Suule
Hmm, usunalem petle while i zmienilem troszke skrypt. Ale mimo wszystko nie chce mi pokazac napisu "udalo sie zalogowac" 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.
erix
  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. ?>
--ghost--
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.
Suule
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 smile.gif
nospor
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.
Suule
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? 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.
erix
  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
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.