2013-10-03 2 views
1

Я использую следующий код для того, чтобы изменить базу данных с помощью PHP:Как узнать, вызвана ли страница методом POST в 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 

Я думаю, это потому, что пока страница загружается без обратной передачи, даже тогда выполняется код. Как проверить, что страница загружена с помощью кнопки «Отправить»? Кто-нибудь может мне помочь?

+0

'если ($ _ FILE):' // ваш код здесь 'ENDIF;' – samayo

+0

Не используйте 'addslashes() 'и не использовать' mysql_query() '; использовать подготовленные заявления. –

ответ

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 ?> 
+0

спасибо, что он работает. У меня есть еще одно сомнение. Мне нужно вставить те же данные в две разные таблицы, возможно ли, если да, как это сделать. – user2739848

+0

Просто измените SQL соответственно. – Pupil

+0

Да, я проголосовал за ваш ответ, но мне нужна еще одна помощь. – user2739848

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> 
+0

Мне нужно вставить те же данные в две разные таблицы, как это сделать? – user2739848

+0

это работающий. но одна помощь, пожалуйста, как использовать этот код в codeigniter – user2739848

0

Как Солнечный Гупта говорит,

  1. проверить метод: если форма была отправлена ​​(кнопка отправки нажата), затем $ _POST установлен. Вы хотите обработать $ _FILES только это дело

  2. Sidenote 1: использование некотируемые индексов для массивов триггеров предупреждений и журналов. Это, в лучшем случае, бесполезно. Рассмотрим использование цитат вместо несуществующего PHP константы:

    если (! Пусто ($ _ GET [ 'успех']))

  3. Sidenote 2: ваш делать/в то время как всегда будет регистрировать ошибку на первый цикл. Предпочитают чистый код и инициализировать $ данныедо используя, не после. Кроме того, не проверяйте только $ data [0], если вы хотите прочитать 3 записи.

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

  4. sidenote 4: последнее, но не менее важное: mysql_xxx функции устарели. Вместо этого используйте вместо этого функции mysqli_xxx. И предпочитают mysqli_real_rescape_string - addslashes(), это безопаснее.

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

}

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> 
Смежные вопросы