2013-04-12 2 views
0
FIXED! See bottom for solution. 

나는 엄청난 어려움을 겪고 있습니다. 나는 지금 몇 주 동안 그곳에 있었다. 나는 AJAX를 사용하여 mysql에 새로운 레코드를 추가하려고한다. PHP 파일은 100 % 작동하지만 AJAX를 데이터를 보내는 POST 메서드가있는 폼에 사용할 수없는 것처럼 보입니다. 이것은 내 첫 번째 시간 StackOverflow btw에 여기에 그래서 쉽게 걸릴.AJAX는 PHP 파일로 POST 할 수 없습니다.

HTML 코드 :

function addRecord(){ 
    if (
     document.addform.cname.value == "" 
     || document.addform.fuel.value == "" 
     || >document.addform.trans.value == "" 
     || document.addform.engine.value == "" 
     || document.addform.doors.value == "" 
     || document.addform.total.value == "" 
    ) 
    { 
     alert ("Empty >field(s) - Cannot create record"); 
     return; 
    } 

    var mydata = null; 
    // Mozilla/Safari 
    if (window.XMLHttpRequest) 
    { 
     xmlHttpReq2 = new XMLHttpRequest(); 
    } 
    // IE 
    else if (window.ActiveXObject) 
    { 
     xmlHttpReq2 = new ActiveXObject ("Microsoft.XMLHTTP"); 
    } 

    var cname = document.getElementById('cname').value; 
    var fuel = document.getElementById('fuel').value; 
    var trans = document.getElementById('trans').value; 
    var engine = document.getElementById('engine').value; 
    var doors = document.getElementById('doors').value; 
    var total = document.getElementById('total').value; 

    mydata = '?cname='+cname+'&fuel='+fuel+'&trans'+trans+'&engine'+engine+'&doors'+doors+'&total'+total;   

    alert ("To Server (Add New Record):\n\nadd.php" + mydata); 

    xmlHttpReq2.open('POST', "add.php" +mydata, true); 
    xmlHttpReq2.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlHttpReq2.send(null); 
    xmlHttpReq2.onreadystatechange = addRecordCallback; 
} 

PHP 코드는 :

<?php 

$link = mysql_connect ("194.81.104.27", "www", "www"); 
mysql_select_db ("xyz") or die(mysql_error()); 

$tot=$_POST[total]; 
$door=$_POST[doors]; 
$query = "INSERT INTO tbl 
    (ID, CARNAME, FUELTYPE, TRANSMISSION, ENGINESIZE, DOORS, TOTAL, AVAILABLE) 
    VALUES ('$_POST[cname]','$_POST[cname]', '$_POST[fuel]', '$_POST[trans]','$_POST[engine]', $door, $tot, $tot)"; 
    $result = mysql_query($query); 
    mysql_close ($link); 
?> 

은 어떻게됩니까

<form name='addform' method='POST' > 
    <td></td> 
    <td><input type='text' id='cname'></td> 
    <td> 
     <select id='fuel'> 
      <option value='Petrol'>Petrol</option> 
      <option value='Diesel'>Diesel</option> 
      <option value='Hybrid'>Hybrid</option> 
      <option value='LPG'>LPG</option> 
     </select> 
    </td> 
    <td> 
     <select id='trans'> 
      <option value='Automatic'>Automatic</option> 
      <option value='Manual'>Manual</option> 
      <option value='Semi-Auto'>Semi-Auto</option> 
     </select> 
    </td> 
    <td><input type='text' id='engine'></td> 
    <td><input type='text' id='doors'></td> 
    <td><input type='text' id='total'></td> 
</tr> 
<tr> 
    <td><input type='submit' value='Add Car' onclick='addRecord()'></td> 
... 

내가 자바 스크립트를 처리하기 위해 외부의 .js 파일이 여기에 코드입니다 양식에 정보를 입력하고 버튼을 클릭하면 경고 메시지가 양식에서 실제로 데이터를 가져옵니다. 그러나 그 후에는 아무 일도 일어나지 않습니다. 어떤 이유로 데이터가 올바른 형식으로 PHP 파일로 전송되지 않는다고 생각합니다.

