код иногда не вставляет запрос MySQL - PullRequest
1 голос
/ 20 января 2010

Этот код был разработан для загрузки файлов из плагина флэш-загрузчика javascript. Это не дает мне ошибки, но иногда не вставляет запрос mysql. Ps: каждая опубликованная переменная очищается с помощью JavaScript (просто буквенно-цифровой текст)

<?php
include 'a/inc/db.php';

if (!empty($_FILES)) 
{
    $tempFile = $_FILES['Filedata']['tmp_name'];

    if (substr($_FILES['Filedata']['name'],-3)!='mp3')
    {
        echo 'ERROR: your file was not an mp3';
        die();
    }

    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_POST['folder'] . '/';
    $titlepost = $_POST['title']; 
    $tagspost = $_POST['tag'];    
    $artist= $_POST['artist'];
    $i= $_POST['i'];
    $targetFile = str_replace('//','/',$targetPath) .time().".mp3";
    $targetFilea = $targetFile; 
    $targetFilea = substr($targetFilea , strrpos($targetFilea , 'music') -1);
    move_uploaded_file($tempFile,$targetFile);
    mysql_query('set names utf8');
    $sql = mysql_query("INSERT INTO `Music` (`filename`, `title`, `tags`, `rating`, `click`, `rand`, `album`, `i`, `artist`) 
                        VALUES ('".$targetFilea."', '".$titlepost."', '".$tagspost."', '0', '1', '".$ras."', '1', '".$i."', '".$artist."');") 
    or die(mysql_error());   
    $sqli = mysql_query("INSERT INTO `activity` (`from`, `what`, `text`) 
                         VALUES ('".$i."', 'upload', '".$titlepost."');") 
    or die(mysql_error());
    $click =  mysql_query("SELECT * 
                           FROM `Music` 
                           WHERE `filename`='".$targetFilea."' ;");  

    while($row = mysql_fetch_array( $click ))
    {
        $mid=$row['id'];
        echo "<id>".$row['id']."</id>";
    }
    mysql_close($connection);
}
echo "1";
?>

Ответы [ 3 ]

2 голосов
/ 20 января 2010
$sqli = mysql_query("INSERT INTO `activity` (`from`, `what`, `text`) 
                         VALUES ('".$i."', upload', '".$titlepost."');") 

перед upload

отсутствует ', попробуйте вместо этого (также добавлена ​​mysql_real_escape_string для безопасности):

$sqli = mysql_query("INSERT INTO `activity` (`from`, `what`, `text`) 
                         VALUES ('".mysql_real_escape_string($i)."', 'upload', '".mysql_real_escape_string($titlepost)."');") 
1 голос
/ 20 января 2010

Что действительно не так: ваш код совершенно небезопасен . Вы очищаете POST-данные только с помощью JavaScript и помещаете их в свой SQL-запрос? Любой может ЛЕГКО внедрить какой-нибудь пользовательский SQL-код и действительно плохие вещи в вашу базу данных. Никогда не полагайтесь на безопасность каких-либо HTTP-данных (будь то GET, POST или что-либо еще).

Я знаю, что вы новичок в PHP, поэтому я искренне призываю вас, ради вашего клиента, вашего проекта или любого, кто использует ваш код, прежде чем делать что-то еще, продезинфицировать ваши POST-данные с помощью PHP перед использованием его в SQL -Querys. Пожалуйста.

Там даже есть статья в Википедии, и это огромная ошибка, которую делают новички с огромными последствиями, которую довольно легко предотвратить.

http://en.wikipedia.org/wiki/SQL_injection

http://www.smashingmagazine.com/2009/03/24/10-useful-php-tips-revisited/ (Совет 1)

0 голосов
/ 20 января 2010

Если запись не вставляется, это, скорее всего, означает, что произошла какая-то ошибка. Возможно, вы не установили правильное сообщение об ошибке, поэтому не видите ошибок. Поместите ниже две строки в верхней части вашего скрипта, чтобы отображались все ошибки.

ini_set('display_errors', true);
error_reporting(E_ALL);
...