Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Mój pierwszy skrypt dodawania do bazy przez formularz
Forum PHP.pl > Forum > Przedszkole
Tho
Pierwszy którego nie pobrałem z tutoriala. Narazie dodaje do bazy, bez względu na to czy wszystkie pola zostały uzupełnione, to chciałbym zmienić i pytam was jak:

  1. <?php
  2.  
  3. $conn = mysql_connect('localhost', 'xxx', 'xxx') or die('Brak połączenia z serwerem MySQL');
  4. $db = mysql_select_db('xxx', $conn) or die('Nie mogę połączyć się z bazą danych');
  5.  
  6.  
  7. if(isset($_POST['pass']))
  8. {
  9. $login = $_POST['login'];
  10. $email = $_POST['email'];
  11. $hash = sha1($_POST['pass']);
  12.  
  13. $wykonaj = mysql_query("INSERT INTO users SET username='$login', pass='$hash', email='$email'");
  14.  
  15. if ($wykonaj) echo'Dodano do bazy!'; else 'blad przy dodawaniu do bazy';
  16. }
  17. else 'nie uzupelniono wszystkich pol';
  18.  
  19. mysql_close($conn);
  20. ?>
  21.  
  22. <form method="post" action="rejestruj.php">
  23. <label>Podaj login: <input type="text" name="login"/></label>
  24. <label>Podaj haslo: <input type="text" name="pass"/></label>
  25. <label>Podaj email: <input type="text" name="email"/></label>
  26. <input type="submit" value="Rejestruj"/>
  27. </form>


Kilka pytań do was:

? Czy kolejność kodu php ma znaczenie.
? Po co do cholery trzeba sprawdzać czy istnieje index pass issetem a nie woła o inne indexy(jak widać nie są sprawdzane i skrtpt nie krzyczy....)
? Po co $conn obok nazwy bazy, widziałem już w kilku poradach że tak trzeba robić, ale nie rozumiem dlaczego.
? Jak sprawdzić czy wszystkie pola są uzupełnione przed wysłaniem.
? Czy można coś uprościć i czy czegoś nie zrąbałęm? wink.gif
(wiem że ostatnie else nie działa, to tylko taki szkic, ale właśnie co zrobić by zadziałało? smile.gif ) Mało tego, jak narazie else obok $wykonaj coś też słabo wyświetlało, gdy celowo robiłem błedy w zapytaniul...

Będe wdzięczny za każde naprowadzenie. wink.gif
Jestem Nowy
Cytat(Tho @ 23.10.2011, 12:17:48 ) *
? Jak sprawdzić czy wszystkie pola są uzupełnione przed wysłaniem.


Ad. 1

Przed wysłaniem w php się nie da, możesz najwyżej warunek postawić gdy zmienna $_POST jest empty.

  1. if(empty($_POST['login']) || empty($_POST['pass']) || empty($_POST['email'])){
  2. echo "wypełnij wszystkie pola";
  3. }
  4. else{
  5. //zapytanie
  6. }


skrypt podatny na sql injection.
cojack
Cytat(Tho @ 23.10.2011, 13:17:48 ) *
? Czy można coś uprościć i czy czegoś nie zrąbałęm? wink.gif


Zrąbałeś, nie zabezpieczyleś $login przed dodanie do bazy danych.
Tho
Cytat(cojack @ 23.10.2011, 14:02:59 ) *
Zrąbałeś, nie zabezpieczyleś $login przed dodanie do bazy danych.

?
@Jestem Nowy - tylko jeśli dodam ten kod to już na początku krzyczy że 'nie uzupełniono pól', już przy pierwszej wizycie, coc zrobić by to wyświetlało się tylko po nieudanej próbie wysyłki formularza, nia zaś jak teraz od razu przy odświeżeniu/pierwszej wizycie.
mch.frnc
Cytat(Tho @ 23.10.2011, 14:49:37 ) *
?
@Jestem Nowy - tylko jeśli dodam ten kod to już na początku krzyczy że 'nie uzupełniono pól', już przy pierwszej wizycie, coc zrobić by to wyświetlało się tylko po nieudanej próbie wysyłki formularza, nia zaś jak teraz od razu przy odświeżeniu/pierwszej wizycie.

najpierw sprawdź czy ta zmienna wysłana POSTem jest ustawiona używając isset() a później czy jest empty() (zresztą wyżej przecież już tak robiłeś?)
Tho
Hmm, tak zrobiłem, działa, ale czy nie za dużo kodu?

  1. if(isset($_POST['login']) || isset($_POST['pass']) || isset($_POST['email']))
  2. if(empty($_POST['login']) || empty($_POST['pass']) || empty($_POST['email'])){


Można to jakoś ściaśnić?

PS: Co polecacie na sql injection?
Jestem Nowy
Cytat(Tho @ 23.10.2011, 13:49:37 ) *
?
@Jestem Nowy - tylko jeśli dodam ten kod to już na początku krzyczy że 'nie uzupełniono pól', już przy pierwszej wizycie, coc zrobić by to wyświetlało się tylko po nieudanej próbie wysyłki formularza, nia zaś jak teraz od razu przy odświeżeniu/pierwszej wizycie.


  1. <?php
  2.  
  3. $conn = mysql_connect('localhost', 'xxx', 'xxx') or die('Brak połączenia z serwerem MySQL');
  4. $db = mysql_select_db('xxx', $conn) or die('Nie mogę połączyć się z bazą danych');
  5.  
  6. if ($_GET['act'] == 'rejestruj') {
  7. if(isset($_POST['login']) || isset($_POST['pass']) || isset($_POST['email'])){
  8. $login = mysql_real_escape_string($_POST['login']);
  9. $email = $_POST['email'];
  10. $hash = sha1($_POST['pass']);
  11. $wykonaj = mysql_query("INSERT INTO users SET username='".$login."', pass='".$hash."', email='".$email."'");
  12. if ($wykonaj){
  13. echo 'Dodano do bazy!';
  14. }
  15. else{
  16. echo 'blad przy dodawaniu do bazy';
  17. }
  18. }
  19. else {
  20. echo "nie wypelniles wszystkich pol";
  21. }
  22.  
  23. mysql_close($conn);
  24. ?>
  25.  
  26. <form method="post" action="rejestruj.php?act=rejestruj">
  27. <label>Podaj login: <input type="text" name="login"/></label>
  28. <label>Podaj haslo: <input type="text" name="pass"/></label>
  29. <label>Podaj email: <input type="text" name="email"/></label>
  30. <input type="submit" value="Rejestruj"/>
  31. </form>

Gość
brakuje 1 klamry } przed

  1. mysql_close($conn);
Tho
@-Jestem Nowy- - Nie dodaje informacji gdy nie doda rekordu.

Zostanę przy czymś takim:

  1. $login = mysql_real_escape_string($_POST['login']);
  2. $email = $_POST['email'];
  3. $hash = sha1($_POST['pass']);
  4.  
  5.  
  6. if(isset($_POST['login']) || isset($_POST['pass']) || isset($_POST['email']))
  7. if(empty($_POST['login']) || empty($_POST['pass']) || empty($_POST['email'])){
  8. echo'Uzupelnij wszystkie pola!';
  9. }
  10. else{
  11. mysql_query("INSERT INTO users SET username='$login', pass='$hash', email='$email'");
  12. echo 'Dodano wszystkie pola poprawnie!';
  13. }
  14.  
  15. mysql_close($conn);
  16. ?>
  17.  
  18. <form method="post" action="aktywacja.php">
  19. <label>Podaj login: <input type="text" name="login"/></label>
  20. <label>Podaj haslo: <input type="text" name="pass"/></label>
  21. <label>Podaj email: <input type="text" name="email"/></label>
  22. <input type="submit" value="Aktywuj konto"/>
  23. </form>
  24.  


Byłbym wdzięczny za dwa słowa odnośnie tego kodu. smile.gif

Może użyć coś takiego:(znalazłem to w pewnym gotowcu)
  1. $login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES);
  2. $haslo = $_POST["haslo"];
  3. $haslo2 = $_POST["haslo2"];
  4. $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
  5. $email2 = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email2"]))), ENT_QUOTES);
  6. $imie = htmlspecialchars(addslashes(strip_tags(trim($_POST["imie"]))), ENT_QUOTES);
  7. $nazwisko = htmlspecialchars(addslashes(strip_tags(trim($_POST["nazwisko"]))), ENT_QUOTES);


Czy konieczne jest tyle funkcji sprawdzających? Czy one w jakimkolwiek stopniu zabezpieczają przed SQL Injection? Jeśli nie przed tym, to przed czym zabezpieczają?
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.