2010-01-20 2 views
1

Извините, что я новичок, я думаю, что в этом коде есть что-то не так, или что-то, что можно улучшить. Этот код предназначен для загрузки файлов с плагина флеш-загрузчика javascript. Это не дает мне ошибку, но иногда она не вставляет запрос mysql. P.s: каждая опубликованная переменная очищается с помощью javascript (только буквенно-цифровой текст) Спасибо.Глупый php Вопрос. Что не так в этом коде?

<?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"; 
?> 
+2

@Nicolo, вы никогда не можете доверять вход с компьютера клиента. Всегда санируйте на сервере. –

+0

, который один из 2 не выполняется? – Natrium

+1

Если вам нужно убедиться, что выполнение нескольких запросов выполняется полностью или вообще не выполняется, вы должны использовать транзакции, независимо от каких-либо других проблем в коде. –

ответ

0

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

ini_set('display_errors', true); 
error_reporting(E_ALL); 
2
$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)."');") 
+0

Глядя на историю изменений вопроса, пропавших без вести »был введен Таркун. У Николо не было этой проблемы, поэтому мой ответ ему не поможет, извините. – Karsten

+0

исправил его. – Karsten

+0

Если вы используете строки с двойными кавычками в MySQL-запросах, я предпочитаю просто писать переменные без разрыва. Например, сравните: '$ sql =" INSERT INTO table (field) VALUES ('$ data') ";' (обратные тики из имен таблиц и полей пропущены из-за нарушения представления кода кода Stack Overflow). Делает его намного более чистым и сохраняет синтаксический цветовой код, совместимый с IDE. –

1

Что на самом деле неправильно это: ваш код совершенно небезопасно. Вы санируете POST-данные только с помощью javascript и помещаете его в свой SQL-запрос? Кто-нибудь может EASILY введет в 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)

Смежные вопросы