[php, mysql, html] problem z spacja w formularzu

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
szyszek
Posty: 12
Rejestracja: pn wrz 06, 2004 11:08 am
Lokalizacja: Gdańsk

[php, mysql, html] problem z spacja w formularzu

Post autor: szyszek »

mam w baze "oddzialy" a w niej tabele "oddzial" oddzial posiada zmienna "nazwa" (char(20)). Mam formularz umozliwiajacy modyfikacje tej zmiennej.


[php]<?php
//tu wyciagam nazwe z bazy
$zapytanie = "SELECT * FROM kontakt_oddzial WHERE
id_oddzial IN($id_oddzial) ";
if($wykonaj = mysql_query($zapytanie))
{
while($wiersz = mysql_fetch_array($wykonaj))
{
$st_nazwa=$wiersz['nazwa'];
}
}
//jesli mam zmienic nazwe to ja zmieniam
if($co =='zm_nazwe')
{
$st_nazwa=$nazwa; // zeby po zmienie nazwy nie wyswieltilc
//tej z bazy tylko z formularza
$rozkaz="UPDATE kontakt_oddzial SET nazwa='$nazwa'
WHERE id_oddzial IN($id_oddzial)";
if(!mysql_query($rozkaz))
echo("blad");
}
/// i formularz wyswietlajacy w poli text stara nazwe
// i ew wysylajacy polecenie zmiany (zmienna "co" )
//oraz sama nowa zmienna (nazwa) no i oczywiscie id (jawnie w adresie)
print"
<FORM METHOD=POST ACTION=edycja.php?id_oddzial=$id_oddzial>
nazwa:
<INPUT TYPE=text NAME=nazwa VALUE=$st_nazwa>
<INPUT TYPE=hidden NAME=co VALUE=zm_nazwe>
<INPUT TYPE=SUBMIT VALUE=Zmien>
</FORM>";
?>[/php]
a wiec w czym tkwi problem :
dopuki zmienna nazwa jest jednoczlonowa (bez spacji)
skrypt dziala bez zarzutu. Niestety czasem potrzebuje wpisca nazwe dwuczlonowa i wtedy zaczynaja sie problemy
1) jesli wpisze zmienna z spacja zostanie ona dodana do bazy poprawnie ale nie wyswietli sie poprawnie w formularzu
2) jesli recznie wpisze zmienna do bazy to takze nie zostanie ona prawidlowo pobrana z bazy i wpisana do formularza

prosze powiedzcie mi w czym tkwi problem
raceCh-
Posty: 2
Rejestracja: pn wrz 06, 2004 1:26 pm
Lokalizacja: Morzyczyn
Kontakt:

Re: [php, mysql, html] problem z spacja w formularzu

Post autor: raceCh- »

OdpowiedŸ jest prosta, jakbyœ zajrzał do Ÿródła strony (tego z przeglšdarki, widok -> pokaż Ÿródło), pewnie domyœliłbyœ się sam... Chodzi o cudzysłów

jest:
<INPUT TYPE=text NAME=nazwa VALUE=$st_nazwa>
powinno być:
<INPUT TYPE=text NAME=nazwa VALUE=\"$st_nazwa\">

Czyli kod skryptu powinien wyglšdać tak:

[php]
<?php
//tu wyciagam nazwe z bazy
$zapytanie = "SELECT * FROM kontakt_oddzial WHERE
id_oddzial IN($id_oddzial) ";
if($wykonaj = mysql_query($zapytanie))
{
while($wiersz = mysql_fetch_array($wykonaj))
{
$st_nazwa=$wiersz['nazwa'];
}
}
//jesli mam zmienic nazwe to ja zmieniam
if($co =='zm_nazwe')
{
$st_nazwa=$nazwa; // zeby po zmienie nazwy nie wyswieltilc
//tej z bazy tylko z formularza
$rozkaz="UPDATE kontakt_oddzial SET nazwa='$nazwa'
WHERE id_oddzial IN($id_oddzial)";
if(!mysql_query($rozkaz))
echo("blad");
}
/// i formularz wyswietlajacy w poli text stara nazwe
// i ew wysylajacy polecenie zmiany (zmienna "co" )
//oraz sama nowa zmienna (nazwa) no i oczywiscie id (jawnie w adresie)
print"
<FORM METHOD=POST ACTION=edycja.php?id_oddzial=$id_oddzial>
nazwa:
<INPUT TYPE=text NAME=nazwa VALUE="$st_nazwa">
<INPUT TYPE=hidden NAME=co VALUE=zm_nazwe>
<INPUT TYPE=SUBMIT VALUE=Zmien>
</FORM>";
?>
[/php]
szyszek
Posty: 12
Rejestracja: pn wrz 06, 2004 11:08 am
Lokalizacja: Gdańsk

Re: [php, mysql, html] problem z spacja w formularzu

Post autor: szyszek »

