2013-07-31 4 views
0

Habituellement, je simplifierais mon code pour cela, ou seulement montrer la partie qui me pose des problèmes. Mais dans ce cas, je n'ai aucune idée de ce qui ne va pas, donc j'ai collé le tout. Désolé. Ok, donc le script ci-dessous obtient des valeurs envoyées par ajax et les télécharge dans une base de données SQL. Après cela, il déplace une image d'un dossier dans un autre dossier.php move_uploaded_file ne fonctionne pas

Le script entier fonctionne correctement, fait ce qu'il est supposé faire, à l'exception du bit 'move_uploaded_file'. Donc, il fait correctement la partie sql, et tous les noms de session, modifications de chaînes, etc ... sont corrects.

J'ai renvoyé les noms des fichiers que le script produit et ils sont corrects. Les dossiers peuvent être lus + écrits aussi. Et le fichier en attente d'être déplacé est présent dans le dossier.

Qu'est-ce qui me manque? Pourquoi move_uploaded_file ne fonctionne pas? Merci d'avance à tous.

--changed move_uploaded_file() pour renommer(), toujours pas working--

<?php 

session_start(); 
unset($_SESSION['reference']); 

$name = $_GET['name']; 
$category = $_GET['category']; 
$subCategory = $_GET['subCategory']; 
$date = $_GET['date']; 
$address = $_GET['address']; 
$city = $_GET['city']; 
$state = $_GET['state']; 
$host = $_GET['host']; 
$info = $_GET['info']; 
$adder = $_SESSION['user']; 

//turn into array 
$array = array(); 
$array[0]=$name; 
$array[1]=$category; 
$array[2]=$subCategory; 
$array[3]=$date; 
$array[4]=$address; 
$array[5]=$city; 
$array[6]=$state; 
$array[7]=$host; 
$array[9]=$info; 
$array[11]=$adder; 


try { 

$con = new PDO('mysql:host=localhost;dbname=test'); 
    //$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $refid=$con->prepare(" SELECT MAX(id) FROM createX "); 
    $refid->execute(); 
    $id = $refid->fetchColumn(); 
    $id=$id+1; 
    $newDate = str_replace('-', '', $date); 
    $reference = $id.$newDate; 
    $array[10]=$reference; 
    $array[8] = $_SESSION['imagePath'].$reference.'.'.$_SESSION['imageExt']; 

    $insert = $con->prepare(" INSERT INTO createX 
    (name,category,subCategory,date,address,city,state,host,imagePath,info,ref,adder) 
     VALUES (?,?,?,?,?,?,?,?,?,?,?,?) "); 
    $insert->execute($array); 

    rename('../tempUploads/'.$_SESSION['imagePath'].$_SESSION['imageExt'] , 
    '../uploads/'.$_SESSION['imagePath'].$reference.'.'.$_SESSION['imageExt']); 

} 

catch(PDOException $e) { //try 
    echo 'error'; 
//echo 'ERROR: ' . $e->getMessage(); 
} 

$_SESSION['reference'] = $reference; 

unset($array); 
session_write_close(); 


?> 
+0

Le nom de fichier source doit provenir de '$ _FILES ['xxx'] ['tmp_name']'. – Barmar

+0

le fichier est posté? – mehdi

+0

hey, alors le fichier a été envoyé par la poste au fichier temporaire du serveur. Je l'ai ensuite déplacé une fois vers mon propre dossier temporaire (pas le dossier temporaire du serveur), donc je peux le voir. et maintenant je veux passer du dossier mytemp à un autre dossier, mon dossier de téléchargement de permant. – seamus

Répondre

4

move_uploaded_file() est uniquement pour les fichiers qui ont été téléchargés via POST. Le nom de fichier source doit provenir de $_FILES['xxx']['tmp_name'] et est interprété par rapport au répertoire utilisé pour contenir temporairement les fichiers publiés.

Si vous souhaitez déplacer un autre fichier, utilisez rename(). Move_uploaded_files est seulement pour les fichiers qui ont été téléchargés via POST.

+0

k, je suis le tester maintenant pour voir si cela fonctionne. Je ne le savais pas. Supposons que move_uploaded_files soit utilisé pour déplacer tous les fichiers. Merci. – seamus

+0

Toujours vérifier le manuel: "Cette fonction vérifie que le fichier désigné par filename est un fichier de téléchargement valide (ce qui signifie qu'il a été téléchargé via le mécanisme de téléchargement HTTP POST de PHP)." –

+0

k ne fonctionne toujours pas, l'a changé pour renommer (...) – seamus

Questions connexes