Предотвращение перезаписи загрузки файла и записи MySQL через форму? - PullRequest
1 голос
/ 02 ноября 2011

У меня настроена система отправки, и я бы хотел, чтобы дублирующие записи не могли быть отправлены. Если он отправлен, ОРИГИНАЛЬНАЯ запись и загрузка файла сохраняются (не перезаписываются). Кроме того, если он существует, я бы хотел, чтобы форма отображала ошибку для пользователя. Вот мой upload.php (упоминаемый в форме HTML).

upload.php

<?php

//This is the directory where images will be saved
$extension = explode(".", $_FILES['upload']['name']);
$extension = $extension[count($extension)-1];
$target = "uploads/";
$target = $target . $_POST['snumber'] . "." . $extension;

//This gets all the other information from the form and prevents SQL injection
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$upload=($_FILES['upload']['name']);
$snumber=$_POST['snumber'];
$grade=$_POST['grade'];
$email=$_POST['email'];

// Connects to your Database
mysql_connect("localhost", "db_user", "password") or die(mysql_error()) ;
mysql_select_db("db_name") or die(mysql_error()) ;

//Writes the information to the database
mysql_query("INSERT INTO `Table` VALUES ('$fname', '$lname', '$snumber', '$grade', '$email', '$target')") ;

//Writes the upload to the server
if(move_uploaded_file($_FILES['upload']['tmp_name'], $target))
{
//Tells you if its all ok
echo "Your submission ". basename( $_FILES['uploadedfile']['name']). " was successful and we have received your submission. Your result will be sent to $email ";
}
else {

//Gives and error if its not
echo "Sorry, there was a problem uploading your file.";
}
?>

Как бы я поступил так?

РЕДАКТИРОВАТЬ: Объединенные предложения снизу, вот обновленный код, однако теперь я получаю Parse error: syntax error, unexpected T_ECHO in /path/to/upload.php on line 32

Новый файл upload.php

<?php

//This is the directory where images will be saved
$extension = explode(".", $_FILES['upload']['name']);
$extension = $extension[count($extension)-1];
$target = "uploads/";
$target = $target . $_POST['snumber'] . "." . $extension;

//This gets all the other information from the form and prevents SQL injection
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$upload=($_FILES['upload']['name']);
$snumber=$_POST['snumber'];
$grade=$_POST['grade'];
$email=$_POST['email'];

//Checks if submission already exists
if(file_exists($target))
{
    echo "This submission already exists. Please check that you have entered all values correctly. If this is an error please contact support";
}
else
{
    //Now that file doesn't exist, move it. 
    move_uploaded_file($_FILES['upload']['tmp_name'], $target);
    //MYSQL CONNECTION
        mysql_connect("localhost", "db_user", "password") or die(mysql_error()) ;
        mysql_select_db("db_name") or die(mysql_error()) ;
    //MYSQL Entry
        mysql_query("INSERT INTO Table (fname, lname, snumber, grade, email, target) VALUES ('".mysql_real_escape_string($fname)."', '".mysql_real_escape_string($lname)."', '".mysql_real_escape_string($snumber)."', '".mysql_real_escape_string($grade)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($target)."')")

    echo "Your submission was successful and we have received your portfolio. Your marks will be sent out to $email.";
}
?>

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Похоже, вы сохраняете цель в своей базе данных, поэтому вы можете либо проверить базу данных, чтобы узнать, существует ли этот файл, либо использовать функцию php file_exists ().

БД, вы, очевидно, выполняете запрос перед этим оператором вставки и делаете свои условия на основе результатов.

В противном случае,

if(file_exists($target))
{
    echo 'error';
}
else
{
   move_uploaded_file($_FILES['upload']['tmp_name'], $target);
   // do success things here
}

файл существует, может потребоваться полный путь. Если это не сработает сразу, посмотрите, помогает ли предварительное добавление $ _SERVER ['DOCUMENT_ROOT'].

0 голосов
/ 08 февраля 2012

Я решил эту проблему, применив ajax-запрос перед отправкой формы и файла

var param = "action=testfile&dirpath=" + dirpath + "&file=" + filename;

    $.ajax({
       type: "GET",
       url: 'combi/testfile.php',
       data: param,
       success: function(data) {
            test data .... if OK submit.
       }

В testfile.php вы проверяете файл и выводите данные

if($_GET['action'] == 'testfile'){
    $msg = '';
    $basedirpath = $_GET['dirpath'] . "/";

    if(file_exists($basedirpath . $_GET['file'])) {
        $msg = 'exists';
    }
    echo $msg;
}

$ msg возвращается в данных в вызове ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...