niestety sprawa nie jest taka prosta :(
przedewszystkim
[php]<?php
<INPUT TYPE=text NAME=nazwa VALUE=".$st_nazwa.">
?>[/php]
a nie
[php]<?php
<INPUT TYPE=text NAME=nazwa VALUE="$st_nazwa">
?>[/php]
"." -jako połaczenie ciągów znakowych
ale to nie rozwiazuje problemu
gdyby problem tkwil w tym co napisales skrypt nie dzialal by wcale a tutej problem tkwi tylko w danych ze spacja
Obee
Nowy
Nowy
Posty: 51
Rejestracja: czw sie 19, 2004 4:44 am
Lokalizacja: Kraków
Kontakt:

Re: [php, mysql, html] problem z spacja w formularzu

Post autor: Obee »

Zamiast wpisywania spacji naciśnie alt, i na klawiaturze numerycznej (nadal trzymając alt) wklep 0160 . W ten sposób powsanie taki znaczek: " "... znaczy spacja innego rozdaju :P
szyszek
Posty: 12
Rejestracja: pn wrz 06, 2004 11:08 am
Lokalizacja: Gdańsk

Re: [php, mysql, html] problem z spacja w formularzu

Post autor: szyszek »

problem sie rozwiazal
powinno byc
[php]<?php
<INPUT TYPE=text NAME=nazwa VALUE='$st_nazwa'>
?>[/php]
nie moglo byc " bo wszystko print-em wysylalem i jak " wstawialem to sie sie lipa robila a jak ' to sie html ladni kuma o co mi chodzi
dzieki z zwrucenie uwagi na cudzyslowy
raceCh-
Posty: 2
Rejestracja: pn wrz 06, 2004 1:26 pm
Lokalizacja: Morzyczyn
Kontakt:

Re: [php, mysql, html] problem z spacja w formularzu

Post autor: raceCh- »

Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

W kodzie "gotowym" zapomniałem wstawić \ przed "... Działałoby i z cudzysłowami... Sam miałem podobny problem, to wiem :D
CodeHunter
Posty: 1
Rejestracja: sob wrz 18, 2004 9:42 pm
Lokalizacja: Poland
Kontakt:

Re: [php, mysql, html] problem z spacja w formularzu

Post autor: CodeHunter »

Hmm a czy nie jest tak, ze standardem jest pisanie wszystkich wartosci w tagach html w cudzyslowach? Najlepiej jest zawsze stosowac cudzyslowy, wtedy uniknie sie problemow.

Kod powinien wygladac tak:

Kod: Zaznacz cały

print"
<FORM METHOD=\"POST\" ACTION=\"edycja.php?id_oddzial=$id_oddzial\">
     nazwa:
     <INPUT TYPE=\"text NAME=\"nazwa\" VALUE=\"$st_nazwa\">
     <INPUT TYPE=\"hidden\" NAME=\"co\" VALUE=\"zm_nazwe\">
     <INPUT TYPE=\"SUBMIT\" VALUE=\"Zmien\">
</FORM>"; 
lub tak (moim zdaniem lepiej):

Kod: Zaznacz cały

print (' 
<FORM METHOD="POST" ACTION="edycja.php?id_oddzial='.$id_oddzial.'">
     nazwa:
     <INPUT TYPE="text" NAME="nazwa" VALUE="'.$st_nazwa.'">
     <INPUT TYPE="hidden" NAME="co" VALUE="zm_nazwe">
     <INPUT TYPE="SUBMIT" VALUE="Zmien">
</FORM>');
szyszek
Posty: 12
Rejestracja: pn wrz 06, 2004 11:08 am
Lokalizacja: Gdańsk

Re: [php, mysql, html] problem z spacja w formularzu

Post autor: szyszek »

w sumie masz racje ale bardzo czesto po prostu przenosimy do php kawelek kodu dzialajacej juz strony napisanej wczesniej w html-u i wtedy stosjue sie najprostrze metody prowadzace do celu czyli wstawia cudzislowy tylko tam gdzie to konieczne
the_foe
Przelotem
Przelotem
Posty: 295
Rejestracja: pt sty 31, 2003 12:53 pm
Lokalizacja: Wałbrzych
Kontakt:

Re: [php, mysql, html] problem z spacja w formularzu

Post autor: the_foe »

szyszek pisze:problem sie rozwiazal
powinno byc
[php]<?php
<INPUT TYPE=text NAME=nazwa VALUE='$st_nazwa'>
?>[/php]
nie moglo byc " bo wszystko print-em wysylalem i jak " wstawialem to sie sie lipa robila a jak ' to sie html ladni kuma o co mi chodzi
dzieki z zwrucenie uwagi na cudzyslowy
mo tak, tyle bledow w jednym malym tekscie. Po pierwsze: od kiedy tagi HTML pisze sie z wIelkiej litery? Po drugie: gdzie sa apostrofy lub cudzyslowia w wartosciach?
Ponadto poczepiam sie jeszcze tego ze nikt nie mysli o wydajnosci. po co do zwyklego wyswietlania funkcja [manual]print[/manual] skoro [manual]echo[/manual] jest ok. 5x szybsze? print rozn sie od echo tylko tym ze mozemy wyciagnac informacje z printa czy cokolwiek pokazal. czyli:

[php]<?php
$a=print ("tekst");
?>[/php]

na ekranie zostanie wyswietlony teskt, a ponadto zmienna $a przyjmie wartosc 1.
W przypadku echo(), taka konstrukcja zwroci blad.

Rzeczowy przyklad nie dzialal tylko z jednego powodu, bledu w HTML. Jeszcze raz pisze ze w html wartosci piszemy w cudzysloiu (lub w apostrofie). Powinno wiec byc:[php]<?php
echo "<input type="text" name="nazwa" value="".$st_nazwa."">";
?>[/php]
lub:
[php]<?php
echo "<input type='text' name='nazwa' value='".$st_nazwa."'>";
?>[/php]
lub:
[php]<?php
echo html_entity_decode("<input type="text" name="nazwa" value="".$st_nazwa."">");
?>[/php]
ODPOWIEDZ