• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd - Undefined index: user

VPS Starter Arubacloud
0 głosów
439 wizyt
pytanie zadane 15 grudnia 2016 w PHP przez tysiek Użytkownik (560 p.)

Witam,

Mam problem z tym kodem:

             $wszystko_OK=true;      
//Sprawdź poprawność nicka
		$nick = $_POST['nick'];
		
		//Sprawdzenie długości nicka
		if ((strlen($nick)<3) || (strlen($nick)>20))
		{
			$wszystko_OK=false;
			$_SESSION['e_nick']="Nick musi posiadać od 3 do 20 znaków!";
		}
		
		if (ctype_alnum($nick)==false)
		{
			$wszystko_OK=false;
			$_SESSION['e_nick']="Nick może składać się tylko z liter i cyfr (bez polskich znaków)";
		}
       
                    require_once "connect.php";
            mysqli_report(MYSQLI_REPORT_STRICT);
              
            try
            {
                $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
                    if ($polaczenie->connect_errno!=0)
                    {
                        throw new Exception(mysqli_connect_errno());
                    }
                    else
                    {
						
                        if ($wszystko_OK==true)
                            {
							
                                $zmiana = "UPDATE uzytkownicy SET user = '$nick' WHERE email='$email'";
                                if ($polaczenie->query($zmiana) === true){
                                    echo '<b><span style="color: red;">Login użytkownika '.$nick.' zostalo zresetowane!</span></b>';
                                }
                                else{
                                        throw new Exception($polaczenie->error);
                                        }
                             }
                        $polaczenie->close();
                    }
    }
            catch(Exception $e)
            {
                echo'<br />info deweloperskie: '.$e;
            }

Po uzupełnieniu wyświetla się błąd taki: Notice: Undefined index: user in plik.php on line 13

komentarz 15 grudnia 2016 przez xandros Nałogowiec (29,450 p.)
Następnym razem przeformatuj kod, zanim go załączysz. :P
 

Proszę: https://gist.github.com/anonymous/59b07a416de8a47c0ac09d55f979b875

1 odpowiedź

0 głosów
odpowiedź 15 grudnia 2016 przez xandros Nałogowiec (29,450 p.)
Lap code review (w komentarzach zrobione, bo nie wiem, jak w gitsie się robilo inline)
https://gist.github.com/xandros15/c25f9f1dda24f2058a739f61d20c9d69

po drugie: nie widzę deklaracji $email
komentarz 16 grudnia 2016 przez tysiek Użytkownik (560 p.)
Dalej jest błąd: Undefined index: nick

Ale gdy wcisnę button: Zmień login to już się nie pojawia takie coś.
komentarz 16 grudnia 2016 przez xandros Nałogowiec (29,450 p.)
pokaż "poprawiony" kod
komentarz 16 grudnia 2016 przez tysiek Użytkownik (560 p.)
$wszystko_OK = true; //#1. wat? po co ta zmienna #2. uzywaj angielskich nazw 
//#3. uzywaj camelCase dla zmiennych zgodnie z psr-2 #4 zmienne maja zwiezle i dokladnie okreslac, co przetrzymuja
//Sprawdź poprawność nicka
$nick = $_POST['nick'];
//Sprawdzenie długości nicka
if ((strlen($nick) < 3) || (strlen($nick) > 20)) {
    $_SESSION['e_nick'] = "Nick musi posiadać od 3 do 20 znaków!";
}
if(!ctype_alnum($nick)) {
    $_SESSION['e_nick'] = "Nick może składać się tylko z liter i cyfr (bez polskich znaków)";
}
require_once "connect.php"; 
// plik connect powinien zwracac cos, byc plikiem konfiguracyjnym (json yaml ini), lub wyjatkowo przetrzymywac w stalych,
//a nie być zlepkiem zmiennych globalnych. 
/* przyklad ze zwracaniem
  connect.php
  <?php
  return [
    'db_name' => 'name',
    'db_user' => 'username',
    'db_password' => 'password',
    'db_host' => 'localhost'
  ];
  206509.php
  <?php
   $dbParams =  require_once "connect.php";
   $connect = new mysqli($dbParams['db_host'], $dbParams['db_user'], $dbParams['db_password'], $dbParams['db_name']);
*/
mysqli_report(MYSQLI_REPORT_STRICT);
try {
    $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);//angielskie nazwy zmiennych
    //also jednak wole uzywac PDO...
    if ($polaczenie->connect_errno != 0) {// mozna if(!$polaczenie->connect_error)
       throw new Exception($polaczenie->connect_errno);
    } else { //niepotrzebny warunek
        if(empty($_SESSION['e_nick'])) {
            $zmiana = "UPDATE uzytkownicy SET user = '$nick' WHERE email='$email'"; // http://imgs.xkcd.com/comics/exploits_of_a_mom.png używaj bindowania: http://php.net/manual/en/mysqli-stmt.bind-param.php

                    if(!$polaczenie->query($zmiana)) {
                       throw new Exception($polaczenie->error);
                    }
                    
                     echo '<b><span style="color: red;">Login użytkownika ' . $nick . ' zostalo zresetowane!</span></b>';
                throw new Exception($polaczenie->error);
            }
        }
        $polaczenie->close(); 
    }
   catch (Exception $e) {
    echo '<br />info deweloperskie: ' . $e; //to juz nie sessja? 
}

 

