65.9K
CodeProject 正在变化。 阅读更多。
Home

PHP A 到 Z。

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (35投票s)

2013年6月25日

CPOL

11分钟阅读

viewsIcon

104974

PHP 开发教程。

引言

A...

他们说 PHP、C# 和 Java 是最受欢迎和最偏爱的编程语言。为什么 PHP 如此受欢迎?PHP 的定义是服务器端脚本语言。它是一门非常简单但功能强大的语言。如今,网络发展日新月异,对 Web 开发的需求极其迫切。市面上有很多即用型的网站设计/模板,可以购买、租用甚至免费获取。当然,其中一些网站功能齐全,非常惊艳。但通常情况下,对于一个特定的项目或某种创新,很难找到合适的模板或现成的网页。从头开始设计一个实时的 PHP 网页/网站/Web 平台/Web 门户并非易事。

在这篇文章中,我将引导您掌握开发自己的 PHP Web 门户所需的基本知识,教您一些基本的 HTML、基础编程、表单输入验证、读取、写入和编辑 MySQL 数据库等。  

服务器

当然,一开始您需要将网站托管在某个地方。最佳解决方案是从一些专业的托管公司购买 Web 托管套餐(此处不提及任何公司)。您可以购买一个 Linux 套餐,其中已经预装了 1. HTTP Web 服务器,2. MySQL 服务器,3. PHP 本身。

如果您需要拥有自己的服务器,那么可以通过专用软件包轻松设置所有这些,例如 Windows 的 WAMP、Mac OS X 的 MAMP、Linux 的 LAMP 等。我们只提一下,这些软件包会安装并通常配置好我们所需的所有东西:Apache HTTP 服务器、MySQL 服务器和 PHP。

开始学习 PHP 之前

在开始 PHP 编程课程之前,您需要了解一些其他事情。

首先要了解的是 HTML 标签。HTML 标签或元素实际上是包含在尖括号 <…> 中的关键字,它们就像是 Web 浏览器的“命令”,例如,如果存在 <b> 标签,则此标签之后的任何文本都将以粗体显示。就像我们在文字处理器中一样,我们想让某个文本块变粗,需要选中它,这样就会有开始点和结束点,所以如果我们想让某些文本变粗,应该开始粗体,输入文本,然后结束粗体,就像这样:<b>这是粗体文本</b>,在浏览器中输出将是这是粗体文本,当然,它将显示为没有开始和结束标签。通常 HTML 标签成对出现,如:<...>这里有一些内容</…>,其中斜杠表示“这里是标签块的结束”。

如果您想开发 PHP 网站,您绝对应该完美地学习表格 HTML 标签:<table>、<tr> 和 <td>,如果您还不了解,请立即去学习。学完之后,立即去学习 HTML 表单,我们将需要它们来输入姓名、城市、价格、上传图片或文件等数据……

第二件您应该了解的事情是数据库。当然,数据库是“海洋”,但没有它们,就不会有任何会计软件、超市软件、电话数据库等。初学者了解如何创建/编辑表、使用 MySQL phpMyAdmin 和理解简单的“SELECT”SQL 命令就足够了。

第三件基本的事情是了解 FTP。FTP 代表文件传输协议,它实际上是一种软件,可以实现您的计算机与服务器之间的连接和文件传输,所以通过 FTP,我们将把 PHP 程序发送到我们的服务器。

第四件事是选择您的 PHP 编辑器。我个人使用 Notepad++,它易于使用且免费。它还集成了简单的且非常实用的 FTP 功能,因此在编写一些代码后,只需按“上传文件”按钮,您的文件就会立即发送到服务器,您可以立即进行测试。

第五件(但不是最后一件)事情是在我们生成的 HTML 中使用 JavaScript。让我向您澄清一下,PHP 代码驻留在服务器上并在此执行,用户无法访问,但 JavaScript 代码由您的 Web 浏览器执行,任何人都可以访问。

我们的第一个 PHP 代码 

首先要知道的是代码应该放在哪里。PHP 代码放在 <?php … ?> 标签内,所以这个标签内的任何内容都应该是 PHP。让我们看一个非常简单的例子
<?php
    echo ‘This is first line<br>’;
    echo ‘This is second line’;
?>

