Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem z update
jaca121212
post
Post #1





Grupa: Zarejestrowani
Postów: 256
Pomógł: 16
Dołączył: 21.12.2014

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


Tak jak w temacie.
Problem polega na tym że jak ktoś wpiszę np. 123 lub cokolwiek to i tak potwierdzi mu konto.
Dodam że kod aktywacyjny przychodzi na maila.
Chce przerobić ten skrypt tak aby sprawdzało mi jaki kod podał użytkownik i czy jest zgodny z kodem w bazie.
Ewentualnie myślałem o przerobieniu tego kodu tak aby użytkownik najpierw wpisał ten kod potwierdzający a następnie mógł by się już normalnie zalogował na swoje utworzone konto. Tylko nie wiem jak zrobić właśnie porównanie czy kod w bazie i kod wpisany zgadzają się ze sobą .
  1. <form method="POST">
  2. <p class="nazwa"><i class="icon-person">Potwiedzenie rejestracji.</i></br></p>
  3. <input type="text" class="btn_input" name="potwierdz" placeholder="Kod potwierdzający" />
  4. <input type="submit" class="btn" name="pot" value="Potwierdź!"/>
  5. </form>
  6. <?php
  7. require_once "polaczenie.php";
  8. $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
  9. if ($polaczenie->connect_errno != 0) {
  10. echo "Error: " . $polaczenie->connect_errno . "Opis: " . $polaczenie->connect_error;
  11. die();
  12. }
  13. $potwierdzenie=$_post['potwierdz'];
  14. if(isset($_POST['pot']) && !empty($_POST['potwierdz']))
  15. {
  16. $result=$polaczenie->query("Select kod_aktywacyjny from uzytkownicy where kod_aktywacyjny='{$_post['potwierdz']}'");
  17. $wiersz = mysqli_fetch_array($result);
  18.  
  19. if($wiersz['kod_aktywacyjny'] == $_post['potwierdz']){
  20. $aktualizacja = $polaczenie->query(sprintf("UPDATE uzytkownicy SET aktywacja='aktywne' where id=(%d)",
  21. $_SESSION['id']));
  22. }
  23. echo"Konto aktywne";
  24. echo $wiersz['kod_aktywacyjny'];
  25. }else{
  26. echo"Nieaktywne konto";
  27. }
  28. ?>

Ktoś nakieruje mnie jak to zrobić.
Go to the top of the page
+Quote Post
gorden
post
Post #2





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


Po pierwsze, nazwy zmiennych są case sensitive.
Po drugie, na jakiej zasadzie działa Twój formularz? Użytkownik jest zalogowany? Jeśli tak, to szukaj w bazie jego kodu potwierdzającego i porównuj z tym wpisanym w formularzu. W tym momencie szukasz po wpisanym kodzie, a nie po użytkowniku.
Jeśli koniecznie chcesz zostać przy swoim zapytaniu (czego nie polecam, bo wtedy ktokolwiek może aktywować jakiekolwiek konto), to nie używaj porównania z wynikiem, tylko sprawdzaj, czy select znalazł jakiś wiersz.
Go to the top of the page
+Quote Post
jaca121212
post
Post #3





Grupa: Zarejestrowani
Postów: 256
Pomógł: 16
Dołączył: 21.12.2014

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


Cytat(gorden @ 17.02.2016, 21:40:15 ) *
Po pierwsze, nazwy zmiennych są case sensitive.
Po drugie, na jakiej zasadzie działa Twój formularz? Użytkownik jest zalogowany? Jeśli tak, to szukaj w bazie jego kodu potwierdzającego i porównuj z tym wpisanym w formularzu. W tym momencie szukasz po wpisanym kodzie, a nie po użytkowniku.
Jeśli koniecznie chcesz zostać przy swoim zapytaniu (czego nie polecam, bo wtedy ktokolwiek może aktywować jakiekolwiek konto), to nie używaj porównania z wynikiem, tylko sprawdzaj, czy select znalazł jakiś wiersz.

OK rozumiem,

założenie miałem na początku takie:

Na podany adres e-mail przychodził kod aktywacyjny. Zanim użytkownik zaloguje się na konto, powinien potwierdzić rejestrację dlatego w formularzu podaje kod aktywacyjny a skrypt sprawdza czy taki kod istnieje w bazie. Jeśli znajdzie taki kod to w kolumnie aktywacja zmieni na "1".

W jaki sposób sprawdzić czy dany kod istnieje w bazie ?
ewentualnie jak zrobić taki link z potwierdzeniem
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Normalny url z np. ?activation=ifhnoiuhmcowriectrhweu4hm9cr8yw48thwt

i w skrypcie sprawdzasz

