Ajax: 500 error interno del server

Estoy usando ajax para get events de mi database. Recuperar los resultados no funciona, no se muestra nada, y en la console aparece el siguiente post de error:

POST http://www.example.com/system/live_filter.php 500 (Internal Server Error) jquery.min.js: 4

Aquí está mi HTML / JS :

<div id="results"> <script type="text/javascript"> // 1. When user comes on page from homepage, results will be fetched with ajax function updateResults() { // 2. Create array with values of all filter fields var value_town_id = $('#town_id').val(); var value_type = $('#filter_type').val(); var value_date = $('#filter_date').val(); var array_filter_values = new Array(value_town_id, value_type, value_date); array_filter_values.join(', '); query_value = array_filter_values; // 3. Start ajax $.ajax({ type: "POST", url: "system/live_filter.php", data: { query: query_value }, cache: false, success: function(html){ $("#results").html(html); } }); }; // 4. FIRE FUNCTION! updateResults(); </script> </div> 

Aquí está mi live_filter.php al que se envían los valores a través de Ajax:

 require_once 'db.php'; // Define Output HTML Formating $html = ''; $html .= '<div class="event">'; $html .= '<h3>titleString</h3>'; $html .= '<p>typeString</p>'; $html .= '<p>dateString</p>'; $html .= '</div>'; // Get values $values_string = $_POST['query']; // Explode to array $values_array = explode(',', $values_string); $town_id = $values_array[0]; $type = $values_array[1]; $date = $values_array[2]; // Prepare values for database results query $town_id = $db->real_escape_string($town_id); $type = $db->real_escape_string($type); $date = $db->real_escape_string($date); // Build Query $query = "SELECT * FROM events WHERE towns_id=$town_id AND type='$type' AND date>=$date"; // Do Search $results = $db->query($query); while($result = $results->fetch_assoc()) { // Format Output Strings And Hightlight Matches $display_title = $result['title']; $display_type = $result['type']; $display_date = $result['date']; // Insert title $output = str_replace('titleString', $display_title, $html); // Insert type $output = str_replace('typeString', $display_type, $output); // Insert date $output = str_replace('dateString', $display_date, $output); // Output echo($output); } 

Alguien tiene una idea de dónde está el problema?

Aparece el siguiente post de error: Tiene un error en su syntax SQL; verifique el manual que corresponde a su versión del server MySQL para la syntax correcta para usar cerca de 'AND type =' 'AND date> =' '' en la línea 1

5 Solutions collect form web for “Ajax: 500 error interno del server”

Vamos a arreglar esto y simplificarlo un poco …

 function updateResults() { query = {"town_id": $('#town_id').val(), "value_type": $('#filter_type').val(), "value_date": $('#filter_date').val() } $.ajax({ type: "POST", url: "system/live_filter.php", data: query, cache: false, success: function(html){ $("#results").html(html); } }); }; 

y luego en PHP:

 require_once 'db.php'; // Define Output HTML Formating $html = ''; $html .= '<div class="event">'; $html .= '<h3>titleString</h3>'; $html .= '<p>typeString</p>'; $html .= '<p>dateString</p>'; $html .= '</div>'; $town_id = $_REQUEST['town_id']; $type = $_REQUEST['value_type']; $date = $_REQUEST['value_date']; // Prepare values for database results query $town_id = $db->real_escape_string($town_id); $type = $db->real_escape_string($type); $date = $db->real_escape_string($date); // Build Query $query = "SELECT * FROM events WHERE towns_id='$town_id' AND type='$type' AND date>='$date'"; /*Should it definitely be towns_id and not town_id?*/ // Do Search $results = $db->query($query); while($result = $results->fetch_assoc()) { // Insert title $output = str_replace('titleString', $result['title'], $html); // Insert type $output = str_replace('typeString', $result['type'], $output); // Insert date $output = str_replace('dateString', $result['date'], $output); // Output echo($output); } 