echo 命令是一个非常简单且非常重要的命令,它将文本发送到我们的 Web 浏览器,在本例中是两行文本。您可以看到我在第一行末尾使用了 <br>,这是“换行”(新行)HTML 标签,因此由于这个原因,第二行文本将显示在第一行下方。

您可能注意到 echo 命令的末尾有一个分号“;”符号,实际上这是 C 语言的规则,每个命令的末尾都应该有一个分号。

变量和数组

变量是编程语言中最重要的事情之一。那么什么是变量?还记得学校吗?X 是变量,Y 是变量,Z 是变量。之所以称为变量,是因为它可以是任何值,所以在一瞬间它可以是 1,在下一瞬间可以是 2。编程中的变量也可以是字符串(文本)。例如:x=55,x=”John Doe”。在 PHP 中,每个变量都应该以 $ 符号开头,当然不要忘记分号“;”。让我们看一个例子

<?php
    $myName=”John Doe”;
    $myAge=55;

    echo ‘My name is ’;
    echo $myName;
    echo ‘ and I am ’;
    echo $myage;
    echo ‘ years old.’;
    $afterYears=10;
    $myAge+=$afterYears;
    Echo ‘ After ’. $afterYears.’ years, I will be ‘.$myAge.’ years old.’;
?> 

我们可以将前五个 echo 语句合并到一个 echo 中,如下所示:echo ‘My name is ‘.$myName.’ and I am ‘.$myage.’ years old.’;

点号“.”表示连接,所以它表示“将 .$myName 连接到前面的字符串”。

两个变量的相加是通过 + 号完成的,而不是像 += 那样,我可以简单地这样做

$myAge=$myAge+$afterYears; // (which is like in school: X=X+Y)

我可以在 echo 命令中使用双引号而不是单引号,但许多 HTML 标签都使用双引号,例如表格标签:<table  border="1" width="100%">,所以通过它很容易编写

echo ‘<table  border="1" width="100%">’; 

数组是变量,但以系列的形式组织/排列。让我们看一个例子

$citiesArray = array();     // initializing array
$citiesArray[]=’New York’;   // adding element 0 to array 
$citiesArray[]=’Washington DC’;   // adding element 1 to array
$citiesArray[]=’Los Angeles’;   // adding element 2 to array
$citiesArray[]=’Wyoming’;   // adding element 3 to array
$citiesArray[]=’San Antonio’;   // adding element 4 to array
$numberOfCities=5; 


所以我们在这里创建了一个包含 5 个元素的字符串数组。数组的元素通过括号访问,如下所示

echo $citiesArray[0]; 

输出将是 New York,因为数组的元素总是从位置 0 开始。双斜杠 // 表示“注释”,并且从双斜杠到新行之间的一切都不会被执行。

启动会话

遗憾的是,我们的变量和数组的值在 PHP 执行结束时就会消失,所以如果我们想跟踪变量的值,应该使用会话变量。会话实际上是一段代码块,当 Web 浏览器打开时开始,直到该 Web 浏览器关闭或会话关闭为止。我们 Web 电子邮件就是一个会话的例子。会话在我们点击登录按钮后开始,在输入了有效的用户名和密码之后。会话在我们点击注销按钮或关闭该 Web 浏览器时结束。需要在会话中跟踪和重用而不消失的变量是我们的电子邮件地址,例如 johndoe@myemailprovider.com

在 PHP 中,会话非常简单。在 PHP 代码的最开始,我们应该声明会话开始,如下所示

<?php
    session_start();
    ….
?> 

会话变量在 session_start 命令之后声明,但请注意,它必须仅在第一次启动会话时声明,例如在登录按钮之后,并且用户输入了有效的用户名和密码。会话变量的例子

$_SESSION[‘userLoggedIn’] =’johndoe@myemailprovider.com’;

如果……呢? 

在编程中,另一个最重要的事情是检查事物。检查事物的最简单方法是使用 **if** 命令。示例

if(isset($_SESSION[‘userLoggedIn’])) {
    echo ‘User ‘.$_SESSION[‘userLoggedIn’].’is logged in.’;
    …
}
else {
    echo ‘No user is logged in!’;
    .…
} 

因此,在这种情况下,如果设置了会话变量 ‘userLoggedIn’,它将显示该用户已登录的文本,反之,如果未设置该会话变量(else 命令),将显示“没有用户登录!”的文本。另一种检查变量的方法是 switch/case 命令。示例

