2013-06-29 21 views
6

Próbuję przekazać wiele parametrów za pomocą metody POST przy użyciu AJAX do mojego pliku PHP, dzięki czemu mogę zrobić zapytanie do bazy danych MySQL.Przekazywanie wielu parametrów przez POST przy użyciu ajax do php

plik HTML:

 <div class="dropdown dropdown-dark"> 
      <select class="dropdown-select" id="searchselect11" required> 

         <option value="faculty">Faculty</option> 
         <option value="dept">Dept.</option> 
         <option value="course">Course</option> 
         <option value="year">Year</option> 
         <option value="name">Name</option> 

      </select> 
     </div> 


<td style="padding:5px;"> <input type="text" id="searchtext11" required></td> 

<button id="searchgo1" onclick="searchone()"></button> 

Jest to plik JavaScript gdzie pomyślnie przejść wartość rozwijaną i wartości tekstowe i przechowywać je w sv i searchtext11 zmiennych odpowiednio. Ale problemem jest przekazanie dwóch wartości do pliku PHP. Problem wydaje się być w the_data zmiennej, która jest przekazywana w xmlhttp.send(the_data);

Funkcja searchone() się następująco:

function searchone() 
{ 
//alert("hi"); 

var xmlhttp; 
var sel = document.getElementById('searchselect11'); 
var sv = sel.options[sel.selectedIndex].value; 
var searchtext11= document.getElementById("searchtext11").value; 
var the_data = 'select='+sv+'text='+searchtext11; 


if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 




    xmlhttp.open("POST", "searchone.php", true);   
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");    
    xmlhttp.send(the_data);  


    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4) { 
     document.getElementById("searchresults").innerHTML = xmlhttp.responseText; 
    } 
    } 
} 

kod PHP ta działa tylko wtedy, gdy

var the_data='select='+sv; 

searchone.php

<?php 


if (isset($_POST['select'])) { 
    $str = $_POST['select']; // get data 

    echo $str; 
} 
?> 

Jak mogę uzyskać zarówno listę rozwijaną, jak i wartość pola tekstowego do mojego pliku PHP, dzięki czemu mogę utworzyć kwerendę sql przy użyciu tych zmiennych.

Odpowiedz

8

trzeba użyć znaku handlowego, tak jakby to był GET. Ponadto, należy encode your text aby upewnić się, że nie zawiera żadnych znaków, które mogłyby mieć szczególne znaczenie

var the_data = '' 
    + 'select=' + window.encodeURIComponent(sv) 
    + '&text=' + window.encodeURIComponent(searchtext11); 
// ^     ^^ 

Nie trzeba rozszyfrować ręcznie po stronie serwera, ponieważ jesteś już pozwolić, aby to wiedzieć, że POST dane to x-www-form-urlencoded.

+0

Dodam, że 'okno' 'window.encodeURIComponent' jest niejawny i można go pominąć ... – Basic

+0

Proszę również zaznaczyć, czy powinienem używać ' if (isset ($ _ POST ['select'])) 'lub' if (isset ($ _ POST [' wybierz '], $ _POST [' text '])) – akashaggarwaal

+0

@akashaggarwaal Proponuję sprawdzić oba, jeśli potrzebujesz obu. @Basic 'window' można w większości przypadków pominąć, ale kiedy używam _methods_ z' window', mój styl to zachować. Na przykład użyłbym 'window.setTimeout'. –

3

dodać & w tym ciągu:

var the_data = 'select='+sv+'&text='+searchtext11; 
+0

będzie działać, jeśli przejdę 3 zmienną w jednej linii –

+0

@ Rush.2707 dowolną liczbę zmiennych: 'var data = 'var1 =' + var1 + '& var2 =' + var2 + '& var3 =' + var3 + '... itp. "Długość łańcucha jest ograniczona tylko przez [długość żądania GET] (http://stackoverflow.com/questions/2659952/maximum-length-of-http-get-request) (~ 8Kb). Lepiej jest też użyć [encodeURIComponent()] (https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) na każdej zmiennej – vladkras

Powiązane problemy