我正在学习PHP并且正在尝试最基本的东西:从表单中捕获信息并将其粘贴到mySQL数据库中的表中。我很尴尬地问这样一个愚蠢的新手问题,但在审阅了两本书,几本Stack Overflow帖子和7个不同的教程之后,我仍然无法得到可怜的代码来为我的数据库编写一些糟糕的指标。
这是代码的最新版本。有人可以告诉我我做错了吗?
*基本HTML表单*
<form method="post" action="post_metrics_stack.php" >
<p>Date<br />
<input name="date" type="text" /></p>
<p>Metric1<br />
<input name="metric1" type="text" /></p>
<p>Metric2<br />
<input name="metric2" type="text" /></p>
<input type="submit" name="submit" value="Submit" />
</form>
*处理器文件*
<?php
$date=$_POST['date'];
$metric1=$_POST['metric1'];
$metric2=$_POST['metric2'];
$con = mysql_connect("localhost", "root", "mypassword");
if (!$con)
{die('Could not connect to mysql: ' . mysql_error());}
$mydb = mysql_select_db("mydatabasename");
if (!$mydb)
{die('Could not connect to database: ' . mysql_error());}
mysql_query("INSERT INTO my_metrics VALUES ('$date', '$metric1', '$metric2')");
Print "Your metrics have been successfully added to the database.";
mysql_close($con);
?>
答案 0 :(得分:2)
您的mysql语法错误。
尝试
INSERT INTO my_metrics
SET
date = '$date',
metric1 = '$metric1',
metric2 = '$metric2'
答案 1 :(得分:2)
就SQL注入的漏洞而言,您应该将输入字符串提供给mysql_real_escape_string();.这将逃避任何不需要的字符。
连接数据库时,请编写
$con = mysql_connect("localhost", "root", "mypassword");
if (!$con)
{die('Could not connect to mysql: ' . mysql_error());}
您可以通过编写
来简化此操作,并使其更具可读性mysql_connect('localhost','root','mypassword') or die('Could not connect to mysql:<hr>'.mysql_error());
要解决您的问题,请查看指定的列名称是否有帮助。如果不这样做,mysql将假定您按列的顺序输入值,您可能会遇到ID字段或其他类似的问题。您的查询可能如下所示:
"INSERT INTO my metrics (date,metric1,metric2) VALUES ('$data','$metric1','$metric2'))"
最后,这是速度方法。
有两种方法可以编写字符串:使用单引号('string')和使用双引号(“string”)。在'string'和“string”的情况下,它们的工作原理完全相同,但是有区别。请查看以下代码
$age=3
echo 'the cat is $age years old.';
//prints out 'the cat is $age years old.'
echo "the cat is $age years old.";
//prints out 'the cat is 3 years old'
echo 'the cat is '.$age.' years old';
//prints out 'the cat is 3 years old'.
从这个例子中可以看出,当你使用单引号时,PHP不会检查字符串中的变量以及要在字符串内部解析的其他内容。这样做比将变量合并到字符串需要花费更长的时间。所以虽然
echo "the cat is $age years old"
的类型比
短 回声'猫是'。$ age。'岁了';当你编写更大的应用程序时,它会提高你的页面加载量。
答案 2 :(得分:2)
根据表的外观,您的代码可能有效,也可能无效,
"INSERT INTO my_metrics VALUES ('$date', '$metric1', '$metric2')"
假设字段按此顺序排列,并且在此字段之前没有字段。
"INSERT INTO my_metrics (date, metric1, metric2) VALUES ('$date', '$metric1', '$metric2')"
将会更加面向未来,也可以解决您的问题,因为它们会插入到正确的字段中。
你也可能得到一些关于字段定义的错误数据,尝试在phpmyadmin或在命令行而不是在php中进行插入,然后从那里向后工作。
答案 3 :(得分:1)
万岁!万岁!万岁!
谢谢大家提供这些有用的建议!它终于奏效了!这是更新的代码,以防任何其他新手有相同的问题。 (希望我没有搞任何其他事情。)
<强>表格强>
<form method="post" action="post_metrics_stack.php" >
<p>Date<br />
<input name="date" type="text" /></p>
<p>Metric1<br />
<input name="metric1" type="text" /></p>
<p>Metric2<br />
<input name="metric2" type="text" /></p>
<input type="submit" name="submit" value="Submit" />
</form>
<强>处理器强>
<?php
ini_set('display_errors', 1); error_reporting(E_ALL);
// 1. Create connection to database
mysql_connect('localhost','root','mypassword') or die('Could not connect to mysql: <hr>'.mysql_error());
// 2. Select database
mysql_select_db("my_metrics") or die('Could not connect to database:<hr>'.mysql_error());
// 3. Assign variables (after connection as required by escape string)
$date=mysql_real_escape_string($_POST['date']);
$metric1=mysql_real_escape_string($_POST['metric1']);
$metric2=mysql_real_escape_string($_POST['metric2']);
// 4. Insert data into table
mysql_query("INSERT INTO my_metrics (date, metric1, metric2) VALUES ('$date', '$metric1', '$metric2')");
Echo 'Your information has been successfully added to the database.';
print_r($_POST);
mysql_close()
?>
答案 4 :(得分:0)
在这里你去爱:)尝试W3c它是一个新的pepps的好地方
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$sql="INSERT INTO my_metrics (date, metric1, metric2)
VALUES
('$_POST[date]','$_POST[mertric1]','$_POST[metric2]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Your metrics have been successfully added to the database.";
mysql_close($con)
?>