1

PHP を使用してデータベースを変更するために、次のコードを使用しています。

<?php 

//connect to the database
$connect = mysql_connect("localhost","root","");
mysql_select_db("loginform",$connect); //select the table
//

if ($_FILES['csv']['size'] > 0) {

    //get the csv file
    $file = $_FILES['csv']['tmp_name'];
    $handle = fopen($file,"r");

    //loop through the csv file and insert into database
    do {
        if ($data[0]) {
            mysql_query("INSERT INTO mytable( name,country,age) VALUES
                (
                    '".addslashes($data[0])."',
                    '".addslashes($data[1])."',
                    '".addslashes($data[2])."'
                )
            ");
        }
    } while ($data = fgetcsv($handle,1000,",","'"));
    //

    //redirect
    header('Location: sample.php?success=1'); die;

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Import a CSV File with PHP & MySQL</title>
</head>

<body>

<?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?>

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
  Choose your file: <br />
  <input name="csv" type="file" id="csv" />
  <input type="submit" name="Submit" value="Submit" />
</form>

</body>
</html>

データを MySQL テーブルに挿入することはできますが、問題はエラーが発生することです。

Notice: Undefined index: csv in C:\xampp\htdocs\deepthi\excel\sample.php on line 8

Notice: Use of undefined constant success - assumed 'success' in C:\xampp\htdocs\deepthi\excel\sample.php on line 44 

ページがポストバックなしで読み込まれている間でも、コードが実行されているためだと思います。[送信] ボタンをクリックしてページが読み込まれたことを確認する方法は? 誰かが私を助けることができますか?

4

5 に答える 5

2
 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
echo "Page is called via a POST method";

}

于 2013-10-03T09:13:26.923 に答える
1

ifステートメントの直前に次のコードを使用します

if($_SERVER['REQUEST_METHOD'] == 'POST')

上記のコードは、ページ リクエストが送信ボタンからのものであることを示しています。(POSTタイプ)

例えば:

    <?php 

    //connect to the database
    $connect = mysql_connect("localhost","root","");
    mysql_select_db("loginform",$connect); //select the table
    //
    if($_SERVER['REQUEST_METHOD'] == 'POST')
     if ($_FILES['csv']['size'] > 0) {

        //get the csv file
        $file = $_FILES['csv']['tmp_name'];
        $handle = fopen($file,"r");

        //loop through the csv file and insert into database
        do {
            if ($data[0]) {
                mysql_query("INSERT INTO mytable( name,country,age) VALUES
                    (
                        '".addslashes($data[0])."',
                        '".addslashes($data[1])."',
                        '".addslashes($data[2])."'
                    )
                ");
            }
        } while ($data = fgetcsv($handle,1000,",","'"));
        //

        //redirect
        header('Location: sample.php?success=1'); die;

     }

    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Import a CSV File with PHP & MySQL</title>
    </head>

    <body>

    <?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?>

    <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
      Choose your file: <br />
      <input name="csv" type="file" id="csv" />
      <input type="submit" name="Submit" value="Submit" />
    </form>

    </body>
    </html>
于 2013-10-03T08:45:29.837 に答える
0

サニー・グプタが言うように、

  1. メソッドを確認してください: フォームが送信された場合 (送信ボタンがクリックされた場合)、$_POSTが設定されます。$_FILESのみを処理したい場合

  2. 補足 1 : 配列に引用符で囲まれていないインデックスを使用すると、警告とログがトリガーされます。それは、最良の場合、役に立たない。存在しない PHP 定数の代わりに引用符を使用することを検討してください。

    if (!empty($_GET['success']))

  3. 補足 2 : do/whileは常に最初のループでエラーをログに記録します。クリーンなコードを優先し、使用後ではなく使用前に$data を初期化します。また、 3 つのエントリを読み取りたい場合は、$data[0]だけをチェックしないでください。

    while ($data = fgetcsv($handle,1000,",","'")) { if (count($data) > 2) { [...] } ;

  4. 補足 4 : 最後になりましたが、mysql_xxx関数は非推奨です。代わりにmysqli_xxx関数の使用を検討してください。そして、mysqli_real_rescape_stringaddslashes()よりも優先します。より安全です。

于 2013-10-03T09:01:43.783 に答える
0

変数に値がなく、アクセスしています。更新してください

if ($_FILES['csv']['size'] > 0) {

に、

if (isset($_FILES['csv']['size'])) {
if ($_FILES['csv']['size'] > 0) {

また、閉じ括弧を追加します}

あなたの成功は配列のキーであり、コンマ ( ') で囲む必要があります。 また、次のように変更します。

<?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?>

<?php if (isset($_GET['success']) && !empty($_GET['success'])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?>
于 2013-10-03T08:46:10.600 に答える
0

POST ステートメントのチェック

if((isset($_POST['Submit']) && trim($_POST['Submit']) == "Submit") && ($_SERVER['REQUEST_METHOD'] == 'POST'))


<?php 

        //connect to the database
        $connect = mysql_connect("localhost","root","");
        mysql_select_db("loginform",$connect); //select the table
        //
        if((isset($_POST['Submit']) && trim($_POST['Submit']) == "Submit") && ($_SERVER['REQUEST_METHOD'] == 'POST'))
        {
             if ($_FILES['csv']['size'] > 0)
             {

                //get the csv file
                $file = $_FILES['csv']['tmp_name'];
                $handle = fopen($file,"r");

                //loop through the csv file and insert into database
                do {
                    if ($data[0]) {
                        mysql_query("INSERT INTO mytable( name,country,age) VALUES
                            (
                                '".addslashes($data[0])."',
                                '".addslashes($data[1])."',
                                '".addslashes($data[2])."'
                            )
                        ");
                    }
                } while ($data = fgetcsv($handle,1000,",","'"));
                //

                //redirect
                header('Location: sample.php?success=1'); die;

             }
        }

        ?>

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Import a CSV File with PHP & MySQL</title>
        </head>

        <body>

        <?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?>

        <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
          Choose your file: <br />
          <input name="csv" type="file" id="csv" />
          <input type="submit" name="Submit" value="Submit" />
        </form>

        </body>
        </html>
于 2013-10-03T09:27:09.730 に答える