Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[PHP][HTML] - Przekazywanie wartości z <SELECT> z cudzysłowami.

extremeee 04 Lis 2012 18:37 2610 12
  • #1 04 Lis 2012 18:37
    extremeee
    Poziom 25  

    Witam,
    Mam taki problem,
    Na jednej stronie/formularzu mam <select> ładowany z bazy danych :

    Kod: php
    Zaloguj się, aby zobaczyć kod


    <select name="ObiektSEL">
    $result = mysql_query("SELECT ID, Nazwa FROM Obiekty") or die('Błąd zapytania');
    while($r = mysql_fetch_array($result)) {
    echo "<option value=$r[Nazwa]> $r[Nazwa] </option>";
    }
    ?>
    </select>
    [/syntax]

    Na drugiej stronie z $_POST odbieram wartość wybraną w <select>

    Kod: php
    Zaloguj się, aby zobaczyć kod


    Wszystko działa z tym wyjątkiem iż w przypadku jeżeli value w select na pierwszym formularzu zawiera cudzysłów przekazywane jest bez tego cudzysłowu.

    W jaki sposób można sobie z tym poradzić?
    W w/w select dość często występują treści z "".

    0 12
  • #2 04 Lis 2012 18:43
    Dżyszla
    Poziom 42  

    Zamieniaj " na encję " W ogóle to najlepiej użyj funkcji kodującej encje. Ponadto pamiętaj, aby wartość samego parametru value była objęta w pojedynczy lub podwójny cudzysłów.

    Tak na marginesie - niepoprawnie zapisujesz użycie zmiennej tablicowej jak również niepoprawnie zapisujesz nazwę klucza tablicy asocjacyjnej. Winno być: echo "{$r['Nazwa']}";

    0
  • #3 04 Lis 2012 20:03
    extremeee
    Poziom 25  

    Ok rozumiem tylko w którym momencie to zrobić kolego ?
    Pobranie wartości selected z selecta następuje po wciśnięciu submit,
    W którym momencie to przekonwertować ?

    0
  • #5 05 Lis 2012 22:08
    extremeee
    Poziom 25  

    Przerabiam ten temat n-ty raz i bez rezultatów.
    Moja znajomość php/html jest bardzo ale to bardzo podstawowa.
    Mam rozumieć że problem tkwi w pierwszym formularzu w momencie definiowania option ?
    przy

    Code:
     
    
    $wyrazenie = htmlspecialchars("{$r['Nazwa']}");
    echo "<option value={$wyrazenie}>{$wyrazenie}</option>";

    To ma być coś na takiej zasadzie ?
    Wyświetla się to poprawnie w polu select, problem jest na formularzu drugim bo tam już to dolatuje bez treści za pierwszym cudzysłowem.

    0
  • Pomocny post
    #6 05 Lis 2012 23:02
    jan1996
    Poziom 24  

    No wiec do funkcji htmlspecialchars() proponuje Ci przekazywać argument w taki sposób jest chociażby czytelniejszy. Atrybuty w HTML np. value powinny mieć wartość pomiędzy cudzysłowami czyli

    Kod: html
    Zaloguj się, aby zobaczyć kod
    również dla zwiększenia czytelności proponuje ci stosować znak .(kropki) :) jest to operator konkatenancji czyli łączenia ze sobą ciągów znaków.
    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #7 06 Lis 2012 09:10
    extremeee
    Poziom 25  

    Kolego jan1996 dziękuje za wyłożenie przysłowiowej "kawy na ławę" ;)
    Teraz działa jak powinno.

    0
  • #8 06 Lis 2012 17:47
    Dżyszla
    Poziom 42  

    extremeee napisał:
    Code:
     
    
    $wyrazenie = htmlspecialchars("{$r['Nazwa']}");
    echo "<option value={$wyrazenie}>{$wyrazenie}</option>";

    To ma być coś na takiej zasadzie ?
    Tak, taki kod również jest poprawny :) Przy czym:
    1. W parametrze funkcji PHP nie trzeba uzywać cudzysłowów, jeśli przekazujemy zmienną (czyli tak, jak podał kolega powyżej)
    2. Znacznika {} nie trzeba stosować dla zmiennych nietablicowych.

    0
  • #9 07 Lis 2012 12:50
    extremeee
    Poziom 25  

    Dziękuje za przekazane informacje i zainteresowanie wątkiem.

    Pozdrawiam Kolegów :)

    0
  • #10 08 Lis 2012 22:33
    extremeee
    Poziom 25  

    Chciałbym jeszcze dopytać o jedną z rzeczy z PHP+MYSQL,
    Mianowicie chciałbym pobierać z bazy dane gdzie wartość WHERE jest słowem w którym może wystąpić cudzysłów.
    <

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Niestety z tego co się domyślam, to w tym przypadku MySQL przerywa dalsze odczytywanie i w przypadku $nazwa= coś tam "aaa" coś tam kryterium wyszukania skraca się do : coś tam

    Czy jest jakiś sposób aby to ominąć ?

    0
  • #11 08 Lis 2012 23:45
    jan1996
    Poziom 24  

    Trzeba zawsze przy wysyłaniu danych do DB korzystać z funkcji addslashes() oraz przy ich odczytywaniu z funkcji stripslashes(). Swoją drogą jest to niesamowicie ważna kwestia, ponieważ pominięcie jej daje użytkownikowi możliwość modyfikowania w pewnym stopniu zapytań, jest to tzw. atak SQL injection.

    0
  • #12 14 Lis 2012 14:54
    extremeee
    Poziom 25  

    Czyli mam rozumieć że w problem tworzy się już przy zapisie ?
    Przeglądając bazę zapisane tam wartości są z " ".
    Konkretnie w moim przypadku powinno się zrobić przed zapytaniem które podałem wcześniej $nazwa = addslashes($nazwaprzedslashami); ?

    0
  • #13 14 Lis 2012 19:01
    jan1996
    Poziom 24  

    Dokładnie :D przy każdej operacji zapisu lub wtedy kiedy ciąg będzie wysyłany powinieneś użyć addslashes() oraz przy każdej operacji odczytywania powinieneś użyć stripslashes() :D

    0