if(!empty($_GET['activation'])) {...}

szukasz w BD, robisz update i przekierowanie na stronę logownia.
Go to the top of the page
+Quote Post
jaca121212
post
Post #5





Grupa: Zarejestrowani
Postów: 256
Pomógł: 16
Dołączył: 21.12.2014

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


Zrobiłem to w ten sposób
ale nie zmienia się nic w bazie
  1. <?php
  2. require_once "polaczenie.php";
  3. $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
  4. if ($polaczenie->connect_errno != 0) {
  5. echo "Error: " . $polaczenie->connect_errno . "Opis: " . $polaczenie->connect_error;
  6. die();
  7. }
  8. $nick=$_GET['user'];
  9. $kod_aktywacyjny=$_GET['kod_aktywacyjny'];
  10. $resultat=$polaczenie->query("SELECT * FROM `uzytkownicy` WHERE `user`='$nick'");
  11. while($wynik=mysqli_fetch_assoc($resultat))
  12. {
  13. $pobierz_dane = $wynik['aktywacja'];
  14. }if($kod_aktywacyjny == $pobierz_dane)
  15. {
  16. $row=$polaczenie->query("UPDATE `uzytkownicy` SET `kod_aktywacyjny`='0'");
  17. $row=$polaczenie->query("UPDATE `uzytkownicy` SET `aktywacja`='1'");
  18. echo"Konto zostało aktywowane. Zaloguj się.";
  19. }else
  20. {
  21. echo "konto nie aktywowane";
  22. }
  23. ?>

ten kod jest w pliku potwierdzenie.php
a przy rejestracji wysyłam w ten sposób
  1. http://www.darmowememy.esy.es/nowywyglad/potwierdzenie.php?user=$nick&kod_aktywacyjny=$kod_aktywacyjny

gdzie zmiene
$kod='1234';
$kod_aktywacyjny=md5(sha1($kod));
$nick = $_POST['nick'];
zdjęcie z tabeli wygląda tak
(IMG:http://iv.pl/images/36985716339778748641.png)
Gdzie robię w tym kodzie błąd

Ten post edytował jaca121212 18.02.2016, 12:08:01
Go to the top of the page
+Quote Post
kapslokk
post
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Raz używasz mysqli raz mysql_. Zdecyduj się (IMG:style_emoticons/default/smile.gif)
A co do samych zapytan to:
  1. mysql_query("UPDATE `uzytkownicy` SET `kod_aktywacyjny`='0'");
  2. mysql_query("UPDATE `uzytkownicy` SET `aktywacja`='1'");

Zaktualizuje Ci WSZYSTKIE rekordy, a nie tylko ten który chcesz. Poczytaj też o SqlInjection.

@edit
to w koncu jak masz? bo przed chwila bylo mysql_query a teraz juz $polaczenie->query

Ten post edytował kapslokk 18.02.2016, 12:09:56
Go to the top of the page
+Quote Post
jaca121212
post
Post #7





Grupa: Zarejestrowani
Postów: 256
Pomógł: 16
Dołączył: 21.12.2014

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


Cytat(kapslokk @ 18.02.2016, 12:08:59 ) *
Raz używasz mysqli raz mysql_. Zdecyduj się (IMG:style_emoticons/default/smile.gif)
A co do samych zapytan to:
  1. mysql_query("UPDATE `uzytkownicy` SET `kod_aktywacyjny`='0'");
  2. mysql_query("UPDATE `uzytkownicy` SET `aktywacja`='1'");

Zaktualizuje Ci WSZYSTKIE rekordy, a nie tylko ten który chcesz. Poczytaj też o SqlInjection.

@edit
to w koncu jak masz? bo przed chwila bylo mysql_query a teraz juz $polaczenie->query


te mysql dalłem do testów a z tym sql injection to się później zajmę
Go to the top of the page
+Quote Post
kapslokk
post
Post #8





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Jakieś błędy? http://php.net/manual/en/mysqli.error.php
Go to the top of the page
+Quote Post
jaca121212
post
Post #9





Grupa: Zarejestrowani
Postów: 256
Pomógł: 16
Dołączył: 21.12.2014

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


Dzięki wam udało się rozwiązać problem.
Moje niedopatrzenie zamiast pobrać kod z bazy to pobierałem zawartość pustej kolumny
  1. while($wynik=mysqli_fetch_assoc($resultat))
  2. {
  3. $pobierz_dane = $wynik['kod_aktywacyjny'];
  4. }if($kod_aktywacyjny == $pobierz_dane)
  5. {


Temat zamknięty.

Ten post edytował jaca121212 18.02.2016, 18:40:58
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: 23.08.2025 - 19:40