감사합니다.

Solution was: 

나는 그것을 작동시킬 수 있었다! 결함의 일부는 @adeneo가 내가 onclick='addRecord(); return false;'을 거기에 가지지 않고있다라고 말했다라는 것이었다! 내가 한 또 다른 일은 폼의 ID를 제거하는 것이 었습니다. 나는 또한 "mydata"를 .send에 첨부했다 : xmlHttpReq2.send(mydata); 그리고 마침내 나는 "?" mydata 변수 수집 중 cname 앞에있었습니다. 그래서 그것은 mydata = '?cname='+cname+...이었고 나는 ?을 제거해야했습니다. 모든 도움을 주신 모든 분들께 감사드립니다!

+1

'add.php'는 어떻게 생겼습니까? – jmeas

+0

죄송합니다. 추가했는데 어떤 이유로 그것이 표시되지 않았습니다. 지금 일해야한다. PHP 파일은 100 % 작동합니다. 예를 들어

+1

또한 많은 매개 변수에 이름과 값 사이에 등호가 없습니다 (mydata에서) –

답변

0

잘못된 꽤 몇 가지가 있습니다.

특성을 input/select 요소에 사용하고 있지 않습니다. POST 요청과 함께 보내려면 name이 있어야합니다. id 속성은 형태와는 아무 상관이 없습니다 (라벨을 사용하는 경우를 제외하고를하며 for 그들에게 포인트를 속성) 자바 스크립트에 관해서는

<form action="/path/to/php/file.php" method="post" id="addform"> 
    <div> 
     <label for="carname">CName</label> 
     <input type="text" name="carname" id="carname"> 
    </div> 
    <div> 
     <label for="fuel">Fuel</label> 
     <select id="fuel" name="fuel"> 
      <option value="Petrol">Petrol</option> 
      <option value="Diesel">Diesel</option> 
      <option value="Hybrid">Hybrid</option> 
      <option value="LPG">LPG</option> 
     </select> 
    </div> 
    <div> 
     <label for="transmission">Transmission</label> 
     <select id="transmission" name="transmission"> 
      <option value="Automatic">Automatic</option> 
      <option value="Manual">Manual</option> 
      <option value="Semi-Auto">Semi-Auto</option> 
     </select> 
    </div> 
    <div> 
     <label for="engine">Engine</label> 
     <input type="text" id="engine" name="engine"> 
    </div> 
    <div> 
     <label for="doors">Doors</label> 
     <input type="text" id="doors" name="doors"> 
    </div> 
    <div> 
     <label for="total">Total</label> 
     <input type="text" id="total" name="total"> 
    </div> 
    <div> 
     <label for="submit">Engine</label> 
     <input type="submit" id="submit" value="Add Car" onclick="addRecord()"> 
    </div> 
</form> 

, jQuery를 (또는 유사한 라이브러리)을 사용하는 것이 훨씬 쉽다. 모든 핵심 정보와 브라우저의 차이점을 추상화하여 훨씬 쉽게 만들어줍니다.방금 PHP 배운처럼

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script> 
// When the page is done loading... 
$(function() { 
    // When the form is submitted 
    $("form#addform").on("submit", function() { 
     // Get the form data and serialize it 
     var data = $(this).serialize(); 
     // Create a POST request 
     var post = $.post("/path/to/php/file.php", data); 
     // When the request is done show a message 
     post.done(function() { 
      alert("Form submitted!"); 
     }); 
     // If the request fails show another message 
     post.fail(function() { 
      alert("Error! Form not submitted."); 
     }); 
     // Returning false prevents the form's normal 
     // behaviour, i.e. its submission 
     return false; 
    }); 
}); 
</script> 

