﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="generator" content="Adobe RoboHelp 8">
<title>Basic Tutorials</title>
<link rel="StyleSheet" href="default.css" type="text/css">
<style type="text/css">
<!--
body { border-left-style:None;
border-right-style:None;
border-bottom-style:None;
background-color:Transparent;
border-top-style:None; }
-->
</style>
<style type="text/css">
<!--
body { border-left-style:None;
border-right-style:None;
border-bottom-style:None;
background-color:Transparent;
border-top-style:None; }
-->
</style>
<script type="text/javascript" language="JavaScript">
//<![CDATA[
function reDo() {
  if (innerWidth != origWidth || innerHeight != origHeight)
     location.reload();
}
if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
	origWidth = innerWidth;
	origHeight = innerHeight;
	onresize = reDo;
}
onerror = null; 
//]]>
</script>
<style type="text/css">
<!--
div.WebHelpPopupMenu { position:absolute;
left:0px;
top:0px;
z-index:4;
visibility:hidden; }
p.WebHelpNavBar { text-align:right; }
-->
</style>
<script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>
<script type="text/javascript" language="javascript" src="whver.js"></script>
<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>
<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>
<script type="text/javascript" language="javascript1.2" src="whlang.js"></script>
<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>
<script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.gbWhTopic)
{
	var strUrl = document.location.href;
	var bc = 0;
	var n = strUrl.toLowerCase().indexOf("bc-");
	if(n != -1)
	{
		document.location.href = strUrl.substring(0, n);
		bc = strUrl.substring(n+3);
	}

	if (window.setRelStartPage)
	{
	addTocInfo("Getting Started\nBasic Tutorials");
addAvenueInfo("Getting Started","quick_start.htm","creating_and_uploading_a_project.htm");

	}

	document.write("<p style=\"text-align:left\"> ");
AddMasterBreadcrumbs("ide_help.htm", "", "&gt;", "Home", "pdt_table_of_contents.htm");
document.write("<a href=\"getting_started.htm\">Getting Started<\/a> &gt; Basic Tutorials<\/p>");


	if (window.setRelStartPage)
	{
	setRelStartPage("ide_help.htm");

		autoSync(0);
		sendSyncInfo();
		sendAveInfoOut();
	}

}
else
	if (window.gbIE4)
		document.location.reload();
//-->
//]]></script>
</head>
<body leftmargin="5" topmargin="5" rightmargin="5" bottommargin="5"><script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.writeIntopicBar)
	writeIntopicBar(4);
//-->
//]]></script>
<div style="width: 100%; position: relative;" id="header">
	
	
 <p align="right"><a 
	 title="Documentation Survey" href="http://spreadsheets.google.com/viewform?formkey=dC1scEswTjFia2tDQ3Y5TVJBbkNQcWc6MQ">Documentation 
	 Survey</a> 
	 | <a href="javascript:crlf=&quot;&quot;;h=location.href;t=document.title;e = &quot;&quot; + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (e!=null) location=&quot;mailto:documentation@zend.com&quot; + &quot;?Subject= Feedback on PDT for page &quot; + escape(t) + &quot;&amp;Body=&quot; + escape(e).replace(/ /g, &quot;+&quot;) + crlf + &quot; &quot;; void 0"><span 
	 style="background-color: #ffffff;">Submit Documentation</span><span 
	 style="background-color: #ffffff;"> Feedback</span></a><span 
	 style="background-color: #ffffff;"></span><span style="background-color: #ffffff;"> 
	 </span><span style="background-color: #ffffff;">| 
	 </span><span 
	 style="background-color: #ffffff;"><a title="View Latest Version and Get PDF Online" 
											 href="http://www.zend.com/en/resources/zend-documentation/" 
											 target="_blank">View Latest 
	 Version and Get PDF Online</a></span></p>
</div>



<h1>Basic Tutorials
</h1>

<p>The Basic Tutorials section contains short tutorials on popular tasks that can be performed with PDT
. Each tutorial covers workflow issues from A-Z describing the processes and workflow that should be followed in order to complete the tasks.</p>
<p>&#160;</p>
<p>Get up and running with one of these tutorials:</p>
<p>&#160;</p>
<table cellspacing="0" width="100%">
<col style="width: 50%;">
<col style="width: 50%;">
<tr valign="top">
<td style="width: 50%; padding-right: 10px; padding-left: 10px;">
<p><a href="creating_and_uploading_a_project.htm">Creating Projects and Files</a></p>
</td>
<td style="width: 50%; padding-right: 10px; padding-left: 10px;">
<p>&nbsp;</p></td>
</tr>
<tr valign="top">
<td style="width: 50%; padding-right: 10px; padding-left: 10px;">
<p><a href="working_with_code_assist.htm">Working with Content Assist</a></p>
</td>
<td style="width: 50%; padding-right: 10px; padding-left: 10px;">
<p>&nbsp;</p></td>
</tr>
<tr valign="top">
<td style="width: 50%; padding-right: 10px; padding-left: 10px;">
<p><a href="working_with_the_debugger.htm">Working with the Debugger</a></p>
</td>
<td style="width: 50%; padding-right: 10px; padding-left: 10px;">
<p>&nbsp;</p></td>
</tr>



<tr valign="top"><td style="width: 50%; padding-right: 10px; padding-left: 10px;">
<p>&nbsp;</p></td>
<td style="width: 50%; padding-right: 10px; padding-left: 10px;">
<p>&#160;</p>
</td>
</tr>
</table>
<div style="width: 100%; position: relative;" id="footer">
	
 <p style="text-decoration: underline; " 
										 align="center">PHP Development 
	 Tools</p>
	
	
</div>
<script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.writeIntopicBar)
	writeIntopicBar(0);

highlightSearch();
//-->
//]]></script>
</body>
</html>
