正在将表单数据输入 SQL
Inputting form data to SQL
我只是想将表单数据发送到 SQL 数据库。
dbconnect.php 具有配置选项,并且确实有效,因为我能够在其他页面上检索我的 table。
我可以 "echo" 将信息变成 table/div 无论如何,当我按提交时,我是 PHP 自己做,还是将其提交到另一个页面,即。 addevent.php
但是,我似乎无法弄清楚我在将其发送到 SQL 数据库时做错了什么。现在,不幸的是,我已经为此做了无数个小时,所以我的代码可能有点混乱,我可能会使用不同形式的 sql、pdo 等。在这一点上,我的思想爆炸了哈哈。
任何人,这是代码 - 第一个是表单页面,即。 form.php,第二个是表单调用的addevent.php。
<?php include 'header.php'?>
<?php include 'dbconnect.php'?>
<form id="addevent" action="addevent.php" method="post">
<fieldset>
<legend>Add an Event</legend>
<label for="showtitle">Title of Show</label>
<input type="text" id="showtitle" name="showtitle" value=""></br>
<label for="h">Headliner</label>
<input type="text" id="h" name="h" value="">
</br>
<label for="fone">First Feature Act Name</label>
<input type="text" id="fone" name="fone" value="">
</br>
<label for="ftwo">Second Feature Act Name</label>
<input type="text" id="ftwo" name="ftwo" value="">
</br>
<label for="fthree">Third Feature Act Name</label>
<input type="text" id="fthree" name="fthree" value="">
</br>
<label for="host">Host Name</label>
<input type="text" id="host" name="host" value="">
</br>
<label for="aone">First Additional Performer Name</label>
<input type="text" id="aone" name="aone" value="">
</br>
<label for="atwo">Second Additional Performer Name</label>
<input type="text" id="atwo" name="atwo" value="">
</br>
<label for="athree">Third Additional Performer Name</label>
<input type="text" id="athree" name="athree" value="">
</br>
<label for="afour">Fourth Additional Performer Name</label>
<input type="text" id="afour" name="afour" value="">
</br>
<label for="stimeu">Event Start Time</label>
<input type="time" id="stimeu" name="stimeu" value="">
<input type="text" id="stimef" name="stimef" class="nodisplay" value="No Fill"></br>
<label for="etimeu">Event End Time</label>
<input type="time" id="etimeu" name="etimeu" value="">
<input type="text" id="etimef" name="etimef" class="nodisplay" value="No Fill"></br>
<label for="dateu">Event Date</label>
<input type="date" id="dateu" name="dateu" value="">
<input type="text" id="datef" name="datef" class="nodisplay" value="No Fill"></br>
<label for="loadd">Address</label>
<input type="text" id="loadd" name="loadd" value="">
<label for="locity">City</label>
<input type="text" id="locity" name="locity" value="">
<label for="loprov">Prov</label>
<input type="text" id="loprov" name="loprov" value=""></br>
<input type="text" id="lourl" name="lourl"value=""></br>
<label for="price">Price</label>
<input type="text" id="price" name="price" value="">
<label for="turl">Buy Tickets URL</label>
<input type="text" id="turl" name="turl" value=""></br>
<label for="pname">Promoter Name</label>
<input type="text" id="pname" name="pname" value=""></br>
<label for="purl">Promoter URL</label>
<input type="text" id="purl" name="purl" value="">
<label for="ptel">Promoter Telephone</label>
<input type="tel" id="ptel" name="ptel" value="">
<label for="pemail">Promoter email</label>
<input type="email" id="pemail" name="pemail" value=""></br>
<input type="submit" id="submit" value="Add Event">
</fieldset>
</form>
</div>
<?php include 'footer.php'?>
<?php include 'dbconnect.php'?>
<?php
if(isset($_POST['showtitle'], $_POST['h'], $_POST['fone'], $_POST['ftwo'], $_POST['fthree'], $_POST['aone'], $_POST['atwo'], $_POST['athree'], $_POST['afour'], $_POST['stimeu'], $_POST['stimef'], $_POST['etimeu'], $_POST['etimef'], $_POST['dateu'], $_POST['datef'], $_POST['loadd'], $_POST['locity'], $_POST['loprov'], $_POST['lourl'], $_POST['price'], $_POST['turl'], $_POST['pname'], $_POST['purl'], $_POST['ptel'], $_POST['pemail']))
$sql="INSERT INTO may (id, showtitle, headline, fone, ftwo, fthree, aone, atwo, athree, afour, stimeu, stimef, etimeu, etimef, dateu, datef, loadd, locity, loprov, lourl, price, turl, pname, purl, ptel, pemail, addedstamp)
VALUES ('$showtitle','$h','$fone','$ftwo','$fthree','$aone','$atwo','$athree','$afour','$stimeu','$stimef','$etimeu','$dateu','$datef','$loadd','$locity','$loprov','$lourl','$price','$turl','$pname','$purl','$ptel','$pemail')";
$result = $conn->query($sql);
}
if(!mysql_query($sql,$conn)){
die('Error: ' . mysql_error());
}
echo("<br>Input data is a success");
$mysql_close($conn)
?>
<h1>Form Data</h1>
<?php echo $_POST['showtitle']; ?><br>
<?php echo $_POST['h']; ?><br>
<?php echo $_POST['fone']; ?><br>
<?php echo $_POST['ftwo']; ?><br>
<?php echo $_POST['fthree']; ?><br>
<?php echo $_POST['host']; ?><br>
<?php echo $_POST['aone']; ?><br>
<?php echo $_POST['atwo']; ?><br>
<?php echo $_POST['athree']; ?><br>
<?php echo $_POST['afour']; ?><br>
<?php echo $_POST['stimeu']; ?><br>
<?php echo $_POST['stimef']; ?><br>
<?php echo $_POST['etimeu']; ?><br>
<?php echo $_POST['etimef']; ?><br>
<?php echo $_POST['dateu']; ?><br>
<?php echo $_POST['datef']; ?><br>
<?php echo $_POST['loadd']; ?><br>
<?php echo $_POST['locity']; ?><br>
<?php echo $_POST['loprov']; ?><br>
<?php echo $_POST['lourl']; ?><br>
<?php echo $_POST['turl']; ?><br>
<?php echo $_POST['pname']; ?><br>
<?php echo $_POST['purl']; ?><br>
<?php echo $_POST['ptel']; ?><br>
<?php echo $_POST['pemail']; ?><br>
编辑:我的大脑处于半关闭状态,所以我忘记了一些相关信息:
我遇到的主要错误是:
注意:未定义变量:第 12 行 C:...\addevent.php 中的 showtitle
对于每个 variables/names/whatever 你想给他们打电话。
我从其他人的帖子和答案中尝试了多种方法,但出于某种原因,我就是无法让插入 sql 工作。我可以很好地检索,回声很好,只是插入我遇到了重大问题。如果有人甚至可以向我展示代码的基本格式,我应该是 using/basic structure/syntax... 或者为我指明正确的方向,那会很棒。很多网上的东西都相当过时,使用旧的 api,或者只是一些小教程,里面有很多 SQL 注入,我发现很难找到 UP TO DATE 互联网上的教程。
这是我在“.php”页面上使用的语法,我在该页面上检索了 table 行。 (完美运行)。
$sql = "SELECT id, featuref, featurel, hostf, hostl, openf, openl, midf, midl, otherf, otherl, additionalf, additionall, time, datec, location, locationurl, price, ticketurl, showname FROM january ORDER by date ASC, time ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo 'Show';
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<table class='col-lg-12' id='event-container_'><th><h1 class='event-title-words'>
". $row["showname"]. "</h1>
</th>
}
echo "Done";
} else {
echo "0 results";
}
$conn->close();
这是一个简化版本,如果有人想编辑,或者向我展示正确的方法,可以更轻松地进行编辑。
<?php include 'dbconnect.php'?>
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
<?php
if(isset($_POST['showtitle']))
$sql="INSERT INTO may (id, showtitle, addedstamp)
VALUES ('$showtitle')";
$result = $conn->query($sql);
}
if(!mysql_query($sql,$conn)){
die('Error: ' . mysql_error());
}
echo("<br>Input data is a success");
$conn->close();
?>
<h1>Form Data</h1>
<?php echo $_POST['showtitle']; ?><br>
php include dbconnect.php 下的行就是 dbconnect.php 文件中的内容,不包括服务器名、用户名、数据库信息...
dbconnect 确实有效。只是把信息放在那里有帮助,因为我的代码太乱了。
ID是自增的,addedstamp应该只是表单提交到数据库的时间戳。
<?php include 'dbconnect.php'?>
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$showtitle = $_POST['showtitle'];
$h = $_POST['h'];
$fone = $_POST['fone'];
$ftwo = $_POST['ftwo'];
$fthree = $_POST['fthree'];
$aone = $_POST['aone'];
$atwo = $_POST['atwo'];
$athree = $_POST['athree'];
$afour = $_POST['afour'];
$stimeu = $_POST['stimeu'];
$stimef = $_POST['stimef'];
$etimeu = $_POST['etimeu'];
$etimef = $_POST['etimef'];
$dateu = $_POST['dateu'];
$datef = $_POST['datef'];
$loadd = $_POST['loadd'];
$locity = $_POST['locity'];
$loprov = $_POST['loprov'];
$lourl = $_POST['lourl'];
$price = $_POST['price'];
$turl = $_POST['turl'];
$pname = $_POST['pname'];
$purl = $_POST['purl'];
$ptel = $_POST['ptel'];
$pemail = $_POST['pemail'];
if(isset($_POST['showtitle'], $_POST['h'], $_POST['fone'], $_POST['ftwo'], $_POST['fthree'], $_POST['aone'], $_POST['atwo'], $_POST['athree'], $_POST['afour'], $_POST['stimeu'], $_POST['stimef'], $_POST['etimeu'], $_POST['etimef'], $_POST['dateu'], $_POST['datef'], $_POST['loadd'], $_POST['locity'], $_POST['loprov'], $_POST['lourl'], $_POST['price'], $_POST['turl'], $_POST['pname'], $_POST['purl'], $_POST['ptel'], $_POST['pemail']))
{
$sql="INSERT INTO may (showtitle, h, fone, ftwo, fthree, aone, atwo, athree, afour, stimeu, stimef, etimeu, etimef, dateu, datef, loadd, locity, loprov, lourl, price, turl, pname, purl, ptel, pemail)
VALUES ('$showtitle','$h','$fone','$ftwo','$fthree','$aone','$atwo','$athree','$afour','$stimeu','$stimef','$etimeu','$etimef,'$dateu','$datef','$loadd','$locity','$loprov','$lourl','$price','$turl','$pname','$purl','$ptel','$pemail')";
$result = $conn->query($sql);
}
if($result){
echo "Success";
}
else {
trigger_error("there was an error....".$conn->error, E_USER_WARNING);
}
$conn->close()
?>
而我现在的错误是
警告:出现错误....您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '2015-12-06','12-06-2015','123 Middle Road','London',[ 附近使用的正确语法=79=],'https://www.google.ca/' 在 C:\xampp\htdocs\comedyscene\addevent.php 第 2 行第 48
行
您的变量未定义且为空。正如您在代码中看到的,您是第一次在查询中使用变量。
简单的解决方案是将帖子的值加载到变量中,例如:
$showtitle = $_POST['showtitle'];
对查询中的所有变量执行此操作,并将代码放在插入的上方。
下一点是,您正在插入一个 ID,但您的插入中没有适当的值。如果此列是自动递增列,则只需在查询中删除 ID,否则将值放入。
在您的插入 运行 之后,您应该阅读 sql 查询的验证和清理。在您的查询中,用户可以输入每个值,这不是您想要的。
我将概述错误。
这个 if(isset($_POST['showtitle']....
缺少左大括号 {
,使用 error reporting 时应该会导致解析错误。
您也没有分配任何东西,您只是在检查您的 POST 是否已设置。
您需要做的(将您的变量分配给 POST):
$showtitle = $_POST['showtitle'];
应该跟在if(isset($_POST['showtitle'], $_POST['h'],....{
之后
并按照相同的模式为其他人做同样的事情。
出于某些原因,应删除以下块。您正在使用 mysqli_
进行连接,然后使用 mysql_
不相互混合的函数。
if(!mysql_query($sql,$conn)){
die('Error: ' . mysql_error());
}
应该是(而且您很可能使用 mysqli_
进行连接,而不是 mysql_
。
if($result){
echo "Success";
}
else {
trigger_error("there was an error....".$conn->error, E_USER_WARNING);
}
那么这个 $mysql_close($conn)
应该读作 $conn->close();
。
正如我在评论中指出的那样,您还有不匹配的列和值,其中一个是 id
,它没有反映在您的 VALUES
中
$sql="INSERT INTO may (id,
您有足够的时间来修复您的代码。
将错误报告添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只能在试运行中进行,绝不能在生产中进行。
我还想指出您对 SQL injection when using this type of method, use mysqli
with prepared statements, or PDO with prepared statements 持开放态度,它们更安全。
编辑:
根据你的编辑:https://whosebug.com/revisions/28006989/3
$sql="INSERT INTO may (id, showtitle, addedstamp)
VALUES ('$showtitle')";
您选择了 3 列,但只插入了 1 个值。如果要自动设置 id
和时间戳列(auto_increment 等),则在 INSERT 中不需要它们。
另外,if(isset($_POST['showtitle']))
仍然缺少大括号 {
,并且仍然没有分配任何东西。
并且还在使用
if(!mysql_query($sql,$conn)){
die('Error: ' . mysql_error());
}
- 删除它
如果您希望为 addedstamp
添加当前时间戳,请使用 MySQL 的 NOW()
函数:
即:
.... ,'$ptel','$pemail', NOW())";
转义你的价值观:
$showtitle = stripslashes($_POST['showtitle']);
$showtitle = mysqli_real_escape_string($conn, $_POST['showtitle']);
- 并为其他人做同样的事情。
另一个编辑:
您在 '$etimef,'$dateu'
的 VALUES 中缺少 $etimef
的引号,应该是 '$etimef','$dateu'
您的代码中出现了 3 个主要问题:
- 语法错误
- 变量使用
- MySQL API
语法错误
有些大括号位置不正确,其中第一个大括号出现在 "if(isset(..." 之后的第 11 行代码中。
变量使用
$showtitle 是一个未定义的变量,因为如果不打开 PHP 配置选项 register_globals
,则无法使用此格式接收 post 数据。此选项已被弃用在 PHP 5.3.0 中将在 PHP 5.4 中删除。0.Actually 在版本 4.2.0 之后,此选项已默认为 off
而不是 on
.
MySQL API
似乎你没有给出名为 'dbconnect.php' 的代码,所以我无法弄清楚你使用哪种方式连接 MySQL database.So 我只是写了我的连接和插入版本数据,完整的代码如下(我删减了一些变量以使其简短阅读):
<?php //include 'dbconnect.php'?>
<?php
if(isset($_POST['showtitle'], $_POST['h'], $_POST['fone'])){
/*use your own variables to recive post data*/
$showtitle = $_POST['showtitle'];
$h = $_POST['h'];
$fone = $_POST['fone'];
//connect database
$con = mysql_connect("localhost","root","");
//check if connect success
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
//select your database
mysql_select_db("temp_projects");
//run insert query
//if you do have an "id" column which is auto increasing, the sql string should NOT contain it
$sql="INSERT INTO may (showtitle, headline, fone) VALUES ('$showtitle','$h','$fone')";
//if not, use sql which matches every column with the value
//$sql="INSERT INTO may (id, showtitle, headline, fone) VALUES ('$id', '$showtitle','$h','$fone')";
$result = mysql_query($sql);
if(!$result){
die('Error: ' . mysql_error());
}
echo("<br>Input data is a success");
//close connect
mysql_close($con);
}
else{
echo ("No Input Data.");
}
?>
<h1>Form Data</h1>
<?php echo $_POST['showtitle']; ?><br>
<?php echo $_POST['h']; ?><br>
<?php echo $_POST['fone']; ?><br>
我只是想将表单数据发送到 SQL 数据库。
dbconnect.php 具有配置选项,并且确实有效,因为我能够在其他页面上检索我的 table。
我可以 "echo" 将信息变成 table/div 无论如何,当我按提交时,我是 PHP 自己做,还是将其提交到另一个页面,即。 addevent.php
但是,我似乎无法弄清楚我在将其发送到 SQL 数据库时做错了什么。现在,不幸的是,我已经为此做了无数个小时,所以我的代码可能有点混乱,我可能会使用不同形式的 sql、pdo 等。在这一点上,我的思想爆炸了哈哈。
任何人,这是代码 - 第一个是表单页面,即。 form.php,第二个是表单调用的addevent.php。
<?php include 'header.php'?>
<?php include 'dbconnect.php'?>
<form id="addevent" action="addevent.php" method="post">
<fieldset>
<legend>Add an Event</legend>
<label for="showtitle">Title of Show</label>
<input type="text" id="showtitle" name="showtitle" value=""></br>
<label for="h">Headliner</label>
<input type="text" id="h" name="h" value="">
</br>
<label for="fone">First Feature Act Name</label>
<input type="text" id="fone" name="fone" value="">
</br>
<label for="ftwo">Second Feature Act Name</label>
<input type="text" id="ftwo" name="ftwo" value="">
</br>
<label for="fthree">Third Feature Act Name</label>
<input type="text" id="fthree" name="fthree" value="">
</br>
<label for="host">Host Name</label>
<input type="text" id="host" name="host" value="">
</br>
<label for="aone">First Additional Performer Name</label>
<input type="text" id="aone" name="aone" value="">
</br>
<label for="atwo">Second Additional Performer Name</label>
<input type="text" id="atwo" name="atwo" value="">
</br>
<label for="athree">Third Additional Performer Name</label>
<input type="text" id="athree" name="athree" value="">
</br>
<label for="afour">Fourth Additional Performer Name</label>
<input type="text" id="afour" name="afour" value="">
</br>
<label for="stimeu">Event Start Time</label>
<input type="time" id="stimeu" name="stimeu" value="">
<input type="text" id="stimef" name="stimef" class="nodisplay" value="No Fill"></br>
<label for="etimeu">Event End Time</label>
<input type="time" id="etimeu" name="etimeu" value="">
<input type="text" id="etimef" name="etimef" class="nodisplay" value="No Fill"></br>
<label for="dateu">Event Date</label>
<input type="date" id="dateu" name="dateu" value="">
<input type="text" id="datef" name="datef" class="nodisplay" value="No Fill"></br>
<label for="loadd">Address</label>
<input type="text" id="loadd" name="loadd" value="">
<label for="locity">City</label>
<input type="text" id="locity" name="locity" value="">
<label for="loprov">Prov</label>
<input type="text" id="loprov" name="loprov" value=""></br>
<input type="text" id="lourl" name="lourl"value=""></br>
<label for="price">Price</label>
<input type="text" id="price" name="price" value="">
<label for="turl">Buy Tickets URL</label>
<input type="text" id="turl" name="turl" value=""></br>
<label for="pname">Promoter Name</label>
<input type="text" id="pname" name="pname" value=""></br>
<label for="purl">Promoter URL</label>
<input type="text" id="purl" name="purl" value="">
<label for="ptel">Promoter Telephone</label>
<input type="tel" id="ptel" name="ptel" value="">
<label for="pemail">Promoter email</label>
<input type="email" id="pemail" name="pemail" value=""></br>
<input type="submit" id="submit" value="Add Event">
</fieldset>
</form>
</div>
<?php include 'footer.php'?>
<?php include 'dbconnect.php'?>
<?php
if(isset($_POST['showtitle'], $_POST['h'], $_POST['fone'], $_POST['ftwo'], $_POST['fthree'], $_POST['aone'], $_POST['atwo'], $_POST['athree'], $_POST['afour'], $_POST['stimeu'], $_POST['stimef'], $_POST['etimeu'], $_POST['etimef'], $_POST['dateu'], $_POST['datef'], $_POST['loadd'], $_POST['locity'], $_POST['loprov'], $_POST['lourl'], $_POST['price'], $_POST['turl'], $_POST['pname'], $_POST['purl'], $_POST['ptel'], $_POST['pemail']))
$sql="INSERT INTO may (id, showtitle, headline, fone, ftwo, fthree, aone, atwo, athree, afour, stimeu, stimef, etimeu, etimef, dateu, datef, loadd, locity, loprov, lourl, price, turl, pname, purl, ptel, pemail, addedstamp)
VALUES ('$showtitle','$h','$fone','$ftwo','$fthree','$aone','$atwo','$athree','$afour','$stimeu','$stimef','$etimeu','$dateu','$datef','$loadd','$locity','$loprov','$lourl','$price','$turl','$pname','$purl','$ptel','$pemail')";
$result = $conn->query($sql);
}
if(!mysql_query($sql,$conn)){
die('Error: ' . mysql_error());
}
echo("<br>Input data is a success");
$mysql_close($conn)
?>
<h1>Form Data</h1>
<?php echo $_POST['showtitle']; ?><br>
<?php echo $_POST['h']; ?><br>
<?php echo $_POST['fone']; ?><br>
<?php echo $_POST['ftwo']; ?><br>
<?php echo $_POST['fthree']; ?><br>
<?php echo $_POST['host']; ?><br>
<?php echo $_POST['aone']; ?><br>
<?php echo $_POST['atwo']; ?><br>
<?php echo $_POST['athree']; ?><br>
<?php echo $_POST['afour']; ?><br>
<?php echo $_POST['stimeu']; ?><br>
<?php echo $_POST['stimef']; ?><br>
<?php echo $_POST['etimeu']; ?><br>
<?php echo $_POST['etimef']; ?><br>
<?php echo $_POST['dateu']; ?><br>
<?php echo $_POST['datef']; ?><br>
<?php echo $_POST['loadd']; ?><br>
<?php echo $_POST['locity']; ?><br>
<?php echo $_POST['loprov']; ?><br>
<?php echo $_POST['lourl']; ?><br>
<?php echo $_POST['turl']; ?><br>
<?php echo $_POST['pname']; ?><br>
<?php echo $_POST['purl']; ?><br>
<?php echo $_POST['ptel']; ?><br>
<?php echo $_POST['pemail']; ?><br>
编辑:我的大脑处于半关闭状态,所以我忘记了一些相关信息:
我遇到的主要错误是: 注意:未定义变量:第 12 行 C:...\addevent.php 中的 showtitle 对于每个 variables/names/whatever 你想给他们打电话。
我从其他人的帖子和答案中尝试了多种方法,但出于某种原因,我就是无法让插入 sql 工作。我可以很好地检索,回声很好,只是插入我遇到了重大问题。如果有人甚至可以向我展示代码的基本格式,我应该是 using/basic structure/syntax... 或者为我指明正确的方向,那会很棒。很多网上的东西都相当过时,使用旧的 api,或者只是一些小教程,里面有很多 SQL 注入,我发现很难找到 UP TO DATE 互联网上的教程。
这是我在“.php”页面上使用的语法,我在该页面上检索了 table 行。 (完美运行)。
$sql = "SELECT id, featuref, featurel, hostf, hostl, openf, openl, midf, midl, otherf, otherl, additionalf, additionall, time, datec, location, locationurl, price, ticketurl, showname FROM january ORDER by date ASC, time ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo 'Show';
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<table class='col-lg-12' id='event-container_'><th><h1 class='event-title-words'>
". $row["showname"]. "</h1>
</th>
}
echo "Done";
} else {
echo "0 results";
}
$conn->close();
这是一个简化版本,如果有人想编辑,或者向我展示正确的方法,可以更轻松地进行编辑。
<?php include 'dbconnect.php'?>
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
<?php
if(isset($_POST['showtitle']))
$sql="INSERT INTO may (id, showtitle, addedstamp)
VALUES ('$showtitle')";
$result = $conn->query($sql);
}
if(!mysql_query($sql,$conn)){
die('Error: ' . mysql_error());
}
echo("<br>Input data is a success");
$conn->close();
?>
<h1>Form Data</h1>
<?php echo $_POST['showtitle']; ?><br>
php include dbconnect.php 下的行就是 dbconnect.php 文件中的内容,不包括服务器名、用户名、数据库信息...
dbconnect 确实有效。只是把信息放在那里有帮助,因为我的代码太乱了。
ID是自增的,addedstamp应该只是表单提交到数据库的时间戳。
<?php include 'dbconnect.php'?>
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$showtitle = $_POST['showtitle'];
$h = $_POST['h'];
$fone = $_POST['fone'];
$ftwo = $_POST['ftwo'];
$fthree = $_POST['fthree'];
$aone = $_POST['aone'];
$atwo = $_POST['atwo'];
$athree = $_POST['athree'];
$afour = $_POST['afour'];
$stimeu = $_POST['stimeu'];
$stimef = $_POST['stimef'];
$etimeu = $_POST['etimeu'];
$etimef = $_POST['etimef'];
$dateu = $_POST['dateu'];
$datef = $_POST['datef'];
$loadd = $_POST['loadd'];
$locity = $_POST['locity'];
$loprov = $_POST['loprov'];
$lourl = $_POST['lourl'];
$price = $_POST['price'];
$turl = $_POST['turl'];
$pname = $_POST['pname'];
$purl = $_POST['purl'];
$ptel = $_POST['ptel'];
$pemail = $_POST['pemail'];
if(isset($_POST['showtitle'], $_POST['h'], $_POST['fone'], $_POST['ftwo'], $_POST['fthree'], $_POST['aone'], $_POST['atwo'], $_POST['athree'], $_POST['afour'], $_POST['stimeu'], $_POST['stimef'], $_POST['etimeu'], $_POST['etimef'], $_POST['dateu'], $_POST['datef'], $_POST['loadd'], $_POST['locity'], $_POST['loprov'], $_POST['lourl'], $_POST['price'], $_POST['turl'], $_POST['pname'], $_POST['purl'], $_POST['ptel'], $_POST['pemail']))
{
$sql="INSERT INTO may (showtitle, h, fone, ftwo, fthree, aone, atwo, athree, afour, stimeu, stimef, etimeu, etimef, dateu, datef, loadd, locity, loprov, lourl, price, turl, pname, purl, ptel, pemail)
VALUES ('$showtitle','$h','$fone','$ftwo','$fthree','$aone','$atwo','$athree','$afour','$stimeu','$stimef','$etimeu','$etimef,'$dateu','$datef','$loadd','$locity','$loprov','$lourl','$price','$turl','$pname','$purl','$ptel','$pemail')";
$result = $conn->query($sql);
}
if($result){
echo "Success";
}
else {
trigger_error("there was an error....".$conn->error, E_USER_WARNING);
}
$conn->close()
?>
而我现在的错误是 警告:出现错误....您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '2015-12-06','12-06-2015','123 Middle Road','London',[ 附近使用的正确语法=79=],'https://www.google.ca/' 在 C:\xampp\htdocs\comedyscene\addevent.php 第 2 行第 48
行您的变量未定义且为空。正如您在代码中看到的,您是第一次在查询中使用变量。
简单的解决方案是将帖子的值加载到变量中,例如:
$showtitle = $_POST['showtitle'];
对查询中的所有变量执行此操作,并将代码放在插入的上方。
下一点是,您正在插入一个 ID,但您的插入中没有适当的值。如果此列是自动递增列,则只需在查询中删除 ID,否则将值放入。
在您的插入 运行 之后,您应该阅读 sql 查询的验证和清理。在您的查询中,用户可以输入每个值,这不是您想要的。
我将概述错误。
这个 if(isset($_POST['showtitle']....
缺少左大括号 {
,使用 error reporting 时应该会导致解析错误。
您也没有分配任何东西,您只是在检查您的 POST 是否已设置。
您需要做的(将您的变量分配给 POST):
$showtitle = $_POST['showtitle'];
应该跟在if(isset($_POST['showtitle'], $_POST['h'],....{
并按照相同的模式为其他人做同样的事情。
出于某些原因,应删除以下块。您正在使用 mysqli_
进行连接,然后使用 mysql_
不相互混合的函数。
if(!mysql_query($sql,$conn)){
die('Error: ' . mysql_error());
}
应该是(而且您很可能使用 mysqli_
进行连接,而不是 mysql_
。
if($result){
echo "Success";
}
else {
trigger_error("there was an error....".$conn->error, E_USER_WARNING);
}
那么这个 $mysql_close($conn)
应该读作 $conn->close();
。
正如我在评论中指出的那样,您还有不匹配的列和值,其中一个是 id
,它没有反映在您的 VALUES
$sql="INSERT INTO may (id,
您有足够的时间来修复您的代码。
将错误报告添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只能在试运行中进行,绝不能在生产中进行。
我还想指出您对 SQL injection when using this type of method, use mysqli
with prepared statements, or PDO with prepared statements 持开放态度,它们更安全。
编辑:
根据你的编辑:https://whosebug.com/revisions/28006989/3
$sql="INSERT INTO may (id, showtitle, addedstamp)
VALUES ('$showtitle')";
您选择了 3 列,但只插入了 1 个值。如果要自动设置 id
和时间戳列(auto_increment 等),则在 INSERT 中不需要它们。
另外,if(isset($_POST['showtitle']))
仍然缺少大括号 {
,并且仍然没有分配任何东西。
并且还在使用
if(!mysql_query($sql,$conn)){
die('Error: ' . mysql_error());
}
- 删除它
如果您希望为 addedstamp
添加当前时间戳,请使用 MySQL 的 NOW()
函数:
即:
.... ,'$ptel','$pemail', NOW())";
转义你的价值观:
$showtitle = stripslashes($_POST['showtitle']);
$showtitle = mysqli_real_escape_string($conn, $_POST['showtitle']);
- 并为其他人做同样的事情。
另一个编辑:
您在 '$etimef,'$dateu'
的 VALUES 中缺少 $etimef
的引号,应该是 '$etimef','$dateu'
您的代码中出现了 3 个主要问题:
- 语法错误
- 变量使用
- MySQL API
语法错误
有些大括号位置不正确,其中第一个大括号出现在 "if(isset(..." 之后的第 11 行代码中。
变量使用
$showtitle 是一个未定义的变量,因为如果不打开 PHP 配置选项 register_globals
,则无法使用此格式接收 post 数据。此选项已被弃用在 PHP 5.3.0 中将在 PHP 5.4 中删除。0.Actually 在版本 4.2.0 之后,此选项已默认为 off
而不是 on
.
MySQL API
似乎你没有给出名为 'dbconnect.php' 的代码,所以我无法弄清楚你使用哪种方式连接 MySQL database.So 我只是写了我的连接和插入版本数据,完整的代码如下(我删减了一些变量以使其简短阅读):
<?php //include 'dbconnect.php'?>
<?php
if(isset($_POST['showtitle'], $_POST['h'], $_POST['fone'])){
/*use your own variables to recive post data*/
$showtitle = $_POST['showtitle'];
$h = $_POST['h'];
$fone = $_POST['fone'];
//connect database
$con = mysql_connect("localhost","root","");
//check if connect success
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
//select your database
mysql_select_db("temp_projects");
//run insert query
//if you do have an "id" column which is auto increasing, the sql string should NOT contain it
$sql="INSERT INTO may (showtitle, headline, fone) VALUES ('$showtitle','$h','$fone')";
//if not, use sql which matches every column with the value
//$sql="INSERT INTO may (id, showtitle, headline, fone) VALUES ('$id', '$showtitle','$h','$fone')";
$result = mysql_query($sql);
if(!$result){
die('Error: ' . mysql_error());
}
echo("<br>Input data is a success");
//close connect
mysql_close($con);
}
else{
echo ("No Input Data.");
}
?>
<h1>Form Data</h1>
<?php echo $_POST['showtitle']; ?><br>
<?php echo $_POST['h']; ?><br>
<?php echo $_POST['fone']; ?><br>