2012-07-08 3 views
0

나는 기본적인 것을 놓친 것 같습니다. 그래서이 시점에서 두 번째 눈이 필요합니다. 방문자가 몇 가지 정보를 제출할 수 있도록 내 웹 사이트에 간단한 입력 양식을 만들고 있습니다. 지금 당장은 그들을 일자리라고 부르며 (나는 단지 일하게하고 싶다). 제출을 클릭하면 SQL 데이터베이스가 분명히 업데이트되지 않도록 PHPMYadmin 측면에 대한 정보가 표시되지 않습니다. 처음이 말을하지 않는 것이 나쁘다.PHP MySQL이 연결되지 않고 게시 중임

또한 보안상의 이유로 암호가 숨겨져 있지만 정확합니다.

여기 내 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> 

내가 당신의 문제는 단순히 "연결되지 않습니다 MySQL은"일부 (라고 가정하면 phpMyAdmin

enter link description here

+1

가 왜'사용합니까 "/////"'로 mysql_connect '의 세 번째 매개 변수()에서'? – Lion

+2

무엇이 문제입니까? 당신은 어떤 결과물을 얻습니까? – symcbean

+6

[Bobby Tables] (http://bobby-tables.com/) 지문이이 코드 전체에 표시됩니다. –

답변

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

(네 ssss는 모든 매개 변수 문자열을 나타냅니다.)

+0

이렇게하면 작동합니다 : –

+0

stmt_init(); if (! $ stmt2-> prepare ("INSERT INTO jobListForm (NAME, Email, JobTitle, JobDescription) VALUES (?,?,?,?)")) { die;} 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(); ?> –

+0

hmmm, 여전히 SQL 데이터베이스에 나타나지 않습니다 –

0

에 대한 스크린 샷입니다 '////'이 필드의 올바른 값이라고 가정)

"localhost"를 "127.0.0.1"또는 내부 네트워크 인터페이스의 IP로 바꾸어보십시오. 유닉스 소켓을 통해 연결이되지 않는 경우에 대비하십시오.

그러나 코드가이 형태와 MySQL을 사용하여 상대적으로 무해한 SQL 주입 취약점의 정말 나쁜 경우가 있습니다 (그것은 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에 포함 된 내용을 철저히 검증하십시오.

관련 문제