$myStatus=1;
switch($myStatus) {
    case 0:
        echo ‘I am not married.’;
        ….
        break;
    case 1;
        echo ‘I am married.’;
        ….
        break;
    ….
}

所以在这个场景中,我们检查了变量 $myStatus,并对不同的值执行了一些不同的代码,例如,如果变量是 1,则会显示文本“I am married.”。

Java 脚本

Java 脚本函数应插入在 HTML 标签 <script Language="Javascript"><!-- ……  //--></script> 中,放在页面顶部,但位于 PHP 标签之外,并且在会话启动之后。示例

<?php
    session_start(); // do not forget that session start should be at top of everything
?>

<script Language="Javascript">
<!--  
    function myfunction()
    {
        ….
    }
//-->
</script>

Java 脚本用于例如:验证表单字段、创建交互式按钮、执行一些屏幕动画,如移动外星飞船等。Java 语言与 PHP 非常相似,易于学习。Java 脚本的调用方式:例如 HTML 标签,如在 <input …> 标签内

echo ‘<input type="text" name="nameAndLastName"
value="'.htmlspecialchars($myname, ENT_QUOTES).'" onChange=" validateempty
(this,5,'."'Insert your name and last name'".')">’;

在这种情况下,当我们更改字段(onChange)时,将调用 JavaScript 函数 validateempty(),它实际上会检查输入的字段是否大于或等于 5 个字符。

您可以在此示例中看到,我使用了 htmlspecialchars() 函数,这实际上是一个非常重要的函数,可以防止我们的数据库受到某种类型的攻击。

mysqli 和循环

mysqli 实际上是 PHP 中访问和处理 MySQL 数据库的新方法。让我们从数据库中读取一些数据

$DB_HOST=’myhost’; // example localhost
$DB_USER=’mysqlusername';
$DB_PASS=’mysqluserpassword’;
$DB_NAME=’mydatabasetouse’;
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
/// check the connection to database
if (mysqli_connect_errno()) {
                printf("Connection failed: %s\n", mysqli_connect_error());
                exit();
}
$query = "SELECT * FROM MyCompanies where ID>0";
if ($myresult = $mysqli->query($query)) {  // is there any records found?
                while ($row = $myresult->fetch_assoc()) {
                                printf ("%s (%s)\n", $row["Name"], $row["Address"]);
                }
                $myresult->free();
}
$mysqli->close();

在此示例中,我们通过 mysqli 命令打开了一个数据库,执行了一个简单的 SELECT 查询,检查是否找到任何记录,然后遍历返回的每一条记录,并显示了 Name 和 Address 字段。最后,我们释放了结果资源并关闭了数据库对象。

printf 命令类似于 echo,但在引号内可以放置 %s 或 %d,然后它们会被后面的字符串变量(%s)和数字变量(%d)替换,这些变量由第一个参数后面的逗号“,”分隔,示例

printf(“My name is %s and I am %d years old.”, $myName,$myAge);

在 while 命令内部,对 $myresult 执行了 fetch_assoc() 命令。通过这个命令,我们从数据库中检索数据,并实际用表字段元素填充了 $row[] 数组,我们通过搜索各自的名称来显示字段:$row["Name"], $row["Address"] …

您可以看到我使用了 **while** 命令,它类似于 **for** 命令,并且是编程语言中非常重要的命令。它们用于“循环”/重复 {} 括号内的代码块,直到条件为真。让我们看一个 **for** 命令的例子

for($i=0;$i<100;$i++) {
    echo $i+1.’, ‘;
}

在此示例中,将显示从 1 到 100 的数字,因为 **for** 命令将一直重复,直到 $i 小于 100。 

页眉和页脚

您在网页中看到页眉和页脚总是相同的,并且会重复。我个人倾向于创建两个单独的 .php 文件,一个用于页眉,另一个用于页脚。在页眉中,我通常放置 Logo 和选择菜单,而在页脚中,我放置公司信息、开发者署名等信息。您可以在页眉中放置变量,这些变量可以在您的主页面和页脚中使用,例如背景颜色、文本颜色、字体等。在主页面(通常是 index.php 页面)中包含页眉和页脚非常简单,只需在 session_start() 命令之后写入:include "header.php";,对于页脚也是如此:在您的主 PHP 文件末尾,但在 ?> 结束标签之前写入:include "footer.php";。

