2013-06-11 13 views
5

Mam wartość ($ title), która jest przechowywana w MySQL i jest wywoływana, za pomocą PHP, do wstawienia do wartości elementu wejściowego. Problem polega na użyciu pojedynczego lub podwójnego cudzysłowu, wartość pola wejściowego kończy się w tym punkcie.PHP do wyprowadzania pojedynczych i podwójnych cudzysłowów jako wartość dla elementu wejściowego

Zachowanie, które powinno nastąpić, to pole wejściowe powinno zostać wypełnione DOKŁADNIE danymi w zmiennej $ title, tak aby przy aktualizacji formularza cytaty pozostały nienaruszone.

Oto PHP:

<?php 
    echo '<input type=text size=91 name=title value="'.stripslashes($title).'">'; 
?> 

Teraz tutaj jest typowym problemem: jeżeli wartość $ tytule

this is a test " of what occurs with a quote 

i echo zmiennej, to echo poprawnie

this is a test " of what occurs with a quote 

Jednak w przypadku użycia w polu wejściowym renderuje się jako:

<input value="this is a test " of what occurs with a quote"> 

Pierwszy "kończy wartość pola, powodując nową wartość będzie:

this is a test 

Jestem zdezorientowany, jak uzyskać odpowiednią wartość do wyświetlania i zostać złożone wraz z formularzem , kiedy ta zmienna jest wyświetlana i aktualizowana.

Odpowiedz

7

Spróbuj użyć htmlspecialchars. To uciec "w yout tytule.

value="'.htmlspecialchars($title).'"> 
+0

To jest doskonałe! Teraz jak mogę go uzyskać, aby nie błąd, jeśli apostrof został wstawiony do pola wejściowego? – dihakz

+0

Nie w pełni rozumiem Twój komentarz. Jaki błąd pojawia się podczas wstawiania apostrofu. – cb0

+0

1064 Masz błąd w swojej składni SQL; sprawdź instrukcję odpowiadającą twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu "To jest opis zaktualizowany" z "cudzysłowami", date_of_call = '06/11/2013 ', time_' at line 1 – dihakz

0

Umieść \ przed cytatu.

echo "This is a \" test";

0

Po wykonaniu stripslashes należy użyć htmlspecialchars ucieczki znaków specjalnych. Pozwala to uniknąć bałaganu znaki takie jak "," itp. mogłyby w przeciwnym razie stworzyć.

<input type=text size=91 name=title value="'.htmlspecialchars(stripslashes($title)).'"> 

Powyższy fragment zostanie naprawiony tylko w celu wyświetlania. Ale kiedy nastąpi zgłoszenie, musisz użyć albo mysql_real_escape_string() lub $pdo->quote(), aby uciec przed znakami specjalnymi przed uruchomieniem zapytania SQL.

+0

To też działa. Jednak otrzymuję błąd MySQL, gdy w polu wejściowym używany jest apostrof. Masz pomysł, jak to wyjaśnić? – dihakz

+0

'htmlspecialchars' powyżej tylko ucieka dane do celu wyświetlania. przed wykonaniem wstawienia do MySQL ponownie wykonaj 'htmlspecialchars'. – Kalyan02

+0

Nie, nie, nie. Nie używaj htmlspecialchars do wstawiania do bazy danych. Ugh. Straszna straszna rada. – bobwienholt

0

Zmień ten wiersz.

<input type=text size=91 name=title value="'.stripslashes($title).'"> 

Aby

<input type=text size=91 name=title value=\''.stripslashes($title).'\'> 
+0

, który działa, dopóki użytkownik nie wprowadzi apostrofu – dihakz

+0

, a następnie użyje htmlspecialchars z tym. –

0

Dlaczego uciekasz stripslashes()? Uruchamianie addslashes() (funkcja przeciwna) naprawiłoby ten konkretny problem, ale lepszym rozwiązaniem byłoby użycie htmlentities($title, ENT_COMPAT, 'utf-8') wszędzie tam, gdzie wypisujesz tytuł (lub, jeśli pozwala na to twoja struktura, kiedy dane są przechowywane).

+0

Kiedy próbuję tego, otrzymuję tylko "To" w moim polu wejściowym, gdy wartość $ title jest w rzeczywistości "To jest test pola tytułu. Zawiera podwójny cudzysłów "" "(pojedynczy cudzysłów nie jest częścią ciągów, użyłem tego tylko do pokazania, gdzie łańcuch zaczął się i kończył.) – dihakz

Powiązane problemy