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

Czemu zmienne nie są dostępne w tej funkcji?

0 głosów
208 wizyt
pytanie zadane 22 stycznia 2019 w PHP przez matilogias Obywatel (1,510 p.)

Wyświetlany jest taki błąd

  • NOTICE: UNDEFINED VARIABLE: MYSQLI IN C:\XAMPP\HTDOCS\SITE\PHP\VARIABLES.PHP ON LINE 32

    WARNING: MYSQLI_QUERY() EXPECTS PARAMETER 1 TO BE MYSQLI, NULL GIVEN IN C:\XAMPP\HTDOCS\SITE\PHP\VARIABLES.PHP ON LINE 32

    WARNING: MYSQLI_ERROR() EXPECTS EXACTLY 1 PARAMETER, 0 GIVEN IN C:\XAMPP\HTDOCS\SITE\PHP\VARIABLES.PHP ON LINE 32

zmienna siteText też jest nie zdefiniowana 

$mysqli = new mysqli('localhost', 'root', '', 'DB');

$siteText["test"] = "eeeee";

function getTextFromDB($name) {
    if(isset($siteText[$name])) {
        if($siteText[$name] == "")
            echo "Tekst nie jest przydzielony do tej zmiennej";
        else
            echo $siteText[$name];
    }
    else {
        $query = "INSERT INTO sites (site, name) VALUES ('".$_SERVER['PHP_SELF']."', '$name');";
        mysqli_query($mysqli, $query) or die(mysqli_error());
    }
}

getTextFromDB("test") 

 

3 odpowiedzi

+1 głos
odpowiedź 22 stycznia 2019 przez niezalogowany
wybrane 22 stycznia 2019 przez matilogias
 
Najlepsza

zmienne zdefiniowane spoza funkcji nie mają zasięgu w funkcji wink​​​​ dlatego też mysqli_query nie może znaleźć połączenia $mysqli 

 mysqli_query($mysqli, $query) or die(mysqli_error());

​​​

https://www.w3schools.com/php/php_variables.asp

 

a pozatym lepiej ucz się PDO ponieważ mysqli jest nie dość że trudniejsze (wg mnie ponieważ jest więcej funkcji do zapamiętania) to jeszcze możesz działać z nim tylko z mysql

1
komentarz 22 stycznia 2019 przez niezalogowany
Racja, nie pomyślałam o scopie zmiennych. Co zatem poradzić pytającemu? Jak nie chce przerabiać całkowicie kodu to może:

1. Zrobić zmienną globalną z identyfikatora połączenia (zaraz mi zmyją głowę za takie rady :( )

lub

2. Przekazać do funkcji identyfikator połączenia jako parametr.
1
komentarz 22 stycznia 2019 przez niezalogowany
najlepiej poradzić pytającemu przeczytać artykuł który dołączyłem tam wszystko jest napisane
komentarz 22 stycznia 2019 przez matilogias Obywatel (1,510 p.)
Wielkie dzięki za rady. Spodziewałem się że to może być błąd związany z zasięgiem zmiennych ale nie wiedziałem co dokładnie i jak to naprawić
0 głosów
odpowiedź 22 stycznia 2019 przez niezalogowany
Twój kod kończy się na 18 linii, a błąd jest sygnalizowany w 32. Daj cały kod.
komentarz 22 stycznia 2019 przez matilogias Obywatel (1,510 p.)

reszta kodu to zmienne i funkcje zupełnie nie związane z tym kodem

ale tak wygląda całość jeśli miało by to pomóc 

<?php
global $siteText;
$siteText["test"] = "eeeee";
$query = "SELECT name, text FROM sites WHERE site = '".$_SERVER['PHP_SELF']."'";
    $result = mysqli_query($mysqli, $query);
    
    while ($r = mysqli_fetch_assoc($result)) {
        $siteText[$r["name"]] = $r["text"];
    }

function site_name(){echo "strona administracyjna";}
function menu_elements() {include "elements/menu_elements.php";}

// This should get you a DateTime object from the date and year.
function getDateFromDay($dayOfYear, $year) {
  $date = DateTime::createFromFormat('z Y', strval($dayOfYear) . ' ' . strval($year));
  return $date;
}

function getTextFromDB($name) {
    echo 1;
    if(isset($siteText[$name])) {
        echo 2;
        if($siteText[$name] == "" && true)//admin
            echo "Tekst nie jest przydzielony do tej zmiennej";
        else
            echo $siteText[$name];
    }
    else {
        echo 3;
        $query = "INSERT INTO sites (site, name) VALUES ('".$_SERVER['PHP_SELF']."', '$name');";
        mysqli_query($mysqli, $query) or die(mysqli_error());
    }
}
?>		

 

0 głosów
odpowiedź 22 stycznia 2019 przez niezalogowany
W funkcji mysqli_error musisz podać identyfikator połączenia, stąd warning. Co do poprzednich błędów wynika z nich, że nieznane jest połączenie pod identyfikatorem $mysqli. Szukaj w kodzie, czy nawiązałeś to połączenie.
komentarz 22 stycznia 2019 przez matilogias Obywatel (1,510 p.)
Połączenie jest nawiązane w innym pliku i działa np w linijce nr 5 ale nie mam pojęcia dlaczego nie działa w linijce 32 zresztą to samo jest z tablicą $siteText
komentarz 22 stycznia 2019 przez niezalogowany
A może wywołujesz feralną funkcję zanim się połączyłeś? Brak kodu, aby to stwierdzić. Zobacz jednak, gdzie wywołujesz funkcję. Komunikaty parsera wskazują właśnie na wywołanie funkcji przed nawiązaniem połączenia.
komentarz 22 stycznia 2019 przez matilogias Obywatel (1,510 p.)
Dokładniej o której funkcji mówisz?
komentarz 22 stycznia 2019 przez niezalogowany
getTextFromDB  - tam ci wywala błędy (linia 32)
komentarz 22 stycznia 2019 przez matilogias Obywatel (1,510 p.)
Wątpię ponieważ identycznie się sprawy mają z tablicą $siteText ponieważ funkcja if w 22 linijce zawsze zwraca false nawet gdy jest wcześniej zdefiniowana

Podobne pytania

0 głosów
1 odpowiedź 326 wizyt
pytanie zadane 27 stycznia 2018 w PHP przez milo321 Użytkownik (610 p.)
0 głosów
2 odpowiedzi 94 wizyt
pytanie zadane 27 stycznia 2018 w PHP przez milo321 Użytkownik (610 p.)
0 głosów
1 odpowiedź 525 wizyt
pytanie zadane 27 czerwca 2016 w Sieci komputerowe, internet przez DL TD Nałogowiec (36,770 p.)

87,976 zapytań

136,557 odpowiedzi

304,510 komentarzy

58,337 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...