2011-05-31 4 views
1

J'ai utilisé ce code dans un autre site que j'ai créé et il fonctionne très bien, donc je ne comprends vraiment pas pourquoi cela ne fonctionne pas correctement. Les seules choses que j'ai changé sont les répertoires pour le fichier à déplacer, mais les fichiers ne sont jamais téléchargés. J'ai triplé tout et tout semble bien. Le code s'exécute toutes sans erreurs et toutes les informations sont correctement saisies dans la base de données, le seul problème est le téléchargement du fichier. Je deviens fou en essayant de faire fonctionner ça! aidez s'il vous plaît!PHP Le formulaire de téléchargement de fichier ne fonctionne pas

formulaire HTML:

<p> 
<h2>Add News</h2><br /> 
REQUIRED *<br /><br /> 
<form enctype="multipart/form-data" action='addnews2.php' method='post' onsubmit="chose.value = uploadForm()" name="newsform"> 
<p>Headline: * 
<br> 
<input name="title" type="text" size="75"> 
<br /> 
<br/> 

    News: *<br> 
<textarea name="text" cols="75" rows="10" width="200"></textarea><br /><br /> 
Image File: 
<br> 
<input type="file" name="filetoupload" id="filetoupload"><br/><br /> 

    <input type="submit" name="choose" value="Submit" /> 
</p> 
</form> 
</p> 

Traitement Page:

$date=date("l F d, Y"); 

$title=stripslashes($_POST['title']); 
$text=stripslashes($_POST['text']); 

if (($_FILES["filetoupload"]["type"] == "image/gif") 
|| ($_FILES["filetoupload"]["type"] == "image/jpeg") 
|| ($_FILES["filetoupload"]["type"] == "image/pjpeg") 
|| ($_FILES["filetoupload"]["type"] == "image/png") 
|| ($_FILES["filetoupload"]["type"] == "image/jpg")) 
    { 
    if ($_FILES["filetoupload"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["filetoupload"]["error"] . "<br />"; 
    } 
    else 
     { 
      if (file_exists("images/news/" . $_FILES["filetoupload"]["name"])) 
     { 
     echo $_FILES["filetoupload"]["name"] . " already exists. "; 
     } 
     move_uploaded_file($_FILES["filetoupload"]["tmp_name"], 
     "images/news/" . $_FILES["filetoupload"]["name"]); 
     } 
    } 



$image = "images/news/".$_FILES['filetoupload']['name']; 


if($title==""||$text==""){ 
    die("You need to fill in all details"); 
} 


connect_to_db(); 
$query="insert into news (date, title, text, image) values ('".$date."','".mysql_real_escape_string($title)."','".mysql_real_escape_string($text)."','".$image."')"; 
$result=mysql_query($query); 

if(mysql_affected_rows()==1){ 
header("Location:index.php?page=Admin&news=added"); 
} 
else{ 
    die("there was a problem"); 
} 
mysql_close(); 
+2

Avez-vous vérifié les permissions sur le répertoire que vous téléchargez? –

+0

votre code move_uploaded_file est toujours en cours d'exécution vous devez le mettre dans la partie else –

+0

Afin de tracer le problème, vous devez construire un nouveau fichier php temp sans les informations de base de données, puis recueillir et renvoyer des informations sur toutes les variables pour assurer votre les emplacements, les chemins et les données construites sont valides. Activez également le rapport d'erreurs (http://php.net/manual/en/function.error-reporting.php). En outre, comme indiqué, l'emplacement cible pour la copie finale peut ne pas avoir les autorisations de fichiers appropriées (accès en écriture). – horatio

Répondre

1

On dirait que vous manquez une déclaration else éventuellement, la mise en forme de code est désactivé et provoque la confusion:

if (file_exists("images/news/" . $_FILES["filetoupload"]["name"])) 
    { 
     echo $_FILES["filetoupload"]["name"] . " already exists. "; 
    }else { 
     move_uploaded_file($_FILES["filetoupload"]["tmp_name"], 
    "images/news/" . $_FILES["filetoupload"]["name"]); 
    } 

Donnez un coup de feu. Si ce n'est pas le cas, vérifiez vos autorisations, etc. Et assurez-vous que le fichier n'est pas téléchargé, mais pas à l'endroit où vous l'attendiez. Juste un peu d'information, je ferais les vérifications $title et $text avant de faire la vérification d'image. Comme vous ne voulez probablement pas télécharger l'image sur le site si les deux sont null. Vous devez également échapper le nom de fichier dans le chemin de l'image avant d'insérer:

$image = "images/news/".mysql_real_escape_string($_FILES['filetoupload']['name']); 

Comme cela pourrait aussi être sujettes à injection.

+0

Merci pour la réponse rapide. Malheureusement, cela n'a pas résolu le problème:/ – nutman

+0

Je viens de réaliser quel était le problème. Je n'avais pas donné les permissions d'écriture du dossier. Im un tel eeeejot! Mais votre réponse a déclenché la pensée tellement appréciée :) – nutman

Questions connexes