0

私はおそらく基本的なものが欠けているので、この時点で、2つ目の目が必要です。訪問者が情報を送信できるように、自分のWebサイトに簡単な入力フォームを作成しています。今、私は彼らを仕事と呼んでいます(私はそれを機能させたいだけです)。[送信]をクリックすると、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のスクリーンショットです

ここにリンクの説明を入力してください

4

2 に答える 2

1

内に一重引用符がない可能性があると思います$_POST[...]

ただし、ソリューションはSQL インジェクションに対して開かれているため、引用符/バックスラッシュを処理し、パラメーターでエスケープする準備済みステートメントを使用することをお勧めします。

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

(4 つの ssss は、すべてのパラメーターが文字列であることを示します。)

于 2012-07-08T22:15:13.233 に答える
0

あなたの問題は単に「mysqlが接続しない」部分だと思います(「////」がフィールドの正しい値であるとも思います)

接続が Unix ソケット経由で行われていない場合は、「localhost」を「127.0.0.1」または内部ネットワーク インターフェイスの IP に置き換えてみてください。

ただし、コードには 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 で出荷される内容を徹底的に検証します。

于 2012-07-08T22:00:50.333 に答える