mirror of
https://github.com/php/doc-tr.git
synced 2026-03-23 23:02:09 +01:00
357 lines
12 KiB
XML
357 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 9e6c3416c5c285f807a734e4663c399612777d7e Maintainer: nilgun Status: ready -->
|
||
<chapter xml:id="faq.html" xmlns="http://docbook.org/ns/docbook">
|
||
<title>PHP ve HTML</title>
|
||
<titleabbrev>PHP ve HTML</titleabbrev>
|
||
|
||
<para>
|
||
PHP ve HTML etkileşir: PHP, HTML üretir; HTML, PHP'ye bilgi aktarır. Bu
|
||
SSS'yi okumaya başlamadan önce
|
||
<link linkend="language.variables.external">değişkenlerin dış
|
||
kaynaklardan</link> nasıl elde edildiğini öğrenmiş olmanız önemlidir. Bu
|
||
konu ile igili kılavuz sayfası ayrıca örnekler de içerir.
|
||
</para>
|
||
|
||
<qandaset>
|
||
<qandaentry xml:id="faq.html.encoding">
|
||
<question>
|
||
<para>
|
||
Bir değeri bir form veya URL üzerinden aktarırken nasıl kodlamak
|
||
gerekir?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Hangi kodlamanın hangi aşamada kullanılacağı önemlidir. İçeriğini
|
||
kodlamaksızın aktarmak istediğiniz <type>string</type> türünde
|
||
<varname>$data</varname> diye bir değişkeniniz olduğunu varsayalım.
|
||
Aşamalar şunlardır:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
HTML yorumlaması. Rasgele bir dizgeyi belirtirken dizgeyi çift
|
||
tırnak içine almanız ve değerin tamamına
|
||
<function>htmlspecialchars</function> uygulamanız
|
||
<emphasis>gerekir</emphasis>.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
URL: Bir URL çeşitli parçalardan oluşur. Verinizin tek bir öğe
|
||
olarak yorumlanmasını isterseniz, veriyi
|
||
<function>urlencode</function> ile kodlamanız
|
||
<emphasis>gerekir</emphasis>.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>- Gizli bir HTML form elemanı</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
echo '<input type="hidden" value="' . htmlspecialchars($data) . '" />'."\n";
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
<note>
|
||
<simpara>
|
||
<varname>$data</varname> için <function>urlencode</function>
|
||
kullanmak yanlıştır, çünkü veriyi <function>urlencode</function>
|
||
türünde kodlamak tarayıcının sorumluluğundadır. Bunun yöntemden (yani
|
||
GET veya POST) bağımsız oluşuna dikkat ediniz. Bunu sadece GET
|
||
isteklerinde farkedersiniz, çünkü POST istekleri normalde gizlidir.
|
||
</simpara>
|
||
</note>
|
||
<example>
|
||
<title>- Kullanıcı tarafından düzenlenen veri</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
echo "<textarea name='mydata'>\n";
|
||
echo htmlspecialchars($data)."\n";
|
||
echo "</textarea>";
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
<note>
|
||
<simpara>
|
||
Umulduğu gibi veri tarayıcıda gösterilir, çünkü HTML öncelemeli
|
||
simgeleri tarayıcının yorumlaması gerekir.
|
||
</simpara>
|
||
<simpara>
|
||
Verinin GET veya POST üzerinden gönderiminde veri aktarılırken
|
||
tarayıcı tarafından kodlanır (urlencode) ve bu kodlama PHP tarafından
|
||
çözülür (urldecode). Böylece, sizin kodlamayla ilgili birşeyler
|
||
yapmanız gerekmez, herşey otomatik olarak gerçekleşir.
|
||
</simpara>
|
||
</note>
|
||
<example>
|
||
<title>- Bir URL içinde</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
echo '<a href="' . htmlspecialchars("/nextpage.php?stage=23&data=" .
|
||
urlencode($data)) . '">'."\n";
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
<note>
|
||
<simpara>
|
||
Aslında bir HTML GET isteğini taklit ettiğinizden veriye
|
||
<function>urlencode</function> uygulamanız gerekmez.
|
||
</simpara>
|
||
</note>
|
||
<note>
|
||
<simpara>
|
||
URL, bir HTML özniteliğinin değeri olduğundan URL'nin tümüne
|
||
<function>htmlspecialchars</function> kodlaması uygulamanız gerekir.
|
||
Bu durumda, tarayıcı değere <function>htmlspecialchars</function>
|
||
çözümlemesi uyguladıktan sonra URL olarak aktarır. PHP, URL'yi doğru
|
||
olarak algılayacaktır, çünkü veriye <function>urlencode</function>
|
||
uygulamışsınızdır.
|
||
</simpara>
|
||
<simpara>
|
||
URL'deki <literal>&</literal> yerine <literal>&amp;</literal>
|
||
yazıldığını farkedeceksiniz. Çoğu tarayıcı bunu sizin yerinize
|
||
yaptığından bunu yapmayı unutsanız da o kadar önemli değildir. Ancak,
|
||
URL'niz dinamik olmasa bile, URL'ye
|
||
<function>htmlspecialchars</function> uygulamanız
|
||
<emphasis>gerekir</emphasis>.
|
||
</simpara>
|
||
</note>
|
||
</para>
|
||
<!-- TODO: a note about addgpcslashes? -->
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.html.form-image">
|
||
<question>
|
||
<para>
|
||
Bir <input type="image"> etiketi kullanmayı deniyorum, ama
|
||
<varname>$foo.x</varname> ve <varname>$foo.y</varname> değişkenlerini
|
||
bulamıyorum. <varname>$_GET['foo.x']</varname> mevcut değil mi? Bunlar
|
||
neredeler?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Bir formu göndermek için bir gönderi düğmesi yerine aşağıdaki gibi bir
|
||
görüntü kullanmak da mümkündür:
|
||
<programlisting role="html">
|
||
<![CDATA[
|
||
<input type="image" src="dugme.gif" name="foo" />
|
||
]]>
|
||
</programlisting>
|
||
Kullanıcı bu görüntünün herhangi bir yerine tıkladığında sunucuya formla
|
||
birlikte ek olarak <varname>foo.x</varname> ve <varname>foo.y</varname>
|
||
diye iki değişken aktarılır.
|
||
</para>
|
||
<para>
|
||
<varname>foo.x</varname> ve <varname>foo.y</varname> PHP'de geçersiz
|
||
değişken isimleri olduklarından sihirli bir şekilde bunlar
|
||
<varname>foo_x</varname> ve <varname>foo_y</varname> değişkenlerine
|
||
dönüşürler. Yani, nokta imi yerine altçizgi imi yerleştirilir.
|
||
Dolayısıyla, bu değişkenlere <link
|
||
linkend="language.variables.external">dış kaynaklı değişkenler</link>
|
||
bölümünde açıkladığı gibi erişebilirsiniz. Örnek:
|
||
<varname>$_GET['foo_x']</varname>.
|
||
<note>
|
||
<para>
|
||
İstekle aktarılan değişken isimlerindeki boşluklar da alçizgi imleri
|
||
ile değiştirilir.
|
||
</para>
|
||
</note>
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.html.arrays">
|
||
<question>
|
||
<para>Bir HTML <form>'unda dizileri nasıl oluşturabilirim?</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
<form> sonucunu bir <link linkend="language.types.array"
|
||
>dizi</link> olarak göndermek için PHP betğinizde <input>,
|
||
<select> veya <textarea> elemanlarını şöyle isimlendirmeniz
|
||
gerekir:
|
||
<programlisting role="html">
|
||
<![CDATA[
|
||
<input name="Dizim[]" />
|
||
<input name="Dizim[]" />
|
||
<input name="Dizim[]" />
|
||
<input name="Dizim[]" />
|
||
]]>
|
||
</programlisting>
|
||
Değişken isimlerinden sonra gelen köşeli ayraçları farketmişsinizdir.
|
||
Bunlar değişkeni bir dizi haline getirirler. Farklı elemanlara aynı
|
||
dizi isimlerini atamak suretiyle elemanları farklı diziler içinde
|
||
gruplayabilirsiniz:
|
||
<programlisting role="html">
|
||
<![CDATA[
|
||
<input name="Dizim[]" />
|
||
<input name="Dizim[]" />
|
||
<input name="ÖbürDizim[]" />
|
||
<input name="ÖbürDizim[]" />
|
||
]]>
|
||
</programlisting>
|
||
Bu örnekte PHP betiğine gönderilmek üzere iki dizi üretilmektedir:
|
||
Dizim ve ÖbürDizim. Dizilerinize ayrıca özel anahtarlar atamanız da
|
||
mümkündür:
|
||
<programlisting role="html">
|
||
<![CDATA[
|
||
<input name="DiğerDizim[]" />
|
||
<input name="DiğerDizim[]" />
|
||
<input name="DiğerDizim[eposta]" />
|
||
<input name="DiğerDizim[telefon]" />
|
||
]]>
|
||
</programlisting>
|
||
Burada, DiğerDizim dizisi 0, 1, eposta ve telefon anahtarlarını
|
||
içerecektir.
|
||
</para>
|
||
<para>
|
||
<note>
|
||
<para>
|
||
HTML'de dizi anahtarlarını belirtmek isteğe bağlıdır. Anahtar
|
||
belirtmezseniz, dizi elemanları formda yer alış sırasına göre
|
||
numaralanır. Örneğimizde anahtarlar 0, 1, 2 ve 3 olacaktır.
|
||
</para>
|
||
</note>
|
||
</para>
|
||
<para>
|
||
Ayrıca bakınız:
|
||
<link linkend="ref.array">Dizi İşlevleri</link> ve
|
||
<link linkend="language.variables.external">Dış Kaynaklı Değişkenler
|
||
</link>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.html.select-multiple">
|
||
<question>
|
||
<para>
|
||
Çok HTML etiketli bir select etiketinden tüm sonuçları nasıl alırım?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Bir HTML'deki çok seçenekli bir select oluşumu kullanıcıların bir
|
||
listeden çok sayıda öğe seçebilmesini mümkün kılar. Seçilen öğeler form
|
||
için atanmış bir eylemciye aktarılırlar. Burada sorun, hepsinin aynı
|
||
değişken ismiyle aktarılmasıdır. Örnek:
|
||
<programlisting role="html">
|
||
<![CDATA[
|
||
<select name="var" multiple="yes">
|
||
]]>
|
||
</programlisting>
|
||
Seçilen her seçenek eylemciye şöyle aktarılacaktır:
|
||
<programlisting>
|
||
var=seçim1
|
||
var=seçim2
|
||
var=seçim3
|
||
</programlisting>
|
||
Her seçenek bir önceki <varname>$var</varname> değişkeninin içeriğinin
|
||
üzerine yazacaktır. Çözüm, değişken ismi olarak dizi kullanmaktır:
|
||
<programlisting role="html">
|
||
<![CDATA[
|
||
<select name="var[]" multiple="yes">
|
||
]]>
|
||
</programlisting>
|
||
Bu satır PHP'ye <varname>$var</varname> değişkenini bir dizi olarak ele
|
||
almasını ve her seçeneğin içeriği için bir dizi elemanı eklemesini
|
||
söyler. İlk seçim <varname>$var[0]</varname>, ikincisi
|
||
<varname>$var[1]</varname>, vs. olur. Kaç seçeneğin seçilmiş olduğunu
|
||
<function>count</function> işlevi ile öğrenebilir veya gerekirse
|
||
<function>sort</function> işleviyle seçenek dizisini sıraya
|
||
sokabilirsiniz.
|
||
</para>
|
||
<para>
|
||
JavaScript kullanıyorsanız eleman ismindeki <literal>[]</literal>
|
||
ayraçları, elemanlara isimleriyle başvururken sorun çıkarabilir. Ya
|
||
eleman anahtarı yerine sayısal biçimi kullanın ya da değişken
|
||
isimlerini tek tırnak içine alıp bunları dizi elemanlarını indislemekte
|
||
kullanın. Örnek:
|
||
<programlisting>
|
||
variable = document.forms[0].elements['var[]'];
|
||
</programlisting>
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.html.javascript-variable">
|
||
<question>
|
||
<para>
|
||
Bir değişkeni Javascript'ten PHP'ye nasıl aktarabilirim?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Javascript'in (normal olarak) istemci taraflı, PHP'nin sunucu taraflı
|
||
olması ve HTTP'nin de 'durumsuz' bir protokol olması nedeniyle iki dil
|
||
değişkenleri doğrudan paylaşamazlar.
|
||
</para>
|
||
<para>
|
||
Bununla birlikte, ikisi arasında değişken alışverişi mümkündür. Bunu
|
||
sağlamanın tek yolu Javascript kodunu PHP ile üretmek ve tarayıcıya
|
||
tazeletip özel değişkenleri gerisin geriye PHP'ye aktarmaktır.
|
||
Aşağıdaki örnekte bunun nasıl yapıldığı ayrıntılı olarak
|
||
gösterilmiştir. Normalde sadece istemci tarafında mümkün olan ekran
|
||
yüksekliği ve genişliğinin elde edilmesi PHP kodunda gerçeklenmektedir.
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>- PHP ile Javascript üretimi</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
if (isset($_GET['width']) AND isset($_GET['height'])) {
|
||
// Boyut değişkenlerini çıktılayalım
|
||
echo "Ekran genişliği: ". $_GET['width'] ."<br />\n";
|
||
echo "Ekran yüksekliği: ". $_GET['height'] ."<br />\n";
|
||
} else {
|
||
// Boyut değişkenlerini aktaralım
|
||
// (özgün sorgu dizgesini koruyalım
|
||
// -- post değişkenleri farklı şekilde elde edilecek)
|
||
|
||
echo "<script language='javascript'>\n";
|
||
echo " location.href=\"{$_SERVER['SCRIPT_NAME']}?{$_SERVER['QUERY_STRING']}"
|
||
. "&width=\" + screen.width + \"&height=\" + screen.height;\n";
|
||
echo "</script>\n";
|
||
exit();
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting></example>
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
</qandaset>
|
||
</chapter>
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|