PHP MySQL没有连接和发布

时间:2012-07-08 21:50:33

标签: php html

我可能遗漏了一些基本的东西,所以在这一点上,我只需要第二双眼睛。我正在我的网站上构建一个简单的输入表单,以便访问者可以提交一些信息。现在,我只是称他们为工作(我只想让它工作)。当我单击提交时,我没有在PHPMYadmin端看到任何信息,因此SQL数据库显然没有更新。我第一次不这么说是不好的。

另外,出于安全考虑,我的密码是隐藏的,但它是正确的。

这是我的PHP和我的HTML。

<?php
$con = mysql_connect("localhost","projedl8_Jason","/////");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("projedl8_quicktern", $con);

$sql="INSERT INTO jobListForm (NAME, Email, JobTitle, JobDescription)
            VALUES ('JASON', '$_POST[email]','$_POST[job_title]','$_POST[job_description]')";

if (!mysql_query($sql,$con))
  {
      die('Error: ' . mysql_error());
  }
echo "1 record added";

                        mysql_close($con);
?>

最后:

  <form name="submitjobform" method="post" action="job_submit.php">
    <table width="450px">
    <tr>
     <td valign="top">
      <label for="name">Name</label>
     </td>
     <td valign="top">
      <input  type="text" name="first_name" maxlength="100" size="30">
     </td>
    </tr>
    <tr>
     <td valign="top">
      <label for="email">Email Address</label>
     </td>
    <td valign="top">
      <input  type="text" name="email" maxlength="80" size="30">
    </td>
    </tr>
   <tr>
    <td valign="top">
     <label for="job_title">Job Title</label>
    </td>
    <td valign="top">
     <input  type="text" name="job_title" maxlength="30" size="30">
    </td>
    </tr>
    <tr>
     <td valign="top">
      <label for="comments">Job Description</label>
     </td>
     <td valign="top">
      <textarea  name="job_description" maxlength="1000" cols="25" rows="6"></textarea>
    </td>
    </tr>
    <tr>
     <td colspan="2" style="text-align:left">
     <input type="submit" name="submit" value="Submit" size="100"></td>
    </tr>
    </table>
    </form>

以下是PHPMYADMIN的屏幕截图

enter link description here

2 个答案:

答案 0 :(得分:1)

我认为这可能是$_POST[...]中缺少的单引号。

但是您的解决方案可以使用 SQL injection ,因此最好使用预先准备好的语句, 处理引号/反斜杠,在参数中转义。

    $db = new mysqli($dbserver, $dbusername, $dbpassword, $dbdatabase);
    $stmt2 = $db->stmt_init();
    if (!$stmt2->prepare("INSERT INTO jobListForm (NAME, Email, JobTitle, JobDescription)
        VALUES (?, ?, ?, ?)")) {
        die('Error');
    } else {
        $stmt2->bind_param('ssss', 'JASON', $_POST['email'], $_POST['job_title'], $_POST['job_description']);
        if (!$stmt2->execute()) {
            die;
        } else {
            $id = mysqli_insert_id($db);
        }
    }
    $stmt2->close();

(这四个sss表示每个参数都是一个字符串。)

答案 1 :(得分:0)

我认为你的问题只是“mysql将无法连接”部分(我还假设'////'是该字段的正确值)

尝试将“localhost”替换为“127.0.0.1”或使用内部网络接口的IP替换,以防通过Unix套接字进行连接。

但是,你的代码有一个非常糟糕的SQL注入漏洞,在这种形式下使用MySQL相对无害(它是一个INSERT形式,MySQL不允许多个语句执行,所以发布

email=','',''); DROP TABLE jobListForm; --

将导致

INSERT INTO jobListForm (NAME, Email, JobTitle, JobDescription)
        VALUES ('JASON', '','',''); DROP TABLE jobListForm; --','','');

传递给MySQL,只有第一个查询INSERT才会执行。

但是,在其他地方,即使提交的密码错误,也可能允许SELECT ... LOGIN查询返回TRUE和管理员记录,允许任何人管理您的系统。

将准备好的语句与PDO一起使用,或彻底验证POST中的内容。