2010-01-20 3 views
1

Désolé je suis un débutant, je pense qu'il y a quelque chose de mal dans ce code, ou quelque chose qui peut être amélioré. Ce code a été conçu pour télécharger des fichiers à partir d'un plugin Flash Uploader javascript. Il ne me donne pas une erreur mais parfois il n'insère pas la requête mysql. P.s: toutes les variables affichées sont nettoyées via javascript (texte alphanumérique) Merci.Stupide php Question. Quel est le problème dans ce code?

<?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, vous ne pouvez jamais faire confiance à l'entrée de l'ordinateur du client. Toujours désinfecter sur le serveur. –

+0

lequel des 2 n'est pas exécuté? – Natrium

+1

Si vous devez vous assurer que plusieurs requêtes sont exécutées complètement ou pas du tout, vous devez utiliser des transactions, indépendamment des autres problèmes du code. –

Répondre

0

Si l'enregistrement n'est pas inséré, cela signifie qu'il y a probablement une erreur. Vous n'avez peut-être pas défini le rapport d'erreur approprié, c'est pourquoi vous ne voyez aucune erreur. Placez deux lignes au-dessus de votre script afin que toutes les erreurs soient affichées.

ini_set('display_errors', true); 
error_reporting(E_ALL); 
2
$sqli = mysql_query("INSERT INTO `activity` (`from`, `what`, `text`) 
         VALUES ('".$i."', upload', '".$titlepost."');") 

il y a une ' manquant avant upload

essayer cette place (également ajouté mysql_real_escape_string pour la sécurité):

$sqli = mysql_query("INSERT INTO `activity` (`from`, `what`, `text`) 
         VALUES ('".mysql_real_escape_string($i)."', 'upload', '".mysql_real_escape_string($titlepost)."');") 
+0

En regardant l'historique d'édition de la question, le 'manquant' a été introduit par tharkun. Nicolo n'a pas eu ce problème donc ma réponse ne l'aidera pas, désolé. – Karsten

+0

l'a réparé là. – Karsten

+0

Si vous doublez des chaînes de caractères dans des requêtes MySQL, je préfère écrire les variables sans éclater. Par exemple, comparez: '$ sql =" INSERT INTO table (field) VALEURS ('$ data') ";' (retour en arrière des noms de table et de champ omis en raison du rendu de vue de code Stack Overflow). Le rend beaucoup plus propre et maintient la syntaxe codage couleur cohérente dans les IDE. –

1

Ce qui a vraiment mal est: votre code est totalement sécurisé. Vous désinfectez les données POST uniquement à l'aide de javascript et placez-le dans votre requête SQL? Tout le monde peut FACILEMENT injecter du code SQL personnalisé et de très mauvaises choses à votre base de données. Ne comptez jamais sur des données HTTP (que ce soit GET, POST ou autre) pour être sécurisé. Je sais que vous êtes novice en PHP, je vous encourage honnêtement, pour votre client, votre projet ou toute personne utilisant votre code, avant de faire quoi que ce soit d'autre, d'assainir votre POST-Data avec PHP avant de l'utiliser. SQL-Querys. S'il vous plaît.

Il ya même un article sur Wikipédia à ce sujet, et c'est une énorme erreur que font les néophytes avec d'énormes conséquences, ce qui est assez facile à éviter.

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

http://www.smashingmagazine.com/2009/03/24/10-useful-php-tips-revisited/ (Astuce 1)