在下面的示例中,您可以找到我 www.autosalloni.com 网页的实际工作页眉。它包括 Logo、右上角的一些信息、我附近城市的天气信息和工作的菜单。所有格式都通过带有不可见边框的表格完成,因此表格确实是“必知”的。

header.php   

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>autosalloni.com</title></head>
<body bgcolor="#DFDFDF" leftmargin="0" rightmargin="0" topmargin="0">
<table border="0" width="100%" height="100" bgcolor="#800000"><tr><td width="17">&nbsp;</td><td><b><font face="Arial" size="7" color="#FFFFFF">autosalloni.com</font></b></td>
<td width="170"><font color="#FFFFFF" style="font-size: 8pt" face="Arial">Send us by email your opinion about this php tutorial.<a href="mailto:info@autosalloni.com?subject=New opinion"><font color="#FFFF00">info@autosalloni.com</font></a></font></td>

<td align="right" bgcolor="#C0C0C0" width="1"><script src='http://netweather.accuweather.com/adcbin/netweather_v2/netweatherV2.asp?partner=netweather&tStyle=whteYell&logo=0&zipcode=EUR|CS|YI003|PRISTINA|&lang=eng&size=7&theme=gold&metric=1&target=_self'></script>
</td></tr></table>
<table border="0" width="100%" height="50" cellspacing="0"><tr>
<?php
$mymenucolor="#0068CF";
$mymenucolorselected="#00689F";
echo "<td bgcolor=$mymenucolor width=\"20\">&nbsp;</td>";


$mycategory=1;
if(intval($_GET['category'])>0)
  $mycategory=intval($_GET['category']);
$mycolor1=$mymenucolor;
if($mycategory==1)
  $mycolor1=$mymenucolorselected;
$mycolor2=$mymenucolor;
if($mycategory==2)
  $mycolor2=$mymenucolorselected;
$mycolor3=$mymenucolor;
if($mycategory==3)
  $mycolor3=$mymenucolorselected;
$mycolor4=$mymenucolor;
if($mycategory==4)
  $mycolor4=$mymenucolorselected;
$mycolor5=$mymenucolor;
if($mycategory==5)
  $mycolor5=$mymenucolorselected;
echo "<td bgcolor=$mycolor1 width=\"1\"><b><font color=\"#FFFFFF\" face=\"Arial\"><a href=\"?category=1\" STYLE=\"TEXT-DECORATION: NONE\"><font color=\"#FFFFFF\">AUTOSALOONS</font></a></font></b></td>";		
printf("<td bgcolor=$mymenucolor width=\"20\">&nbsp;</td>");
echo "<td bgcolor=$mycolor2 width=\"1\"><b><font color=\"#FFFFFF\" face=\"Arial\"><a href=\"?category=2\" STYLE=\"TEXT-DECORATION: NONE\"><font color=\"#FFFFFF\">AUTOPARTS</font></a></font></b></td>";
printf("<td bgcolor=$mymenucolor width=\"20\">&nbsp;</td>");		
echo "<td bgcolor=$mycolor3 width=\"1\"><b><font color=\"#FFFFFF\" face=\"Arial\"><a href=\"?category=3\" STYLE=\"TEXT-DECORATION: NONE\"><font color=\"#FFFFFF\">AUTOSERVICES</font></a></font></b></td>";		
printf("<td bgcolor=$mymenucolor width=\"20\">&nbsp;</td>");

echo "<td bgcolor=$mycolor4 width=\"100\"><b><font color=\"#FFFFFF\" face=\"Arial\"><a href=\"?category=4\" style=\"text-decoration: none\"><font color=\"#FFFFFF\">RENT A CAR</font></a></font></b></td>";
printf("<td bgcolor=$mymenucolor></td>");
echo "<td bgcolor=$mycolor5 width=\"150\"><p align=\"right\"><b><a href=\"?category=5\" STYLE=\"TEXT-DECORATION: NONE\"><font face=\"Arial\" color=\"#FFFF00\">SELL YOUR CAR </font></a></b></td>";
printf("<td bgcolor=$mymenucolor width=\"20\">&nbsp;</td>");
echo "<td bgcolor=$mymenucolor>&nbsp;</td>"
echo ‘<td bgcolor="#333333" width="170" align="center">’;
echo ‘<table border="0" width="100%" cellspacing="0" cellpadding="0" height="15">’;
echo ‘<tr><td></td></tr></table></td>’;
echo "<td bgcolor=$mymenucolor width=\"20\">&nbsp;</td></tr></table>";

如您所见,我使用了五个变量来表示五个不同的菜单背景颜色(类别)。我通过 PHP ? 超链接传递选定的菜单,例如:index.php?category=2,所以当点击类别(或菜单项)2 时,数字 2 将在下次页面加载时传递,并由 **$_GET** 读取:$mycategory=intval($_GET['category']);。函数 **intval() 保证我们传递的是数字而不是任何文本,它将字符串转换为数字。

表单

表单用于从用户那里获取数据,例如物品名称、制造商、价格、图片。在下面的示例中,我将向您展示如何从用户那里获取这些字段,以及我在我的 Web 门户中使用的简单图像上传技术,您可以在其中上传图像,图像会自动预览,我添加了一个删除按钮,这样如果误上传了最后一张图像就可以删除它,我还会通过 Java 脚本和 PHP 本身向您展示字段验证。HTML 表单部分应插入在您的 PHP 文件末尾之前。它应该在那里,因为我们对提交值的检查应该在我们的 HTML 表单代码之前进行。字段由 <input …> 标签从用户那里读取。最后,当点击保存物品按钮时,数据库将被更新,其中包含上传的图像数量,这样应用程序就知道每个物品有多少图像。当然,这不是一个完美的解决方案,但它是可能的解决方案之一,而且易于学习。只需在字段验证和上传中增加一点 Java 脚本,就可以做得更好、更容易,但我把所有这些留给您。

 <?php
    session_start();
include "header.php";
$mybgcolor='#0068CF';
?>

<script Language="Javascript">
<!--  
function emptyvalidation(mytext, mylength, alerttext)
{
  if (mytext.value.length<mylength)
    {if (alerttext) {alert(alerttext);} return false;}
    else
    {return true;}
}
//-->
</script>
<?php
if(!isset($_SESSION['allpictures'])) {
    $_SESSION['allpictures'] = 0;
    $_SESSION['AdvID']=0;
}
    if(!isset($_SESSION['allManufacturers'])) {
  // Read Manufacturers from DB and put them to array so we read from mysql only once
  $ManufacturersArray = array();
      $link = mysql_connect($DB_HOST, $DB_USER, $DB_PASS);
      if (!$link) {
        printf("Connect failed: %s\n", mysql_error());
        exit();
      }
      mysql_select_db($DB_NAME,$link);
      $myquerystring=sprintf("SELECT * FROM `Manufacturers` WHERE ManufacturerID>0 order by ManufacturerID ");
      $result = mysql_query($myquerystring,$link);
      $allManufacturers = mysql_num_rows($result);
      if($allManufacturers>0) { // if there are some manufacturers found, continue
	    $ManufacturersArray[]=’Select Manufacturer’;
 	    while ($myrow = mysql_fetch_array($result)) {
	      $ManufacturersArray[]=$myrow["ManufacturerName"];
	    }
      } 
	  $_SESSION['allManufacturers']=$allManufacturers; // copy local array to session array
	  $_SESSION['ManufacturersArray']=$ManufacturersArray; // copy local array to session array
      mysql_close($link);
	}
$allfields=3; // item name, manufacturer, price
$ip = $_SERVER["REMOTE_ADDR"]; // ip address of our user
    // error message are at beginning empty
    $itemErr="";
    $listManufacturerErr="";
    $priceErr="";
    // Here we read last values from passing variables through _POST method
    $myitem=$_POST["item"];
    $mylistManufacturer =$_POST["listManufacturer"];
    $myprice=$_POST["price"];
$myOK=0;
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (strlen($_POST["item"])<5) { // if ‘item’ has less than 5 characters it will generate error
          $emriErr=" *";
      }
      else {
          $myOK++; // if everything ok myOK variable will increase by one
      }
    if ((int)$_POST["listManufacturer "]==0) { // if manufacturer selection is 0, it is not selected at all, error
      $listManufacturerErr=" *";
    }
    else {
      $myOK++; // if everything ok myOK variable will increase by one
    }
    if ((int)$_POST["price"]<=0) { // if price is less or equal to 0 then it is not written, error
      $priceErr=" *";
    }
    else {
      $myOK++; // if everything ok myOK variable will increase by one
    }
}
// if button send item is clicked, update database and reset everything to 0 
if (array_key_exists('newpost', $_POST) && $myOK>=$allfields && $_SESSION['allpictures'] > 0) {
echo ‘Thank you for inserting another item!<br><br>’;
   $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
   // check connection
if (mysqli_connect_errno()) {
   printf("Connect failed: %s\n", mysqli_connect_error());
   exit();
}
$query = "UPDATE `Items` SET `NumberOfImages`='".$_SESSION['allpictures']."', `ItemSubmited`='1' WHERE  `Item_ID` ='".$_SESSION['AdvID']."' LIMIT 1 ;";
				$stmt = $mysqli->prepare($query);
				$stmt->execute();
				$stmt->close();
    // Reset variables
    $myOK=0;
    $myitem="";
    $myprice=0;
    $mylistManufacturer=0;
    $_SESSION['allpictures']=0;
    $_SESSION['AdvID']=0;
}

$df=0;
// if delete last image button is clicked, decrement one image
if (array_key_exists('deletelast', $_POST) && $myOK>=$allfields && $_SESSION['allpictures'] > 0) {
  $_SESSION['allpictures']--;
  $df++;
}

