Pregunta

Estoy intentando llamar a una función desde un formulario dentro del mismo archivo .php, pero cuando se presiona el botón Enviar, la tabla no se genera.

Aquí está el código:

<p>
<?php
function selectQuery()
{
    $con = mysql_connect("localhost","readonly","");
    if (!$con)
    {
      die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("mediadb", $con);
    $result = mysql_query("SELECT title, director FROM movies WHERE year = '

Estoy intentando llamar a una función desde un formulario dentro del mismo archivo .php, pero cuando se presiona el botón Enviar, la tabla no se genera.

Aquí está el código:

<*>

¿Alguna idea de por qué esto no funciona?

POST[year_txt]'"); echo "<table border='1' background='lightgray'> <tr> <th>Title</th> <th>Director</th> </tr>"; while($row = mysql_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['title'] . "</td>"; echo "<td>" . $row['director'] . "</td>"; echo "</tr>"; } echo "</table>"; mysql_close($con); } ?> </p> <p> <!-- start of entry form --> <form action="index.php?action=selectQuery" method="post"> Year: <input type="text" name="year_txt" /> <input type="submit"/> </form> <!-- end of entry form --> </p>

¿Alguna idea de por qué esto no funciona?

¿Fue útil?

Solución

Si está esperando un número entero como un año, consígalo en el superglobal POST como

$year=(int)

Si está esperando un número entero como un año, consígalo en el superglobal POST como

<*>

Y agregue un parámetro a su función de selección para tomar el año, luego ejecute lo que sugiere SanHolo.

Por cierto, tenga en cuenta que emito la variable a un entero (la parte (int)) en el ejemplo que proporcioné. El código que tienes es un enorme agujero de seguridad. Debe buscar información sobre santificación de datos, inyección de SQL y, posiblemente, declaraciones preparadas parametrizadas (consulte DOP).

Cuando colocas $ _POST ['year_txt'], alguien podría poner CUALQUIER COSA directamente en tu declaración SQL ... Me gusta, " 90; eliminar de las películas donde 1; " ;. Echa un vistazo a la declaración SQL que crearía!

No alguna vez imprima las entradas proporcionadas por el usuario y, CIERTAMENTE, no las coloque en un comando SQL sin antes verificar si está en buenas condiciones y desinfectarlas. Si es un número, lance a int. Si está recibiendo una cadena, use preg_replace para filtrar los caracteres impares. También puede usar ciertas funciones de PHP filter_var: http://php.net/manual /en/function.filter-var.php

POST['year_txt'];

Y agregue un parámetro a su función de selección para tomar el año, luego ejecute lo que sugiere SanHolo.

Por cierto, tenga en cuenta que emito la variable a un entero (la parte (int)) en el ejemplo que proporcioné. El código que tienes es un enorme agujero de seguridad. Debe buscar información sobre santificación de datos, inyección de SQL y, posiblemente, declaraciones preparadas parametrizadas (consulte DOP).

Cuando colocas $ _POST ['year_txt'], alguien podría poner CUALQUIER COSA directamente en tu declaración SQL ... Me gusta, " 90; eliminar de las películas donde 1; " ;. Echa un vistazo a la declaración SQL que crearía!

No alguna vez imprima las entradas proporcionadas por el usuario y, CIERTAMENTE, no las coloque en un comando SQL sin antes verificar si está en buenas condiciones y desinfectarlas. Si es un número, lance a int. Si está recibiendo una cadena, use preg_replace para filtrar los caracteres impares. También puede usar ciertas funciones de PHP filter_var: http://php.net/manual /en/function.filter-var.php

Otros consejos

No veo donde realmente LLAMAS la función, solo la defines. Necesita implementar un bloque que lea algo como esto:

if (isset(

No veo donde realmente LLAMAS la función, solo la defines. Necesita implementar un bloque que lea algo como esto:

<*>GET['action'])) { if ('selectQuery' ==

No veo donde realmente LLAMAS la función, solo la defines. Necesita implementar un bloque que lea algo como esto:

<*>GET['action']) { selectQuery(); } }

Bueno, aquí hay una versión reescrita. Por supuesto, todavía no es lo ideal, pero esto debería ayudar.

<html>
<head><title>Movies, yo</title></head>
<body>

<?php
$year=(int)

Bueno, aquí hay una versión reescrita. Por supuesto, todavía no es lo ideal, pero esto debería ayudar.

<*>POST['year_txt']; function selectQuery($year) { $con = mysql_connect("localhost","readonly",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("mediadb", $con); $result = mysql_query("SELECT title, director FROM movies WHERE year = $year"); $movie_results=array(); while($row = mysql_fetch_array($result)) { $movie_results[]=$row; } mysql_close($con); return $movie_results; } function print_movies($movie_array) { ?> <table border='1' background='lightgray'> <tr> <th>Title</th> <th>Director</th> </tr> <?php foreach($movie_array as $a_movie) { ?> <tr> <td><?php echo $a_movie['title'];?></td> <td><?php echo $a_movie['director'];?></td> </tr> <?php }//end foreach movie_array?> </table> <?php }?> <p> <!-- start of entry form --> <form action="index.php" method="post"> Year: <input type="text" name="year_txt" value='<?php echo $year;?>'/> <input type='hidden' value='selectQuery' name='action'/> <input type="submit"/> </form> <!-- end of entry form --> </p> <?php if ('selectQuery'==

Bueno, aquí hay una versión reescrita. Por supuesto, todavía no es lo ideal, pero esto debería ayudar.

<*>POST['action']) { if ($year>0) $movie_results=selectQuery($year); if(!empty($movie_results)) { print_movies($movie_results); } else { echo "No movie was found for $year<br>"; } }//end if 'year is valid' else { echo "Please enter a valid year<br>"; } }//end if 'action was selectQuery' ?> </body> </html>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top