将表单数据输入到SQL

时间:2015-01-18 03:57:58

标签: php sql forms sql-insert

我只是尝试将表单数据发送到SQL数据库。

dbconnect.php具有配置选项,并且可以正常工作,因为我能够在其他页面上检索我的表。

我能够回复"将信息分成表格/ div,当我按下提交是否我自己做PHP,或者将其提交到另一个页面即。 addevent.php

但是,我无法弄清楚我将它发送到SQL数据库时做错了什么。现在,不幸的是,我已经在这里呆了几个小时,所以我的代码可能会混乱一些,我可能会使用不同形式的sql,pdo等。此时我的思绪爆炸了哈哈。

Anywho,继承人的代码 - 第一个是表单页面即。 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'?>
			
			
&#13;
&#13;
&#13;

&#13;
&#13;
<?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>
&#13;
&#13;
&#13;

编辑:我的大脑被关闭一半,所以我忘记了一些相关的信息:

我得到的主要错误是: 注意:未定义的变量:第12行的C:... \ addevent.php中的showtitle 对于每个变量/名称/您想要调用的任何内容。

我已尝试过多种方式来自其他人的帖子和答案,由于某种原因我无法让插入sql工作。我可以检索罚款,回声很好,只是插入我有重大问题。如果有人甚至可以向我展示代码的基本格式,我应该使用/基本结构/语法......或者指向正确的方向,这将是非常棒的。网上的很多内容已经过时,使用旧的api,或者只是在其中有大量SQL注入的小辅导,我发现很难找到 UP TO DATE 教程这个互联网。

这是我的#34; .php&#34;的语法。我在其中检索表行的页面。 (它完美地运作)。

&#13;
&#13;
$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();
&#13;
&#13;
&#13;

这是一个缩短版本,如果有人想要编辑它,或者向我展示可能正确的方法,可以更容易。

&#13;
&#13;
<?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>
&#13;
&#13;
&#13;

php下的行包括dbconnect.php正是dbconnect.php文件中的内容,不包括servername,username,db info ...

dbconnect是否有效。只是把信息放在那里帮助,因为我的代码是如此混乱。

ID用于自动递增,添加的戳应该只是表单提交到数据库时的时间戳。

&#13;
&#13;
<?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()
?>
&#13;
&#13;
&#13;

我现在的错误是 警告:出现错误....您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以便在2015-12-06&#39;,&#39; 12-06-2015&#39;,&#39; 123 Middle Road& #39;,&#39;伦敦&#39;&#39; ON&#39;,&#39; https://www.google.ca/&#39;在第48行C:\ xampp \ htdocs \ comedyscene \ addevent.php的第2行

3 个答案:

答案 0 :(得分:1)

我将概述错误。

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没有反映在您的值中

$sql="INSERT INTO may (id,

你有足够的时间来修复你的代码。


将错误报告添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。


我还要注意,在使用此类方法SQL injectionuse mysqli with prepared statements时,您向PDO with prepared statements开放,它们更安全


修改

根据您的编辑:https://stackoverflow.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()函数:

I.e。:

.... ,'$ptel','$pemail', NOW())";

逃避您的价值观

$showtitle = stripslashes($_POST['showtitle']);
$showtitle = mysqli_real_escape_string($conn, $_POST['showtitle']);
  • 并为其他人做同样的事。

另一个编辑:

$etimef的值'$etimef,'$dateu'中的'$etimef','$dateu'缺少引号{{1}}

答案 1 :(得分:1)

您的代码中出现了3个主要问题:

  • 语法错误
  • 使用
  • 变量
  • MySQL API

语法错误

有些大括号放错了,其中第一个大括号出现在&#34之后的代码行11中; if(isset(...&#34;。

使用

变量

$ showtitle是一个未定义的变量,因为如果你没有打开PHP配置选项register_globals,就不能使用这种格式来收发帖子数据。这个选项在PHP 5.3.0中已被弃用,将被删除PHP 5.4.0。实际上在版本4.2.0之后,此选项默认为off而不是on

MySQL API

似乎你没有给你的代码命名为&#39; dbconnect.php&#39;,所以我不知道你用什么方式连接MySQL数据库。所以我只写我的连接和插入数据的版本,完整的代码在下面(我剪切了一些变量,使其读取时间很短):

<?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>

答案 2 :(得分:0)

您的变量未定义且为空。正如您在代码中看到的那样,您是第一次在查询中使用变量。

simpel解决方案是将帖子的值加载到变量中,例如:

$showtitle = $_POST['showtitle'];

对查询中的所有变量执行此操作,并将代码放在插入的上方。

下一点是,您正在插入ID,但您的插入中没有适当的值。如果此列是自动增量列,则只需在查询中删除ID,否则将值放入。

插件运行后,您应该阅读有关sql查询的验证和清除的信息。在您的查询中,用户可以输入每个值,这不是您可能想要的。