2011-02-17 5 views
1

J'ai un formulaire avec les différents domaines de l'utilisateur doivent se sentir avec la possibilité de fixer le nombre d'images:téléchargement de plusieurs fichiers, album photo, mysql

<?php 
    $num = 0; 
    while($num < $num_uploads) 
    { 
     echo '<div><input name="userfile[]" type="file" /></div>'; 
     $num++; 
    } 
?> 

Après la soumission, il crée une table dans la base de données, appelé « album », qui ressemble à ceci:

function create_album($params) 
{ 
    db_connect(); 

    $query = sprintf("INSERT INTO albums set 
            albums.title = '%s', 
                   albums.email = '%s', 
                   albums.discuss_url = '%s', 
                   albums.theme_id = '%s', 
                   albums.fullname = '%s', 
                   albums.description = '%s', 
                   created_at = NOW()", 
                   mysql_real_escape_string($params['title']), 
                   mysql_real_escape_string($params['email']), 
                   mysql_real_escape_string($params['discuss_url']), 
                   mysql_real_escape_string($params['theme_id']), 
                   mysql_real_escape_string($params['fullname']), 
                   mysql_real_escape_string($params['description']) 
                   ); 

    $result = mysql_query($query); 
    if(!$result) 
    { 
      return false; 
    } 

    $album_id = mysql_insert_id(); 

    return $album_id; 
} 

Je veux les fichiers, mais d'aller à la table « images » et un lien vers l'album correct.

$create_album = create_album($_POST['album']); 

        mysql_query("INSERT INTO images(`name`,`album_id`) VALUES('$newName', '$create_album')"); 

J'ai le problème attache ces multiples images (l'utilisateur peut choisir de soumettre un ou 2 ou 3 fichiers) avec une soumission de formulaire pour un album. À l'heure actuelle, si l'utilisateur soumet 3 fichiers, il crée 3 albums avec chaque soumission de formulaire.

Enfin, ceci est ma structure de base de données:

CREATE TABLE `albums` (
    `id` int(11) NOT NULL auto_increment, 
    `title` varchar(50) NOT NULL, 
    `fullname` varchar(40) NOT NULL, 
    `discuss_url` varchar(150) NOT NULL, 
    `email` varchar(100) NOT NULL, 
    `created_at` datetime NOT NULL, 
    `theme_id` int(11) NOT NULL, 
    `description` int(11) NOT NULL, 
    `vote_cache` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ; 



CREATE TABLE `images` (
    `id` int(11) NOT NULL auto_increment, 
    `album_id` int(11) NOT NULL, 
    `name` varchar(30) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ; 
+0

Voulez-vous dire que le code create_album() est exécuté une fois pour chaque fichier téléchargé? Pourquoi ne lancez-vous pas la requête d'images une fois par chaque fichier téléchargé dans create_album() –

+0

qui est exactement exact, mais je ne suis pas exactement sûr de savoir comment faire: / – Yulia

Répondre

1

Je voulais juste lancer la mise à jour rapide sur cette question. Peut-être que je n'ai pas donné assez d'informations ce qui était important pour voir le problème. Cet article explique très well. Fondamentalement, l'album a été créé à chaque fois que le fichier a été soumis, mais pas le formulaire.

Voici donc ma forme (travail):

<?php if (!isset($_POST['btnSubmit'])) { ?> 
<form action="index.php?view=create" method="post" enctype="multipart/form-data"> 
    <fieldset> 
    <div> 
      <label><b>Title:</b></label> 

      <input name="album[title]" size="40" type="text" value="" class="textfield" /> 
      </div> 

      <div> 
      <label><b>Fullname</b></label> 
      <input name="album[fullname]" size="40" type="text" value="" class="textfield" /> 
      </div> 

      <div> 

      <label><b>Attach Photo</b> </label> 
       <input type="hidden" name="" value="" /> 
<?php 
    $num = 0; 
    while($num < $num_uploads) 
    { 
     echo '<div><input name="userfile[]" type="file" /></div>'; 
     $num++; 
    } 
?> 

Voici php (je découpe une partie de celui-ci il est donc plus facile):

//If form was submitted 
    if (isset($_POST['btnSubmit'])) { 

    create_album($_POST['album']); 
    $find_album_id = mysql_insert_id(); 

     /*** check if a file has been submitted ***/ 
     if(isset($_FILES['userfile']['tmp_name'])) 
     { 
      /** loop through the array of files ***/ 
      for($i=0; $i < count($_FILES['userfile']['tmp_name']);$i++) 
      { 

       $ext = strrchr($imgName, "."); 

       // then create a new random name 
       $newName = md5(rand() * time()) . $ext; 

         if (is_image_types($_FILES['userfile']['type'][$i]) 
         and is_valid_file_size($_FILES['userfile']['size'][$i]) 
         and is_uploaded_file($_FILES['userfile']['tmp_name'][$i]) 
         and is_valid_width_height($_FILES['userfile']['tmp_name'][$i]) 
        ) 
        {  

         mysql_query("INSERT INTO images(name, album_id) VALUES('$newName', '$find_album_id')") ; 
         copy($_FILES['userfile']['tmp_name'][$i], './photos/'.$original_dir.'/' .$newName.'.jpg'); 

      } 

      else 
      { 
     $warning = "Click back error uploading file. 
          Please make sure your file is a JPEG and less than 1MB"; 
      } 
     } 
    } 

    } 

    break; 
} 

J'espère que cela aide quelqu'un qui est regardant ...

Questions connexes