Zmiana hasła-co mam źle w tym skrypcie

Witam mam problem z skryptem zmiany hasła a więc:

Problem tkwi w zmianie po wprowadzeni danych “starego, nowego, i powtórzeniu hasła”

wyskakuje błąd taki “stare haslo jest niepoprawne!” a hasło jest napisane poprawnie bo się

z niego logowałem do konta

Skrypt wygląda tak.

zmiana.php

Wpisz stare hasło: 


Wpisz nowe hasło: 


Powtórz nowe hasło:

zmiana2.php

<?

$stare_haselko = md5($_POST["stare_haselko"]);

$stare_haselko_true = $gracz['haslo'];

$nowe_haselko = md5($_POST["nowe_haselko"]);

$nowe_haselko2 = md5($_POST["nowe_haselko2"]);

if ($stare_haselko == $stare_haselko_true) {

if ($stare_haselko_true == $nowe_haselko2) {

   ?>

stare i nowe haslo jest takie same! #### powrot \<? } else { if ($nowe\_haselko == $nowe\_haselko2) { call("UPDATE `bartoszka_fight`.`tribal_gracze` SET `haslo` = '".$nowe\_haselko."' WHERE `tribal_gracze`.`gracz` = ".$gracz['gracz']); ?\> ## haslo zostalo zmienione! #### za chwile zostaniesz automatycznie przekierowany\<? } else { ?\> ### nowe hasla nie sa takie same! #### sprobuj ponownie \<? } } } else { ?\> ### stare haslo jest niepoprawne! #### sprobuj ponownie \<? } ?\>[/code] tabela baza danych [code]-- Struktura tabeli dla `tribal_gracze` -- CREATE TABLE IF NOT EXISTS `tribal_gracze` ( `gracz` int(11) NOT NULL auto\_increment, `login` varchar(15) NOT NULL, `haslo` varchar(40) NOT NULL, `email` varchar(40) NOT NULL, `ostatnio_zalogowany` int(11) NOT NULL, `obrazek` int(11) NOT NULL, `rola` int(11) NOT NULL, `zbanowany` int(11) NOT NULL, `id_miasta` int(11) NOT NULL default '0', `nazwa_miasta` varchar(40) NOT NULL, `punkty` int(11) NOT NULL default '0', `monety` int(11) NOT NULL default '0', `id_klanu` int(11) NOT NULL default '0', `urlop` int(11) NOT NULL default '0', PRIMARY KEY (`gracz`), UNIQUE KEY `login` (`login`), UNIQUE KEY `email` (`email`), UNIQUE KEY `nazwa_miasta` (`nazwa_miasta`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO\_INCREMENT=2 ;

Hmm, skoro wyrzuca Ci ten konkretny błąd to ten if się nie wykonuje:

if ($stare_haselko == $stare_haselko_true)

Pokaż resztę kodu (jak wyciągasz hasło itd.) może tam popełniłeś błąd.

to są wszystkie kody od tego skryptu napisz dokładniej co potrzebujesz

$stare_haselko_true = $gracz['haslo'];

Skoro przypisałeś do zmiennej $stare_haselko_true to: $gracz[‘haslo’] to najpierw musiałeś to wyciągnąć z bazy czyż nie? ;>

PS polecam nazywać inaczej zmienne bo tak to się możesz zgubić :wink:

Nie rozumiem czy byś mógł to poprawidź ten skrypt tak aby baza danych się zgrała

Zauważ, że używasz w kodzie

$gracz['gracz']

czyli gdzieś musiałeś te dane pobrać do tej tablicy. Jeżeli nie to daj przed deklaracje zmiennych

$sql = mysql_query("SELECT haslo FROM tribal_gracze WHERE id = '$id' limit 1;");

$gracz = mysql_fetch_assoc($sql);

i wtedy odwołaj się przez gracz[‘haslo’], tylko zamiast $id daj coś, gdzie przetrzymujesz id gracza (osoby zalogowanej - jakaś zmienna sesyjna czy coś).

dobra dzięki podaje się nie robię tego bo nie umiem tego naprawidź jak ktoś ma to proszę o gotowca :cry:

Tylko, że to nie filozofia wziąć gotowca - lepiej się czegoś nauczyć :wink: Do tej gry (tak wnioskuję po tabeli w bazie) masz jakieś logowanie co nie? No to na pewno ustawia tam sesję i zapisuje to id gracza jako np. $_SESSION[‘id’] = 1. Wykorzystaj to i zmodyfikuj Twój skrypt. W zasadzie masz wszystko, musisz tylko zmienić to zapytanie które dałem, zmień

WHERE id = '$id'

na

WHERE gracz = 'TUTAJ ZMIENNA'

i w miejsce TUTAJ ZMIENNA daj tą sesyjną zmienną :wink: Powinno hulać :slight_smile:

podaj linijkę gdzie to wgrać bo nie wiem

a zaloguj2.php

Logowanie

<?php

if(!empty($_POST)){

if (!empty($_POST[‘login’]) && !empty($_POST[‘pass’])){

require_once(‘funkcje/zaloguj.php’);

$msg = zaloguj($_POST[‘login’],$_POST[‘pass’]);

} else {

$msg = ‘Wypełnij wszystkie pola poprawnie’;

}

echo “”.$msg."";

}

?>

Login: '/>
Hasło: '/>
Zapomiałem hasła

Jeżeli nie posiadasz jeszcze konta, zarejestruj się >tutaj<

zaloguj.php
<?php

function zaloguj($login, $haslo){

	//zabezpiecz zmienne

	$login = vText($login);

	$haslo = vText($haslo);


	//zaszyfruj hasło

	$haslo = md5($haslo);


	//pobierz dane z gabeli graczy o takim samym loginie i poprwanym haśle

	$id = mysql_fetch_array(mysql_query("select * from tribal_gracze where login = '".$login."' and haslo ='".$haslo."' limit 1"));

	if(!empty($id)){

		//jeżeli coś pobrało


		//jeżeli gracz jest zbanowany

		if($id['zbanowany'] == 1) return "administracja zbanowała tego gracza";


		if($id['urlop'] > time()) return "ten gracz jest na urlopie";



		//jeżeli nie to zaloguj		

		//wyczyść sesje

		$_SESSION = '';

		$_SESSION = array();


		//zapisz id gracza w sesji

		$_SESSION['gracz'] = $id['gracz'];



		//przejdź do strony konta gracza

		header("location: ?akcja=konto");

	} else {

		return "podano niepoprawne dane";

	}

}

?>

jak możesz popraw to i daj gotowe

No i cały czas chodziło mi o to wybieranie z bazy przy logowaniu :wink: Masz tam:

$_SESSION['gracz'] = $id['gracz'];

czyli możesz teraz użyć tej zmiennej sesyjnej: w zmiana2.php po <? ale przed zmiennymi daj:

$sql = mysql_query("SELECT haslo FROM tribal_gracze WHERE gracz = ".$_SESSION['gracz']." limit 1;");

$gracz = mysql_fetch_assoc($sql);

Jeżeli będzie wywalać błąd związany z sesjami to daj na początku (po <?) session_start(); i powinno już być git :slight_smile:

no teraz pisze że hasło zostało zmienione ale go nie zmieniło w bazie :frowning:

Wywal to:

call("UPDATE `bartoszka_fight`.`tribal_gracze` SET `haslo` = '".$nowe_haselko."' WHERE `tribal_gracze`.`gracz` = ".$gracz['gracz']);

i daj

mysql_query("UPDATE tribal_gracze SET haslo = ".$nowe_haselko." WHERE gracz = ".$gracz['gracz']);

nadal nie zmieniło hasła

a teraz:

mysql_query("UPDATE tribal_gracze SET haslo = '".$nowe_haselko."' WHERE gracz = ".$gracz['gracz']);

nadal pisze że zmienia a przy logowaniu pisze hasło nieprawidłowe

$id= $gracz[‘gracz’]; // to daj tam gdzie te zmienne

mysql_query(“UPDATE tribal_gracze SET haslo=’$nowe_haselko’ WHERE gracz=’$id’;”); // to daj tam zamiast tamtego update’a teraz powinno być już dobrze

nadal to samo :frowning: nie zmienia hasła a pisze że zmienia

Dodane 06.12.2011 (Wt) 19:10

odśwież