PHP表单没有写入mySQL数据库

时间:2011-05-16 18:55:39

标签: php mysql

我正在学习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);
?> 

5 个答案:

答案 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)
    ?>