PHP 코드를 보면 그것은 본다 : 당신은 더 이상 사용되지 않는 확장 (mysql)를 사용하는을; 보안 문제없이 POST 변수를 사용하기 만하면됩니다. 그리고 귀하의 SQL 코드가 조금이라도 보이면 (예 : AVAILABLE은 무엇이며 $total으로 설정되는 이유는 무엇입니까?); 마지막으로 문자열 배열 인덱스를 따옴표로 묶어야합니다.

// Database handle 
$db = new MySQLi('194.81.104.27', 'www', 'www', 'xyz'); 

// SQL query with placeholders 
$sql = "INSERT INTO tbl (CARNAME,FUELTYPE,TRANSMISSION,ENGINESIZE,DOORS,TOTAL) VALUES (?,?,?,?,?,?)"; 

// Create a statement object 
$stmt = $db->prepare($sql); 

// Fill in the placeholders 
$stmt->bind_param('ssssii', $carname, $fuel, $transmission, $engine, $doors, $total); 

// Set the values 
$carname  = filter_input(INPUT_POST, 'cname', FILTER_SANITIZE_STRING); 
$fuel   = filter_input(INPUT_POST, 'fuel', FILTER_SANITIZE_STRING); 
$transmission = filter_input(INPUT_POST, 'transmission', FILTER_SANITIZE_STRING); 
$engine  = filter_input(INPUT_POST, 'engine', FILTER_SANITIZE_STRING); 
$doors  = filter_input(INPUT_POST, 'doors', FILTER_SANITIZE_NUMBER_INT); 
$total  = filter_input(INPUT_POST, 'total', FILTER_SANITIZE_NUMBER_INT); 

// If the statement was not executed then there was an error 
if ($stmt->execute() === false) { 
    header('HTTP/1.0 404 Not Found', true, 404); 
} 
// Done 

참고 : 나는 예제 중 하나를 테스트하지 않았다. 나는 텍스트 편집기에서 텍스트를 썼다. 필요할 때마다 수정해야 할 것이다.

+0

나는 방금 마지막 학기에 PHP를 배웠다. 나는 Uni에서 내년에이 일을하지 않을 것이므로 아무것도 확보 할 생각이 없다. 이것은 나의 경로가 아니다. (나는 컴퓨터 시스템에있다. 엔지니어링) .AVAILABLE은 자동차를 임대하는 사업이기 때문에 TOTAL과 같은 금액을 얻습니다. 그리고 자동차 배치를 추가하면 처음에는 합계가 사용 가능할 것입니다. 거기에서부터 자동차 대여 또는 차감에 따라 차감됩니다 그들이 돌아 왔을 때 자동차를 지우십시오. 귀하의 의견을 주셔서 감사합니다. 당신이 말하는 것에 대해 알고있는 것처럼 보이므로 나는 대답으로 표시 할 것입니다. :) –

1

jquery를 이미 사용하고 있기 때문에 생생하게 살아있는 것은 AJAX에서도 사용합니다.

$ 아약스 ({ URL : "경로 PHP의" 유형 : "POST", 데이터 :. $ ("# formID") (직렬화), });

데이터로 보내면 좋을 것입니다.

죄송합니다. 전화로 감지되었습니다. 인사말

Ezeky

+0

어디에 넣을까요? 나는 jQuery와 함께 일한 적이 없다 ... –

+0

현재 아약스 요청을 이것으로 바꾼다. – Ezeky

+0

또한 양식 입력에 이름이 필요하지 않습니까? – Nate

0

전송 방법으로 GET을 사용하는 것처럼 URL의 뒷면에 "mydata = '?cname='+cname+'&fuel..." 데이터를 붙여 넣는 것이지만 전송 방법으로 POST를 정의하므로이 작업을 수행하지 않아도됩니다.

POST 메서드는 you.Try가

xmlHttpReq2.open('POST', "add.php" +mydata, true); 

또한이 라인에서 +mydata을 제거하기 위해 데이터를 캡슐화, 아래 두 줄 이상, 당신은

xmlHttpReq2.onreadystatechange = addRecordCallback; 
여기 목록에없는 함수를 호출하고

그 기능이 무엇인지 파악하는 것이 도움이 될 것입니다.

관련 문제