komentarz 16 grudnia 2016 przez xandros Nałogowiec (29,450 p.)

od tyłu:

# -> linia

#44; wywal to

#37-41: k***a http://php.net/manual/en/mysqli-stmt.execute.php:

$query = "UPDATE uzytkownicy SET user = :user WHERE email= :email";
$stmt = $polaczenie ->prepare($query);
$stmt->bind_param("user", $nick);
$stmt->bind_param("email", $email);
if(!$stmt->exequte()) {
    throw new Exception("Wynik nie zostal zaktualizowany");
}

#33: if($polaczenie->connect_error) wczesniej uzyles: if(!ctype_alnum($nick)) { wiec uzywaj takiej notacji.

#4 a gdzie $email = $_POST['email'];? wysyłasz w ogole emaila przez formularz?

#1 DO WYWALENIA!

komentarz 16 grudnia 2016 przez tysiek Użytkownik (560 p.)

Uncaught Error: Call to a member function bind_param() on boolean in

$nick = $_POST['nick'];
$email = $_POST['email'];
//Sprawdzenie długości nicka
if ((strlen($nick) < 3) || (strlen($nick) > 20)) {
    $_SESSION['e_nick'] = "Nick musi posiadać od 3 do 20 znaków!";
}
if(!ctype_alnum($nick)) {
    $_SESSION['e_nick'] = "Nick może składać się tylko z liter i cyfr (bez polskich znaków)";
}
require_once "connect.php"; 
// plik connect powinien zwracac cos, byc plikiem konfiguracyjnym (json yaml ini), lub wyjatkowo przetrzymywac w stalych,
//a nie być zlepkiem zmiennych globalnych. 
/* przyklad ze zwracaniem
  connect.php
  <?php
  return [
    'db_name' => 'name',
    'db_user' => 'username',
    'db_password' => 'password',
    'db_host' => 'localhost'
  ];
  206509.php
  <?php
   $dbParams =  require_once "connect.php";
   $connect = new mysqli($dbParams['db_host'], $dbParams['db_user'], $dbParams['db_password'], $dbParams['db_name']);
*/
mysqli_report(MYSQLI_REPORT_STRICT);
try {
    $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);//angielskie nazwy zmiennych
    //also jednak wole uzywac PDO...
    if ($polaczenie->connect_errno != 0) {// mozna if(!$polaczenie->connect_error)
       throw new Exception($polaczenie->connect_errno);
    } else { //niepotrzebny warunek
        if(empty($_SESSION['e_nick'])) {
$query = "UPDATE uzytkownicy SET user = :user WHERE email= :email";
$stmt = $polaczenie ->prepare($query);
$stmt->bind_param("user", $nick);
$stmt->bind_param("email", $email);
if(!$stmt->exequte()) {
    throw new Exception("Wynik nie zostal zaktualizowany");
}
                     
                     echo '<b><span style="color: red;">Login użytkownika ' . $nick . ' zostalo zresetowane!</span></b>';
            }
        }
        $polaczenie->close(); 
    }
   catch (Exception $e) {
    echo '<br />info deweloperskie: ' . $e; //to juz nie sessja? 
}

 

komentarz 16 grudnia 2016 przez Chess Szeryf (76,710 p.)
$stmt = $polaczenie ->prepare($query);

Chyba tam masz error'a chociaż nie napisałeś, w której linii.

 

komentarz 16 grudnia 2016 przez xandros Nałogowiec (29,450 p.)
edycja 16 grudnia 2016 przez xandros

Ma błąd: http://php.net/manual/en/mysqli.prepare.php#refsect1-mysqli.prepare-returnvalues

Bo zwraca false zamiast stmt

Daj

$stmt = $polaczenie->prepare($query);
if(!$stmt) {
   throw new Exception("Error in prepare: " . $polaczenie->error);
}

I zobacz, jaki error wyrzuca.

 

Podobne pytania

0 głosów
1 odpowiedź 1,171 wizyt
pytanie zadane 12 lipca 2018 w PHP przez Thorwaldsen Początkujący (250 p.)
0 głosów
0 odpowiedzi 668 wizyt
0 głosów
1 odpowiedź 400 wizyt
pytanie zadane 8 grudnia 2016 w PHP przez Chess Szeryf (76,710 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...