2011-03-18 5 views
0

Donc, fondamentalement, j'ai un site dans lequel certains membres sont autorisés à télécharger des images (pages de bande dessinée) à leurs propres galeries d'images (à une bande dessinée spécifique). J'ai un script de téléchargement d'images réussi que j'ai utilisé pour télécharger des images de profil/avatar pour chaque membre, mais maintenant que je veux télécharger des fichiers à un endroit plus précis, j'ai un peu de mal.Utilisateur téléchargeant des images à des répertoires spécifiques

Voici ce que j'ai jusqu'à présent:

(C'est ce qui apparaît en haut de la page)

<?php 
session_start(); 
$toplinks = ""; 
if (isset($_SESSION['id'])) { 
    // Put stored session variables into local php variable 
    $userid = $_SESSION['id']; 
    $username = $_SESSION['username']; 
    $toplinks = '<a href="member_profile.php?id=' . $userid . '">' . $username . '</a> &bull; 
    <a href="member_account.php">Account</a> &bull; 
    <a href="logout.php">Log Out</a>'; 
} else { 
    $toplinks = '<a href="join_form.php">Register</a> &bull; <a href="login.php">Login</a>'; 
} 
?> 

(Ceci est le script de téléchargement)

<?php 
// Here we run a login check 
if (!isset($_SESSION['id'])) { 
    echo 'Please <a href="login.php">log in</a> to access your account'; 
    exit(); 
} 
// Place Session variable 'id' into local variable 
$id = $_SESSION['id']; 
// Process the form if it is submitted 
if ($_FILES['uploadedfile']['tmp_name'] != "") { 
    // Run error handling on the file 
    // Set Max file size limit to somewhere around 120kb 
    $maxfilesize = 400000; 
    // Check file size, if too large exit and tell them why 
    if($_FILES['uploadedfile']['size'] > $maxfilesize) { 
     echo "<br /><br />Your image was too large. Must be 400kb or less, please<br /><br /> 
     <a href=\"upload_comic.php\">click here</a> to try again"; 
     unlink($_FILES['uploadedfile']['tmp_name']); 
     exit(); 
    // Check file extension to see if it is .jpg or .gif, if not exit and tell them why 
    } else if (!preg_match("/\.(gif|jpg|png)$/i", $_FILES['uploadedfile']['name'])) { 
     echo "<br /><br />Your image was not .gif, .jpg, or .png and it must be one of those three formats.<br /> 
     <a href=\"upload_comic.php\">click here</a> to try again"; 
     unlink($_FILES['uploadedfile']['tmp_name']); 
     exit(); 
     // If no errors on the file process it and upload to server 
    } else { 
     // Rename the pic 
     $newname = ""; //numbers only, so they show up sequentially 
     // Set the direntory for where to upload it, use the member id to hit their folder 
     // Upload the file 
     if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], "comics/$comicid/".$newname)) { 
      echo "Success, the image has been uploaded and will display to visitors!<br /><br /> 
      <a href=\"member_account.php\">Click here</a> to return to your profile edit area"; 
      exit(); 
     } else { 
      echo "There was an error uploading the file, please try again. If it continually fails, contact us by email. <br /><br /> 
      <a href=\"member_account.php\">Click here</a> to return to your profile edit area"; 
      exit(); 
     } 
    } // close else after file error checks 
} // close if post the form 
?> 

Idéalement, Je voudrais être en mesure de télécharger une image comme ceci: comics/comic_id/chapter_id/uploaded_file.extension

Avec l'uploader d'images de profil utilisateur, j'ai pu récupérer le $ ID de la variable $ _Session ['id'], mais avec les bandes dessinées, je ne sais pas vraiment comment saisir cette information et l'utiliser pour définir le répertoire comic_id (chapter_id sera sélectionné sur le formulaire, donc je ne suis pas trop inquiet pour celui-ci).

Des pensées?

+0

