logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] php mysql - Pobieranie danych z tabeli Linki dla idlink w formacie varchar

piochuxl 27 Sty 2017 10:13 2424 21
REKLAMA
  • #1 16231700
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Więc tak
    jest tabela Linki która ma za zadanie przekierować link na stronę według idlink.
    Chciałbym pobrać wartość pola status przy formie:
    http://strona.pl/strona.php?idlink=ABCD12345
    I jeśli wartość idlink jest wartością numeryczną wszystko działa
    Jeśli zaś w formie literowo-cyfrowej już nie. Typ pola to varchar.
    Co nie tak jest w tym kodzie?
    Działa za to wszystko jeśli link jest:
    http://strona.pl/strona.php?idlink="ABCD12345"
    Nie chciał bym jednak by był ten cudzysłów.


    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 16231741
    smaboman
    Poziom 14  
    Posty: 137
    Pomógł: 7
    Ocena: 12
    Próbowałeś w taki sposób?

    $zapytanie = mysqli_query($baza, "SELECT sta_str FROM Linki WHERE Link_id = '".$link."'");

    Zdajesz sobie sprawę z tego, że przekazywanie wartości prosto z funkcji GET do zapytania nie jest bezpieczne?
  • #3 16231828
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Nie działa. Oczywiście że zdaję sobie sprawę ale tu nie ma znaczenia. Mi chodzi tylko o to by zadziałało a resztą zajmę się później .
  • #4 16232068
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    piochuxl napisał:
    Nie działa.
    A moze kolega, uprzejmie, poda jaka jest definicja tej tableli 'sta_str' ?
    piochuxl napisał:
    $zapytanie = mysqli_query($baza, "SELECT sta_str FROM Linki WHERE Link_id = ".$link);
    Takie zapytanie zawsze będzie się odwoływać tylko do wartości liczbowych. Wprowadzenie tekstu do wartości $link powino wywołac błąd zapytania. I na 100% wywołuje ('Błąd konwersji" lub podobne ).
    smaboman napisał:
    $zapytanie = mysqli_query($baza, "SELECT sta_str FROM Linki WHERE Link_id = '".$link."'");
    To ma prawo zadziałać, ale żeby miało obowiązek zadziałać, trzeba ten zapis odrobinkę zmienić. Np. na taki:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    Autorowi sugeruję tę linję skopiować dokładnie z tego posta, a nie wpisywać ręcznie.
    Także, dobrą praktyką jest; najpierw umieszczenie całego zapytania SQL w zmiennej a dopiero potem użycie tej zmiennej w mysqli:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
    W ten sposób można wyświetlić treść zapytania SQL, skopiowac np. do myPHPAdmin i sprawdzić dlaczego nie działa zgodnie z założeniami.
  • #5 16232088
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    arnoldziq napisał:
    piochuxl napisał:
    Nie działa.
    A moze kolega, uprzejmie, poda jaka jest definicja tej tableli 'sta_str' ?
    piochuxl napisał:
    $zapytanie = mysqli_query($baza, "SELECT sta_str FROM Linki WHERE Link_id = ".$link);
    Takie zapytanie zawsze będzie się odwoływać tylko do wartości liczbowych. Wprowadzenie tekstu do wartości $link powino wywołac błąd zapytania. I na 100% wywołuje ('Błąd konwersji" lub podobne ).
    smaboman napisał:
    $zapytanie = mysqli_query($baza, "SELECT sta_str FROM Linki WHERE Link_id = '".$link."'");
    To ma prawo zadziałać, ale żeby miało obowiązek zadziałać, trzeba ten zapis odrobinkę zmienić. Np. na taki:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    Autorowi sugeruję tę linję skopiować dokładnie z tego posta, a nie wpisywać ręcznie.
    Także, dobrą praktyką jest; najpierw umieszczenie całego zapytania SQL w zmiennej a dopiero potem użycie tej zmiennej w mysqli:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
    W ten sposób można wyświetlić treść zapytania SQL, skopiowac np. do myPHPAdmin i sprawdzić dlaczego nie działa zgodnie z założeniami.


    stra_sta to pole w tabeli.
  • #6 16232163
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    piochuxl napisał:
    stra_sta to pole w tabeli.
    No, tego to się domyśliłem. Jak zapewne wszyscy.
    Chodzi o to; jako co te pole jest zdefiniowane? A właściwie, to jak wygląda definicja wszystkich pól w tej tableli, której kolega używa.
    Zamieszczenie "Create Table ..." byłoby całkiem pomocne.
  • REKLAMA
  • #7 16232178
    smaboman
    Poziom 14  
    Posty: 137
    Pomógł: 7
    Ocena: 12
    piochuxl napisał:
    Jeśli zaś w formie literowo-cyfrowej już nie. Typ pola to varchar.


    Wydaje mi się, że to zdanie odnosiło się właśnie stra_sta.

    Wg mnie również:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    powinno zadziałać, ale niech może autor potwierdzi definicję pola i poda błąd, który jest zgłaszany.
  • #8 16347405
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Jest to oczywiście varchar

    Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in strona.php on line 9

    Warning: mysql_close(): no MySQL-Link resource supplied in strona.php on line 36
  • #9 16347528
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Sugeruję zamieścić kod, który generuje te błędy.
    Same numery linii nic nikomu nie powiedzą.
  • #10 16347538
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Ok usunę puste linie i dodam tu kod. Ale to rano bo dziś czas do domku:)
  • #11 16349478
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Oki czysty kod:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    błąd to:
    Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in /linki.php on line 5

    Mysql:
    Kod: SQL
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #12 16349574
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Tu jest problem :
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
    Zmienna $baza nie jest nigdzie zdefioniowana.

    Zgaduję, że umknęła gdzieś linia :
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #13 16349576
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Nie uciekła linia, zrobiłem to za pomocą include. I jak wcześniej piszę id w formie 1234 odczytuje a w formie AA11 już nie
  • #14 16349578
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    piochuxl napisał:
    Nie uciekła linia, zrobiłem to za pomocą include.
    Widocznie słabo, skoro nie działa.
  • REKLAMA
  • #15 16349581
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Działa i to bezproblemowo gdy wartość idlink jest numeryczna. Problem się robi gdy jest alfanumeryczna.
  • #16 16349582
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Sugeruję też przerobić
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    na
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #19 16349613
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    No i własnie nie rozumiem. Bo tylko przeniosłem skrypt do innego folderu.

    Dodano po 48 [minuty]:

    Ok ciąg dalszy wyświetla oki ale po drobnej edycji kodu w miejscu tekstu ma być hiperłącze. I według idlink ma otwierać określoną stronę
    I tu już linki nie działają na literowych id
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #20 16351578
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    piochuxl napisał:
    $zapytanie = mysqli_query($baza, "SELECT sta_str FROM Linki WHERE Link_id = ".$link);
    $przekieruj = mysqli_fetch_row($zapytanie);
    $przekieruj = $przekieruj[0];
    header('Location: '.$przekieruj);

    To jest zupełnie bez sensu.
    Zrób tak :
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #21 16351608
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Ok działa Dzięki wielkie:)
  • #22 17049703
    piochuxl
    Poziom 20  
    Posty: 523
    Pomógł: 14
    Ocena: 19
    Zamykam w związku z zakończeniem tematu.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik ma problem z pobieraniem wartości pola `status` z tabeli `Linki` w bazie danych MySQL, gdy `idlink` jest w formacie alfanumerycznym. Kod działa poprawnie dla wartości numerycznych, ale nie dla wartości varchar. Sugerowane poprawki obejmują użycie apostrofów w zapytaniu SQL oraz sprawdzenie definicji tabeli. Ostatecznie, po kilku próbach, użytkownik uzyskał działający kod, który poprawnie przekierowuje na odpowiednie linki.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA