PHP A 到 Z。






4.89/5 (35投票s)
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"> </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\"> </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\"> </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\"> </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\"> </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\"> </td>");
echo "<td bgcolor=$mymenucolor> </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\"> </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 开发的建议。我鼓励您开始动手实践,自己测试。不要放弃,试试看,不一定要在这方面做到完美,因为没有人是完美的,只需学习一些您真正可以在工作中使用的东西,或者只是为了好玩:)。