blob: 934be8bfea74ee81aa52828d65c34c66792340d3 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>Creating a Database Driven Application With PHP. PHP implementation of creating a record in MySQL database</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="KEYWORDS" content="CRUD, Update, Delete, MySQL, PHP, NetBeans">
<meta name="DESCRIPTION" content="Creating a Database Driven Application With PHP. PHP implementation of creating a new record in MySQL database" >
<link rel="stylesheet" type="text/css" href="../../../netbeans.css" media="screen">
</head>
<body>
<h1>Creating a Database Driven Application With PHP </h1>
<h1>Lesson 3: Creating a New Application User </h1>
<div style="margin-left:-3px">
<div class="feedback-box margin-around float-left" style="margin-right:15px">
<h4>Tutorial contents:</h4>
<ol start="0">
<li><a href="wish-list-tutorial-main-page.html">Creating a Database Driven Application With PHP - Main page</a></li>
<li><p>Creating the Database</p> <ol type="a"><li><a href="wish-list-lesson1.html">Creating a MySQL Database</a></li>
<li><a href="wish-list-oracle-lesson1.html">Creating Oracle Database Tables</a></li>
</ol></li>
<li>
<p><a href="wish-list-lesson2.html">Designing the Application. Reading from the Database</a></p>
</li>
<li><p><b>=&gt; Creating a New Application User</b></p>
<ul>
<li><a href="#previousLessonSourceCode">Application Source Code from the Previous Lesson</a></li>
<li><a href="#addLinkNewWisher">Adding a Link to Start Creating a New Wisher</a></li>
<li><a href="#implementCreateNewWisher">Creating New PHP Web Pages</a>
<li><a href="#inputFormNewWisher">Adding an HTML Form for Entering the Data of a New Wisher</a></li>
<li><a href="#validatinDataBeforeAddingToDatabase">Validating Data and Adding It to the Database</a></li>
<li><a href="#errorMessagesInInputForm">Displaying Error Messages in the Input Form</a></li>
<li><a href="#testCreateNewWisherFunctionality">Testing the Create New Wisher Functionality</a></li>
<li><a href="#lessonResultSourceCode">Application Source Code after the Current Lesson Is Completed</a></li>
</ul>
</li>
<li><a href="wish-list-lesson4.html">Optimizing the Code</a></li>
<li><a href="wish-list-lesson5.html">Adding Security. Implementing Application User Logon</a></li>
<li><a href="wish-list-lesson6.html">Adding a New Wish to the Database</a></li>
<li><a href="wish-list-lesson7.html">Updating and Deleting Entries in the Database</a></li>
<li><a href="wish-list-lesson8.html">Making the Application Look Better Using the CSS Technology</a></li>
<li><a href="wish-list-lesson9.html">Deploying the Application on a Remote Web Server</a></li>
</ol>
</div>
</div>
<img src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" class="stamp" alt="Content on this page applies to NetBeans IDE 7.2, 7.3, 7.4 and 8.0" title="Content on this page applies to the NetBeans IDE 7.2, 7.3, 7.4 and 8.0" >
<p>In this lesson you expand the application with the Create a New Wisher functionality. </p>
<p>The implementation will affect the index.php file and two new files will be created named <tt>createNewWisher.php</tt> and <tt>editWishList.php</tt>.</p>
<p>The Create a New Wisher use case consists of three steps:</p>
<p>1. <a href="#addLinkNewWisher">The user opens the front page index.php and clicks the link to register</a>.</p>
<p>2. <a href="#implementCreateNewWisher">The user switches to the createNewWisher.php page for creating a new wisher</a>. </p>
<p>3. After creating a new wisher, the user switches to editWishList.php, where he creates a wish list for the user.</p>
<img src="../../../images_www/articles/72/php/oracle-wishlist/page-flow-diagram-l3.png" alt="Page flow diagram highliting new files created in Lesson 3" height="265" width="439" class="margin-around">
<p>The current document is a part of the Creating a Database Application in the NetBeans IDE for PHP tutorial. </p>
<br style="clear:left">
<h2><a name="previousLessonSourceCode"></a>Application Source Code from the Previous Lesson</h2>
<p>MySQL users: Click <a target="_blank" href="https://netbeans.org/files/documents/4/1928/lesson2.zip">here</a> to download the source code that reflects the project state after the previous lesson is completed. </p>
<p>Oracle Database users: Click <a target="_blank" href="https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson2.zip">here</a> to download the source code that reflects the project state after the previous lesson is completed.</p>
<h2><a name="addLinkNewWisher" id="addLinkNewWisher"></a>Adding a Link to Start Creating a New Wisher </h2>
Open <tt>index.php</tt>. Add a blank line below the closing &lt;/form&gt; tag. In that blank line, enter the following code block:
<pre class="examplecode"> &lt;br&gt;Still don't have a wish list?! &lt;a href=&quot;createNewWisher.php&quot;&gt;Create now&lt;/a&gt;</pre>
<p>Where:</p>
<ul>
<li><tt>Still don't have a wish list?! </tt> is the text that will be displayed on the page next to the link. </li>
<li><tt>&lt;a href=&quot;createNewWisher.php&quot;&gt;&lt;/a&gt;</tt> is the code that implements a link that opens the createNewWisher.php page.
</li>
<li><tt>Create now</tt> is the text that will be displayed as a link.
</li>
</ul>
<h2><a name="implementCreateNewWisher" id="implementCreateNewWisher"></a>Creating New PHP Web Pages</h2>
<p>Create two new PHP web pages in your project's Source Files, as <a href="wish-list-lesson2.html#createNewFile">described</a> in Lesson 2.</p>
<ul>
<li><tt>createNewWisher.php</tt></li>
<li><tt>editWishList.php</tt></li>
</ul>
<p>In <tt>editWishList.php</tt>, add the text &quot;Hello!&quot; to the HTML body and otherwise leave it with its default content. You will modify this file in later lessons, but you need it to exist now because <tt>createNewWisher.php</tt> references it. For the remainder of this lesson, you modify <tt>createNewWisher.php</tt>.</p>
<h2><a name="inputFormNewWisher" id="inputFormNewWisher"></a>Adding an HTML Form for Entering the Data of a New Wisher </h2>
<p>Type or paste the following HTML block into <tt>createNewWisher.php</tt>, beneath the PHP block:</p>
<pre class="examplecode">&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;<br> Welcome!&lt;br&gt;<br> &lt;form action=&quot;createNewWisher.php&quot; method=&quot;POST&quot;&gt;<br> Your name: &lt;input type=&quot;text&quot; name=&quot;user&quot;/&gt;&lt;br/&gt;<br> Password: &lt;input type=&quot;password&quot; name=&quot;password&quot;/&gt;&lt;br/&gt;<br> Please confirm your password: &lt;input type=&quot;password&quot; name=&quot;password2&quot;/&gt;&lt;br/&gt;<br> &lt;input type=&quot;submit&quot; value=&quot;Register&quot;/&gt;<br> &lt;/form&gt;<br> &lt;/body&gt;
&lt;/html&gt;</pre>
<p class="notes"><strong>Note:</strong> The <tt>password</tt> type is a special type of a text field where characters are replaced with asterisks.
The code presents an <a href="wish-list-lesson3.html#htmlForm">HTML form</a> for a user to enter the name and password of the new wisher in the text fields. When the user clicks the &quot;Register&quot; button, the entered data is transferred for validation to the same page, <tt>createNewWisher.php</tt>.</p>
<p class="notes"><b>Note: </b>You can ignore warnings from the HTML validator.</p>
<h3><a name="validatinDataBeforeAddingToDatabase" id="validatinDataBeforeAddingToDatabase"></a>Validating Data and Adding It to the Database </h3>
<p>In this section you add PHP code to <tt>createNewWisher.php</tt>. Add this code to the PHP block at the top of the file. The PHP block must be above <strong>all</strong> HTML code, empty lines, or whitespace. The position of the PHP code block is important to enable correct functioning of the redirection statement. Within the PHP block, type or paste the code blocks described below in this section, in the order they are written.</p>
<p><strong>Add the following code to validate data:</strong></p>
<ol>
<li>Initialize variables. The first variables pass database credentials and the others are the variables that will be used in the PHP operations. <pre class="examplecode">
/** database connection credentials */<br>$dbHost=&quot;localhost&quot;; //on MySql
$dbXeHost=&quot;localhost/XE&quot;; <br>$dbUsername=&quot;phpuser&quot;;<br>$dbPassword=&quot;phpuserpw&quot;;
/** other variables */
$userNameIsUnique = true;
$passwordIsValid = true;
$userIsEmpty = false;
$passwordIsEmpty = false;
$password2IsEmpty = false;
</pre>
</li>
<li>Below the variables, add an <tt>if </tt>clause. The parameter of the <tt>if</tt> clause checks that the page was requested from itself via the POST method.
If not, the further validations are not performed and the page is shown with empty fields as described above.
<pre class="examplecode">/** Check that the page was requested from itself via the POST method. */
if ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;) {
}</pre>
</li>
<li>Within the curly braces of the <tt>if </tt> clause, add another <tt>if </tt> clause that checks whether the user has filled in the wisher's name. If the text field "user" is empty, the value of <tt>$userIsEmpty</tt> is changed to true. <pre class="examplecode">/** Check that the page was requested from itself via the POST method. */
if ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;) {
/** Check whether the user has filled in the wisher's name in the text field &quot;user&quot; */ <strong>
if ($_POST[&quot;user&quot;]==&quot;&quot;) {
$userIsEmpty = true;
}</strong>
}</pre>
</li>
<li><p>Add code that establishes a database connection. If the connection
cannot be established, the MySQL or Oracle OCI8 error is sent to the output.</p>
<p><b>For the MySQL database:</b></p>
<pre class="examplecode">/** Check that the page was requested from itself via the POST method. */
if ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;) {
/** Check whether the user has filled in the wisher's name in the text field &quot;user&quot; */
if ($_POST[&quot;user&quot;]==&quot;&quot;) {
$userIsEmpty = true;
}
/** Create database connection */<br>
<strong>$con = mysqli_connect($dbHost, $dbUsername, $dbPassword);<br> if (!$con) {<br> exit('Connect Error (' . mysqli_connect_errno() . ') '<br> . mysqli_connect_error());<br> }<br>//set the default client character set <br> mysqli_set_charset($con, 'utf-8');</strong>
} </pre>
<p><b>For the Oracle database:</b></p>
<pre class="examplecode">
/** Check that the page was requested from itself via the POST method. */
if ($_SERVER['REQUEST_METHOD'] == "POST") {
/** Check whether the user has filled in the wisher's name in the text field &quot;user&quot; */
if ($_POST['user'] == "") {
$userIsEmpty = true;
}
/** Create database connection */<br>
<strong>$con = oci_connect($dbUsername, $dbPassword, $dbXeHost, &quot;AL32UTF8&quot;);
if (!$con) {
$m = oci_error();
exit('Connect Error' . $m['message']);
}</strong>
}</pre>
</li>
<li>Add code that checks whether a user whose name matches the &quot;user&quot; field already exists. The code does this by trying to find a wisher ID number for a name matching the name in the &quot;user&quot; field. If such an ID number exists, the value of <tt>$userNameIsUnique</tt> is changed to &quot;false.&quot;
<p><b>For the MySQL database:</b></p>
<pre class="examplecode">/** Check that the page was requested from itself via the POST method. */
if ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;) {
/** Check whether the user has filled in the wisher's name in the text field &quot;user&quot; */
if ($_POST[&quot;user&quot;]==&quot;&quot;) {
$userIsEmpty = true;
}<br>
/** Create database connection */<br> $con = mysqli_connect($dbHost, $dbUsername, $dbPassword);<br> if (!$con) {<br> exit('Connect Error (' . mysqli_connect_errno() . ') '<br> . mysqli_connect_error());<br> }<br> <strong>/**set the default client character set */ <br> mysqli_set_charset($con, 'utf-8');</strong>
<strong>/** Check whether a user whose name matches the &quot;user&quot; field already exists */</strong><br>
<strong>mysqli_select_db($con, &quot;wishlist&quot;);
$user = mysqli_real_escape_string($con, $_POST[&quot;user&quot;]);<br> $wisher = mysqli_query($con, &quot;SELECT id FROM wishers WHERE name='&quot;.$user.&quot;'&quot;);<br> $wisherIDnum=mysqli_num_rows($wisher);<br> if ($wisherIDnum) {<br> $userNameIsUnique = false;<br> }</strong>
} </pre>
<p><b>For the Oracle database:</b></p>
<pre class="examplecode">/** Check that the page was requested from itself via the POST method. */
if ($_SERVER['REQUEST_METHOD'] == "POST") {
/** Check whether the user has filled in the wisher's name in the text field &quot;user&quot; */
if ($_POST['user'] == "") {
$userIsEmpty = true;
}
/** Create database connection */<br>
$con = oci_connect($dbUsername, $dbPassword, $dbXeHost, &quot;AL32UTF8&quot;);
if (!$con) {
$m = oci_error();
exit('Connection Error ' . $m['message']);
}
<strong>/** Check whether a user whose name matches the &quot;user&quot; field already exists */</strong>
<strong>$query = "SELECT id FROM wishers WHERE name = :user_bv";
$stid = oci_parse($con, $query);
$user = $_POST['user'];
$wisherID = null;
oci_bind_by_name($stid, ':user_bv', $user);
oci_execute($stid);
// Each user name should be unique. Check if the submitted user already exists.
$row = oci_fetch_array($stid, OCI_ASSOC);
if ($row){
$userNameIsUnique = false;
}</strong>
}</pre>
</li>
<li>After the code that checks if the user is unique, add a series of <tt>if </tt>clauses that check whether the user entered and confirmed a password correctly.
The code checks that the Password (&quot;password&quot;) and Confirm Password ('password2) fields are not empty in the form and that they are identical. Otherwise the values of the corresponding boolean variables are changed accordingly.
<pre class="examplecode">if ($_POST[&quot;password&quot;]==&quot;&quot;) {<br> $passwordIsEmpty = true;
}<br>if ($_POST[&quot;password2&quot;]==&quot;&quot;) {<br> $password2IsEmpty = true;
}<br>if ($_POST[&quot;password&quot;]!=$_POST[&quot;password2&quot;]) {<br> $passwordIsValid = false;
} </pre>
</li>
<li>
<p>Complete the <tt>if ($_SERVER['REQUEST_METHOD'] == "POST")</tt> clause by adding code that inserts a new entry into the &quot;wishers&quot; database. The code checks that the name of the wisher is specified uniquely and that the password is entered and confirmed validly. If the conditions are met, the code takes the &quot;user&quot; and &quot;password&quot; values from the HTML form and inserts them into the Name and Password columns, respectively, of a new row in the wishers database. After creating the row, the code closes the database connection and redirects the application to the page <tt>editWishList.php</tt>.</p>
<p><b>For the MySQL database:</b></p>
<pre class="examplecode">/** Check that the page was requested from itself via the POST method. */
if ($_SERVER['REQUEST_METHOD'] == "POST") {
/** Check whether the user has filled in the wisher's name in the text field "user" */
if ($_POST['user'] == "") {
$userIsEmpty = true;
}
/** Create database connection */
$con = mysqli_connect($dbHost, $dbUsername, $dbPassword);
if (!$con) {
exit('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
//set the default client character set
mysqli_set_charset($con, 'utf-8');
/** Check whether a user whose name matches the "user" field already exists */
mysqli_select_db($con, "wishlist");
$user = mysqli_real_escape_string($con, $_POST['user']);
$wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='".$user."'");
$wisherIDnum=mysqli_num_rows($wisher);
if ($wisherIDnum) {
$userNameIsUnique = false;
}
/** Check whether a password was entered and confirmed correctly */
if ($_POST['password'] == "") {
$passwordIsEmpty = true;
}
if ($_POST['password2'] == "") {
$password2IsEmpty = true;
}
if ($_POST['password'] != $_POST['password2']) {
$passwordIsValid = false;
}
/** Check whether the boolean values show that the input data was validated successfully.
* If the data was validated successfully, add it as a new entry in the "wishers" database.
* After adding the new entry, close the connection and redirect the application to editWishList.php.
*/
<strong>if (!$userIsEmpty && $userNameIsUnique && !$passwordIsEmpty && !$password2IsEmpty && $passwordIsValid) {
$password = mysqli_real_escape_string($con, $_POST['password']);
mysqli_select_db($con, "wishlist");
mysqli_query($con, "INSERT wishers (name, password) VALUES ('" . $user . "', '" . $password . "')");
mysqli_free_result($wisher);
mysqli_close($con);
header('Location: editWishList.php');
exit;
}</strong>
}</pre>
<p><b>For the Oracle database:</b></p>
<pre class="examplecode">/** Check that the page was requested from itself via the POST method. */
if ($_SERVER['REQUEST_METHOD'] == "POST") {
/** Check whether the user has filled in the wisher's name in the text field "user" */
if ($_POST['user'] == "")
$userIsEmpty = true;
/** Create database connection */
$con = oci_connect($dbUsername, $dbPassword, $dbXeHost, &quot;AL32UTF8&quot;);
if (!$con) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
/** Check whether a user whose name matches the "user" field already exists */
$query = "select ID from wishers where name = :user_bv";
$stid = oci_parse($con, $query);
$user = $_POST['user'];
$wisherID = null;
oci_bind_by_name($stid, ':user_bv', $user);
oci_execute($stid);
/**Each user name should be unique. Check if the submitted user already exists. */
$row = oci_fetch_array($stid, OCI_ASSOC);
if ($row) {
$wisherID = $row['ID'];
}
if ($wisherID != null) {
$userNameIsUnique = false;
}
//Check for the existence and validity of the password
if ($_POST['password'] == "") {
$passwordIsEmpty = true;
}
if ($_POST['password2'] == "") {
$password2IsEmpty = true;
}
if ($_POST['password'] != $_POST['password2']) {
$passwordIsValid = false;
}
/** Check whether the boolean values show that the input data was validated successfully.
* If the data was validated successfully, add it as a new entry in the "wishers" database.
* After adding the new entry, close the connection and redirect the application to editWishList.php.
*/
<strong>if (!$userIsEmpty && $userNameIsUnique && !$passwordIsEmpty && !$password2IsEmpty && $passwordIsValid) {
$query = "INSERT INTO wishers (name, password) VALUES (:user_bv, :pwd_bv)";
$stid = oci_parse($con, $query);
$pwd = $_POST['password'];
oci_bind_by_name($stid, ':user_bv', $user);
oci_bind_by_name($stid, ':pwd_bv', $pwd);
oci_execute($stid);
oci_free_statement($stid);
oci_close($con);
header('Location: editWishList.php');
exit;
}</strong>
}</pre>
</li>
</ol>
<h2><a name="errorMessagesInInputForm" id="errorMessagesInInputForm"></a>Displaying Error Messages in the Input Form</h2>
<p>Now you implement the display of error messages when the entered data is invalid. The implementation is based on the validations and changes to the values of the boolean variables described in <a href="#validatinDataBeforeAddingToDatabase">Validating Data and Adding It to the Database</a>. </p>
<ol>
<li>Enter the following PHP code block inside the HTML input form, below the wisher's name input:
<pre class="examplecode">Welcome!&lt;br&gt;<br>&lt;form action=&quot;createNewWisher.php&quot; method=&quot;POST&quot;&gt;<br> Your name: &lt;input type=&quot;text&quot; name=&quot;user&quot;/&gt;&lt;br/&gt;
<br>
<strong>&lt;?php
if ($userIsEmpty) {
echo (&quot;Enter your name, please!&quot;);
echo (&quot;&lt;br/&gt;&quot;);
}
if (!$userNameIsUnique) {
echo (&quot;The person already exists. Please check the spelling and try again&quot;);
echo (&quot;&lt;br/&gt;&quot;);
}
?&gt; </strong></pre>
</li>
<li>Enter the following
PHP code block inside the HTML input form below the code for the password input:
<pre class="examplecode">Password: &lt;input type=&quot;password&quot; name=&quot;password&quot;/&gt;&lt;br/&gt;
<br>
<strong>&lt;?php
if ($passwordIsEmpty) {
echo (&quot;Enter the password, please!&quot;);
echo (&quot;&lt;br/&gt;&quot;);
}
?&gt;</strong></pre>
</li>
<li>Enter the following PHP code blocks inside the HTML input form below the code for password confirmation:
<pre class="examplecode">Please confirm your password: &lt;input type=&quot;password&quot; name=&quot;password2&quot;/&gt;&lt;br/&gt;
<br>
<strong>&lt;?php
if ($password2IsEmpty) {
echo (&quot;Confirm your password, please&quot;);
echo (&quot;&lt;br/&gt;&quot;);
}
if (!$password2IsEmpty &amp;&amp; !$passwordIsValid) {
echo (&quot;The passwords do not match!&quot;);
echo (&quot;&lt;br/&gt;&quot;);
}
?&gt;</strong></pre>
</li>
</ol>
<h3> <a name="testCreateNewWisherFunctionality"></a>Testing the Create New Wisher Functionality</h3>
<ol>
<li>Run the application. The index page opens.<br>
<img src="../../../images_www/articles/72/php/wish-list-lesson3/index-php-3.png" alt="The main application page index.php with two options: Viewing the wish list of a person and creating a wish list" class="margin-around"></li>
<li>On the index page, click the link next to the text Still don't have a wish list? The following form opens:<br>
<img src="../../../images_www/articles/72/php/wish-list-lesson3/create-new-wisher-empty-form.png" alt="An empty form for registering as a wisher" class="margin-around"></li>
<li>Leave the fields empty and click Register. An error message displays.<br>
<img src="../../../images_www/articles/72/php/wish-list-lesson3/create-new-wisher-name-empty.png" alt="The wisher registration form with an error message: the name is not filled in" class="margin-around"></li>
<li>Enter the name of a registered wisher, for example, Tom in the Your name field, fill in the other fields correctly, and click Register. An error message displays.</li>
<li>Fill in the Password and Please confirm your password fields with different values and click Register. An error message displays.</li>
<li>Enter Bob in the Your name field, specify the same password in both password fields and click Register. The page that opens is empty but the redirection passed correctly as the URL ends with editWishList.php:<br>
<img src="../../../images_www/articles/72/php/wish-list-lesson3/edit-wish-list-empty.png" alt="The editWishList.php page with a welcome greeting" class="margin-around"></li>
<li>To check that the data is stored in the database, navigate to wishers on the Services window below the wislist1 node and from the context menu choose View Data <br><img src="../../../images_www/articles/72/php/wishlist/wishers.png" alt="Viewing the data in the database using the NetBeans IDE interface: the new wisher Bob has been added" class="margin-around b-all"></li>
</ol>
<h2><a name="lessonResultSourceCode"></a>Application Source Code after the Current Lesson Is Completed </h2>
<p>MySQL users: Click <a target="_blank" href="https://netbeans.org/files/documents/4/1929/lesson3.zip">here</a> to download the source code that reflects the project state after the lesson is completed.</p>
<p>Oracle Database users: Click <a target="_blank" href="https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson3.zip">here</a> to download the source code that reflects the project state after the lesson is completed.</p>
<h2><a name="nextSteps"></a>Next Steps</h2>
<p><a href="wish-list-lesson2.html">&lt;&lt; Previous lesson</a></p>
<p><a href="wish-list-lesson4.html">Next lesson &gt;&gt;</a> </p>
<p><a href="wish-list-tutorial-main-page.html">Back to the Tutorial main page</a>
</p><br>
<div class="feedback-box" ><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20PHP%20Wish%20List%20CRUD%203:%20Creating%20New%20User">Send Feedback on This Tutorial</a></div>
<br style="clear:both;" >
<p>To send comments and suggestions, get support, and keep informed on the latest
developments on the NetBeans IDE PHP development features, <a href="../../../community/lists/top.html">join
the users@php.netbeans.org mailing list</a>.</p>
<p><a href="../../trails/php.html">Back to the PHP Learning Trail</a><br>
</p>
</body>
</html>