Je ne suis pas sûr de ce que vous demandez. Je présume que vous voulez voir combien de fichiers numérotés séquentiellement sont dans leur dossier, donnez-lui l'ID suivant dans l'ordre? Vous devriez également leur donner l'option d'écraser un fichier existant, non? –

+0

Oui. Je ne suis pas trop inquiet à propos de cette partie, je suis plus préoccupé par l'obtention de mes chemins de répertoire dans l'ordre. Ce n'est probablement pas difficile à faire, je ne sais pas comment s'y prendre. – TalesStudio

Répondre

0

Vous pouvez télécharger un fichier où vous le souhaitez. Cela permettra d'enregistrer la bande dessinée dans un dossier de son id et chapitre, mais en conservant le nom de fichier. Si vous vouliez utiliser l'identifiant BD comme nom de fichier, je suis sûr que vous pouvez le faire.

$basepath = "/home/path/to/www/comics/member_" . $member_id . "/"; 

function construct_path($chapter_id,$comic_id) 
{ 
    $saveimagepath = $basepath . $comic_id . $chapter 
} 

if (!isset($_SESSION['id'])) { 
    echo 'Please <a href="login.php">log in</a> to access your account'; 
    exit(); 
} 
// Place Session variable 'id' into local variable 
$id = $_SESSION['id']; 
// Process the form if it is submitted 
if ($_FILES['uploadedfile']['tmp_name'] != "") { 
    // Run error handling on the file 
    // Set Max file size limit to somewhere around 120kb 
    $maxfilesize = 400000; 
    // Check file size, if too large exit and tell them why 
    if($_FILES['uploadedfile']['size'] > $maxfilesize) { 
     echo "<br /><br />Your image was too large. Must be 400kb or less, please<br /><br /> 
     <a href=\"upload_comic.php\">click here</a> to try again"; 
     unlink($_FILES['uploadedfile']['tmp_name']); 
     exit(); 
    // Check file extension to see if it is .jpg or .gif, if not exit and tell them why 
    } else if (!preg_match("/\.(gif|jpg|png)$/i", $_FILES['uploadedfile']['name'])) { 
     echo "<br /><br />Your image was not .gif, .jpg, or .png and it must be one of those three formats.<br /> 
     <a href=\"upload_comic.php\">click here</a> to try again"; 
     unlink($_FILES['uploadedfile']['tmp_name']); 
     exit(); 
     // If no errors on the file process it and upload to server 
    } else { 
     // Rename the pic 
     $newname = $saveimagepath . $_FILES['uploadedfile']['tmp_name']; 
//numbers only, so they show up sequentially 
     // Set the direntory for where to upload it, use the member id to hit their folder 
     // Upload the file 
     if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $newname)) { 
      echo "Success, the image has been uploaded and will display to visitors!<br /><br /> 
      <a href=\"member_account.php\">Click here</a> to return to your profile edit area"; 
      exit(); 
     } else { 
      echo "There was an error uploading the file, please try again. If it continually fails, contact us by email. <br /><br /> 
      <a href=\"member_account.php\">Click here</a> to return to your profile edit area"; 
      exit(); 
     } 
    } // close else after file error checks 
} // close if post the form 
?> 
0

La variable $ _SESSION est disponible sur tous les sites que vous avez démarrés avec session_start(). Donc, si l'ID est défini juste après la connexion, vous pouvez accéder à cette valeur sur n'importe quelle autre page de la même manière avec $ _SESSION ['id']. Assurez-vous que la valeur de id ne va pas tuer votre système de fichiers ou conduit à des problèmes de sécurité!

+0

Je suis désolé si cela semble ignorant (conceptualizing php est difficile pour moi). Si j'appelle $ _Session ['id'] à partir d'une liste de bandes dessinées (identifiées par leur identifiant), est-ce que cela définirait $ _SESSION ['id'] à l'id de bande dessinée? Et si j'ai déjà utilisé $ _SESSION ['id'] pour attraper un identifiant, cela posera-t-il un problème? J'ai ajouté un peu plus de PHP à mon message que j'appelle au début de la page pour vérifier la connexion. Merci! – TalesStudio

Questions connexes