質問

同じ.phpファイル内のフォームから関数を呼び出そうとしていますが、[送信]ボタンがクリックされたときにテーブルが生成されません。

コードは次のとおりです。

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

同じ.phpファイル内のフォームから関数を呼び出そうとしていますが、[送信]ボタンがクリックされたときにテーブルが生成されません。

コードは次のとおりです。

<*>

これが機能しない理由は何ですか?

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>

これが機能しない理由は何ですか?

役に立ちましたか?

解決

年として整数が必要な場合は、POSTスーパーグローバルから取得します

$year=(int)

年として整数が必要な場合は、POSTスーパーグローバルから取得します

<*>

選択機能にパラメーターを追加して年を取得し、SanHoloが提案した方法を実行します。

ところで、私が提供した例では、変数を整数((int)部分)にキャストしていることに注意してください。あなたが持っているコードは巨大なセキュリティホールです。データのサンタン化、SQLインジェクション、およびおそらくパラメーター化された準備済みステートメントを調べる必要があります(PDOをチェックしてください)。

$ _ POST ['year_txt']を入力すると、誰かがSQLステートメントに何かを直接入力できます。たとえば、「90; delete from movies where 1;&quot;」のようになります。作成されるSQLステートメントをチェックしてください!

ユーザーが提供した入力を ever 印刷しないでください。また、最初に健全性をチェックしてサニタイズするまでは、SQLコマンドに入力しないでください。数値の場合、intにキャストします。文字列を受け取っている場合は、preg_replaceを使用して、奇妙な文字を除外します。特定のPHP filter_var関数も使用できます- http://php.net/manual /en/function.filter-var.php

POST['year_txt'];

選択機能にパラメーターを追加して年を取得し、SanHoloが提案した方法を実行します。

ところで、私が提供した例では、変数を整数((int)部分)にキャストしていることに注意してください。あなたが持っているコードは巨大なセキュリティホールです。データのサンタン化、SQLインジェクション、およびおそらくパラメーター化された準備済みステートメントを調べる必要があります(PDOをチェックしてください)。

$ _ POST ['year_txt']を入力すると、誰かがSQLステートメントに何かを直接入力できます。たとえば、「90; delete from movies where 1;&quot;」のようになります。作成されるSQLステートメントをチェックしてください!

ユーザーが提供した入力を ever 印刷しないでください。また、最初に健全性をチェックしてサニタイズするまでは、SQLコマンドに入力しないでください。数値の場合、intにキャストします。文字列を受け取っている場合は、preg_replaceを使用して、奇妙な文字を除外します。特定のPHP filter_var関数も使用できます- http://php.net/manual /en/function.filter-var.php

他のヒント

実際に関数を呼び出す場所はわかりません。定義するだけです。次のようなブロックを実装する必要があります。

if (isset(

実際に関数を呼び出す場所はわかりません。定義するだけです。次のようなブロックを実装する必要があります。

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

実際に関数を呼び出す場所はわかりません。定義するだけです。次のようなブロックを実装する必要があります。

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

さて、ここに書き直したバージョンがあります。もちろん理想的ではありませんが、これは役立つはずです。

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

<?php
$year=(int)

さて、ここに書き直したバージョンがあります。もちろん理想的ではありませんが、これは役立つはずです。

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

さて、ここに書き直したバージョンがあります。もちろん理想的ではありませんが、これは役立つはずです。

<*>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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top