// if all fields are entered and upload picture is clicked, get inside...
if (array_key_exists('uploadfoto', $_POST) && $myOK>=$allfields) { 
    define ('MAX_FILE_SIZE', 1024 * 1000); // 1000kb filesize limit
    $permitted = array('image/jpeg', 'image/pjpeg', 'image/png'); // accept jpeg and png only
  if (in_array($_FILES['image1']['type'], $permitted) && $_FILES['image1']['size'] > 0 && $_FILES['image1']['size'] <=MAX_FILE_SIZE) {
    switch($_FILES['image1']['error']) {
      case 0:
        // move the file to the upload folder and rename it		$file='adv_'.strval($_SESSION['AdvID']).'_'.strval($_SESSION['allpictures']+1); // assuming that upload is ok
		// if already exists same file, delete it first because he is resending this file
		$completeFileName=$_SERVER['DOCUMENT_ROOT'] .'/uploads/'.$file;
		if(file_exists($completeFileName)) {
		  unset($completeFileName);
		}
		// move and rename file
        $success = move_uploaded_file($_FILES['image1']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] .'/uploads/'.$file);
        if ($success) {
  // increase picture number +1 after successfully moved and renamed
          $_SESSION['allpictures']++;
        }
        break;
    }
  }
}
if (!array_key_exists('newpost', $_POST)) {
	echo '<form action="'.$PHP_SELF.'" method="post" enctype="multipart/form-data" name="uploadImage" id="uploadImage">';
	echo '<table border="0" width="700"  cellspacing="0" cellpadding="0" >';
	echo '<tr><td bgcolor="'.$mybgcolor.'"><b><font color="#FFFFFF" face="Arial" size=4> Item data</font></b></td></tr></table>';
	echo '<table border="1" width="700"  bgcolor="#ffffff" cellspacing="0" cellpadding="0" style="border: 1pt solid #000000; border-Collapse:collapse">';

// Item name field
echo '<tr><td><table border="0" width="100%">';
echo '<tr><td width="65" bgcolor="#808080"><font color="#FFFFFF">Item</font></td>';
echo '<td>';
if($myOK>=$allfields) {
  echo $myitem;
  echo '<input type="hidden'; // disable input because already is inserted
}
else {
  echo '<input type="text';
}
echo '" name="item" value="'.htmlspecialchars($myitem, ENT_QUOTES).'" onChange="emptyvalidation(this,5,'."'Please write item name'".')"><font color="#FF0000">'.$emriErr.'</font></td>';

echo '<td>';
if($myOK>=$allfields) {
  echo $_SESSION['ManufacturersArray'][$mylistManufacturer];
  echo '<input type="hidden"'; // disable input because already is inserted
  echo ' name="listManufacturer" value="'.htmlspecialchars($mylistManufacturer, ENT_QUOTES).'">';
}
	else {
	  echo '<select name="listManufacturer">';
	  for($myc=0;$myc<=$_SESSION['allManufacturers'];$myc++) {
		echo '<option';
		if($myc==$mylistManufacturer)
		  echo ' selected'; // this line is to set default item selected
		echo ' value="'.$myc.'">'.$_SESSION['ManufacturersArray'][$myc].'</option>';
	  }
	  echo '</select>';
	  echo '<font color="#FF0000">'.$listManufacturerErr.'</font>';
	}
	echo '<td width="100" bgcolor="#808080"><font color="#FFFFFF">Price</font></td>';
	echo '<td>';
	if($myOK>=$allfields) {
	  echo $myprice;
	  echo '<input type="hidden'; // disable input because already is inserted
	}
	else {
	  echo '<input type="text';
	}
	echo '" name="price" value="'.htmlspecialchars($myprice, ENT_QUOTES).'" size=7><font color="#FF0000">'.$ priceErr.'</font></td>';
	echo '</td></tr></table>';
	echo '</table>';
	if($myOK>=$allfields) {
		if($_SESSION['AdvID']==0) {
		// add new record to database and keep that records number for editing
			$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
// check connection
if (mysqli_connect_errno()) {
	printf("Connect failed: %s\n", mysqli_connect_error());
	exit();
}
$query = "INSERT INTO  `Items` (  `Item` ,  `Manufacturer` ,  `Price`) VALUES ( ?, ?, ?);";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('sdd', $myitem, $mylistManufacturer, $myprice);
$stmt->execute();
$_SESSION['AdvID']=$mysqli->insert_id;
$stmt->close();
$mysqli->close();
}
echo '<table border="0" width="700" bgcolor="#ffffff"  cellspacing="0" cellpadding="0" >';
echo '<tr><td bgcolor="'.$mybgcolor.'"><b><font color="#ffffff" face="Arial" size=4> Insert pictures (at least one picture - max.1Mb per picture)</font></b></td></tr></table>';
 echo '<table border="1" width="700" bgcolor="#ffffff"  cellspacing="0" cellpadding="0" style="border: 1pt solid #000000; border-Collapse:collapse">';
echo '<tr><td><table border="0" width="100%">';
echo '<tr><td width="65" bgcolor="#808080"><font color="#FFFFFF">Add pic.</font></td>';
echo '<td><input type="file" name="image1" id="image1" onchange="file_selected = true;" />';
// not more than 7 images can be uploaded
if($_SESSION['allpictures'] < 7) {
  echo '<input type="submit" name="uploadfoto" id="uploadfoto" value="Send pic."/>';
}
echo '</td></tr></table></td></tr>';
if($df>0) {
  if($_SESSION['allpictures']>0){
    // create table for pictures
    echo '<table border="0" ><td></td></table>';
    echo '<table border="0" width="1" style="border-right:1pt solid #C0C0C0; border-bottom:1pt solid #C0C0C0; border-Collapse:collapse; border-left-style:solid; border-left-width:1pt; border-top-style:solid; border-top-width:1pt"><tr>';
    // Displaying uploaded pictures
    for($i=0;$i<$_SESSION['allpictures'];$i++) {
       $file=strval($_SESSION['AdvID']).'_'.strval($i+1);
echo '<img src="./uploads/adv_'.$file.'" width="100" height="75""></td>';
}
if($_SESSION['allpictures'] > 0) {
echo '<input type="image" name="deletelast" value="deletelast" alt="Delete last pic."  src="delete.png" >';
}
echo '</tr></table><br>';
}
}
}
echo '<table border="0" width="700" bgcolor="#ffffff"  cellspacing="0" cellpadding="0" ><tr><td bgcolor="'.$mybgcolor.'">';
echo '<p align="center">';
if($_SESSION['allpictures']==0) {
  if($myOK>=$allfields) {
	  }
 else {
echo '<input type="submit" name="uploadbutton" id="uploadbutton" value="';
echo 'Continue';
echo '" onclick="this.disabled=true;this.value="Sending...";this.form.submit();"/>';
}
}
else {
   echo '<input type="submit" name="newpost" id="newpost" value="Save item"/>';
}
echo '</td></tr></table>';
echo '</form>';
include "footer.php";
?>

Z...    

哦,对了,从 A 到 Z,如果您试图从 A 到 Z 学习某样东西,那么就要准备阅读几十本书,花费数年时间,仍然学不到所有东西。我试图向您展示一些基本技术,并为您提供一些关于 PHP 和 Web 开发的建议。我鼓励您开始动手实践,自己测试。不要放弃,试试看,不一定要在这方面做到完美,因为没有人是完美的,只需学习一些您真正可以在工作中使用的东西,或者只是为了好玩:)。

© . All rights reserved.