Question

J'essaie d'appeler une fonction à partir d'un formulaire dans le même fichier .php, mais lorsque le bouton Envoyer est activé, la table n'est pas générée.

Voici le code:

<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 = '

J'essaie d'appeler une fonction à partir d'un formulaire dans le même fichier .php, mais lorsque le bouton Envoyer est activé, la table n'est pas générée.

Voici le code:

<*>

Avez-vous une idée du pourquoi cela ne fonctionne pas?

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>

Avez-vous une idée du pourquoi cela ne fonctionne pas?

Était-ce utile?

La solution

Si vous attendez un entier sous forme d'année, obtenez-le auprès du superglobal POST sous la forme

.
$year=(int)

Si vous attendez un entier sous forme d'année, obtenez-le auprès du superglobal POST sous la forme

. <*>

Et ajoutez un paramètre à votre fonction sélectionnée pour prendre l’année, puis exécutez la procédure proposée par SanHolo.

BTW, note j'ai converti la variable en un entier (la partie (int)) dans l'exemple que j'ai fourni. Le code tel que vous l'avez est un énorme trou de sécurité. Vous devez rechercher la santisation des données, l’injection SQL et éventuellement les instructions préparées paramétrées (consultez PDO).

Où vous avez mis $ _POST ["year_txt"], quelqu'un pourrait mettre TOUT directement dans votre instruction SQL ... Comme, "90; supprimer des films où 1;". Découvrez la déclaration SQL qui créerait!

Ne jamais imprimer des entrées fournies par l'utilisateur et CERTAINEMENT ne pas les insérer dans une commande SQL sans d'abord vérifier son intégrité et la désinfecter. Si c'est un nombre, choisissez int. Si vous recevez une chaîne, utilisez preg_replace pour filtrer tous les caractères impairs. Vous pouvez également utiliser certaines fonctions PHP filter_var - http://php.net/manual /en/function.filter-var.php

POST['year_txt'];

Et ajoutez un paramètre à votre fonction sélectionnée pour prendre l’année, puis exécutez la procédure proposée par SanHolo.

BTW, note j'ai converti la variable en un entier (la partie (int)) dans l'exemple que j'ai fourni. Le code tel que vous l'avez est un énorme trou de sécurité. Vous devez rechercher la santisation des données, l’injection SQL et éventuellement les instructions préparées paramétrées (consultez PDO).

Où vous avez mis $ _POST ["year_txt"], quelqu'un pourrait mettre TOUT directement dans votre instruction SQL ... Comme, "90; supprimer des films où 1;". Découvrez la déclaration SQL qui créerait!

Ne jamais imprimer des entrées fournies par l'utilisateur et CERTAINEMENT ne pas les insérer dans une commande SQL sans d'abord vérifier son intégrité et la désinfecter. Si c'est un nombre, choisissez int. Si vous recevez une chaîne, utilisez preg_replace pour filtrer tous les caractères impairs. Vous pouvez également utiliser certaines fonctions PHP filter_var - http://php.net/manual /en/function.filter-var.php

Autres conseils

Je ne vois pas où vous appelez réellement la fonction, vous la définissez seulement. Vous devez implémenter un bloc qui ressemble à ceci:

if (isset(

Je ne vois pas où vous appelez réellement la fonction, vous la définissez seulement. Vous devez implémenter un bloc qui ressemble à ceci:

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

Je ne vois pas où vous appelez réellement la fonction, vous la définissez seulement. Vous devez implémenter un bloc qui ressemble à ceci:

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

D'accord, voici une version réécrite. Bien sûr, ce n’est pas encore idéal, mais cela devrait aider.

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

<?php
$year=(int)

D'accord, voici une version réécrite. Bien sûr, ce n’est pas encore idéal, mais cela devrait aider.

<*>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'==

D'accord, voici une version réécrite. Bien sûr, ce n’est pas encore idéal, mais cela devrait aider.

<*>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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top