1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-23 23:02:09 +01:00
Files
archived-doc-tr/faq/html.xml
2024-02-24 19:52:25 +00:00

357 lines
12 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>&amp;</literal> yerine <literal>&amp;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 &lt;input type="image"&gt; 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 &lt;form&gt;'unda dizileri nasıl oluşturabilirim?</para>
</question>
<answer>
<para>
&lt;form&gt; sonucunu bir <link linkend="language.types.array"
>dizi</link> olarak göndermek için PHP betğinizde &lt;input&gt;,
&lt;select&gt; veya &lt;textarea&gt; 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
-->