Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z update
Forum PHP.pl > Forum > Przedszkole
jaca121212
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ć.
gorden
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.
jaca121212
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
Pyton_000
Normalny url z np. ?activation=ifhnoiuhmcowriectrhweu4hm9cr8yw48thwt

i w skrypcie sprawdzasz

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

szukasz w BD, robisz update i przekierowanie na stronę logownia.
jaca121212
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

Gdzie robię w tym kodzie błąd
kapslokk
Raz używasz mysqli raz mysql_. Zdecyduj się 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
jaca121212
Cytat(kapslokk @ 18.02.2016, 12:08:59 ) *
Raz używasz mysqli raz mysql_. Zdecyduj się 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ę
kapslokk
Jakieś błędy? http://php.net/manual/en/mysqli.error.php
jaca121212
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.
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.