Por supuesto, si está dispuesto a mover la plantilla, se vuelve aún más simple …

 require_once 'db.php'; $town_id = $db->real_escape_string($_REQUEST['town_id']); $type = $db->real_escape_string($_REQUEST['value_type']); $date = $db->real_escape_string($_REQUEST['value_date']); $query = "SELECT * FROM events WHERE towns_id='$town_id' AND type='$type' AND date>='$date'"; $results = $db->query($query); while($result = $results->fetch_assoc()) { $html = '<div class="event">'; $html .= '<h3>{$result['title']}</h3>'; $html .= '<p>{$result['type']}</p>'; $html .= '<p>{$result['date']}</p>'; $html .= '</div>'; echo $html; } 

En cuanto a por qué está cometiendo errores …

En primer lugar, ¿está seguro de que las variables están siendo pobladas? El error que dio en los comentarios ocurriría si town_id faltara. Ya que no está citando ese campo, resultaría en SQL roto. También hace que el escape sea inútil ya que la salida espera estar entre comillas.

También verificaría que el formatting de la date proveniente de su formulario sea uno que su database comprenda …

Intente cambiar el PHP para que sea el siguiente:

 require_once 'db.php'; $town_id = $db->real_escape_string($_REQUEST['town_id']); $type = $db->real_escape_string($_REQUEST['value_type']); $date = $db->real_escape_string($_REQUEST['value_date']); $query = "SELECT * FROM events WHERE towns_id=$town_id AND type='$type' AND date>=$date"; echo $query; 

Luego tome el SQL que le da y cópielo / péguelo en la herramienta de administración de su database y vea qué sucede. Una vez que haya solucionado los errores de syntax, sabrá cómo solucionar la consulta en su PHP

¿Puedes imprimir el valor del Post si la variable $ town_id está vacía entonces solo sql genera un error?

 SELECT * FROM events WHERE towns_id = AND type='$type' AND date>='$date' 

en caso de que si desea ejecutar la consulta con towns_id está vacío. agregar solo con todas las variables

 SELECT * FROM events WHERE towns_id = '$town_id' AND type='$type' AND date>='$date' 

No hay nada que me salte como sintácticamente incorrecto con tu PHP. El problema puede estar en MySQL, una inclusión o cualquier otra cosa. Compruebe su logging de errores de PHP para saber dónde search. Si no puede encontrar su logging de errores, intente

 php -l file.php 

para ejecutar una verificación de pelusas en todos sus incluye y el file en sí en la primera instancia. Luego, siga las sugerencias anteriores con respecto a llamarlo a su browser y observar cualquier error.

Debes poner la date entre comillas en la consulta:

 $query = "SELECT * FROM events WHERE towns_id=$town_id AND type='$type' AND date>='$date'"; 

También debe agregar la verificación de errores a su código:

 $results = $db->query($query) or die($db->error); 

Otro problema: en su Javascript, está uniendo los valores de la consulta con ', ' (con un espacio después de la coma), pero en PHP está explotando con solo ',' (sin espacio). Deberías ser consistente. Aún mejor sería enviar todos los valores de consulta como parameters separados:

 data: { id: value_town_id, type: value_type, date: value_date } 

Luego puede acceder a ellos en PHP con $_POST['id'] , $_POST['type'] , y $_POST['date'] .

El problema es con tu javascript.

 array_filter_values.join(', '); query_value = array_filter_values; 

Esto está mal, testing esto:

 query_value =array_filter_values.join(', '); 

array_filter_values.join (',') devuelve la matriz unida a una cadena, no convent la matriz a una cadena unida.

  • Límite de caracteres de una variable de cadena javascript
  • ¿Cómo puedo dividir una dirección de correo electrónico en diferentes partes en php?
  • Consideraciones de performance de JSON vs. XML
  • Cómo codificar una URL como parámetro de CakePHP
  • La variable PHP POST no está definida cuando se usa Chrome + XHR
  • ¿Cómo mostrar el porcentaje de carga y cómo hacerlo sin javascript?
  • Cambiar el URL del button Atrás en el browser
  • ¿Cuál es la mejor manera de manejar cargas de fotos?
  • página de recarga de cambio con el valor de seleccionar
  • Enviar matriz con request de ajax a php
  • Envío / visualización de una image codificada en base64
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.