2011-10-12 47 views
3

我正在創建一個鏈接共享網站,我希望註冊的用戶上傳頭像並在整個網站中使用該頭像。當他/她註冊時爲用戶上傳頭像

我到目前爲止,用戶可以註冊,但無法找到一個方法讓他/她有一個化身。

在這裏我有signup.php文件,以便你能看到我的意思。

<?php 
    include 'connect.php'; 
    include 'header.php'; 

    echo '<h3>Register</h3><br />'; 

    if($_SERVER['REQUEST_METHOD'] != 'POST') 
    { 
     /*the form hasn't been posted yet, display it 
    note that the action="" will cause the form to post to the same page it is on */ 

    echo '<form method="post" action=""> 
    <b>Username: </b><input type="text" name="user_name" /><br/><br/> 
    <b>Password: </b><input type="password" name="user_pass"><br/><br/> 
    <b>Confirm assword: </b><input type="password" name="user_pass_check"><br/>  <br/> 
    <b>E-mail: </b><input type="email" name="user_email"><br/><br/> 

      /////////////////////////////////////////////////////////// 
      ///////// must I use <input type="file"> here???? ///////// 
      ///////// and how do I put it in the database???? ///////// 
      /////////////////////////////////////////////////////////// 

    <input type="submit" value="Join" /> 
</form>'; 
    } 
    else 
    { 
    /* so, the form has been posted, we'll process the data in three steps: 
    1. Check the data 
    2. Let the user refill the wrong fields (if necessary) 
    3. Save the data 
*/ 
$errors = array(); /* declare the array for later use */ 

if(isset($_POST['user_name'])) 
{ 
    //the user name exists 
    if(!ctype_alnum($_POST['user_name'])) 
    { 
     $errors[] = 'The username can only contain letters and digits.'; 
    } 
    if(strlen($_POST['user_name']) > 30) 
    { 
     $errors[] = 'The username cannot be longer than 30 characters.'; 
    } 
} 
else 
{ 
    $errors[] = 'The username field must not be empty.'; 
} 


if(isset($_POST['user_pass'])) 
{ 
    if($_POST['user_pass'] != $_POST['user_pass_check']) 
    { 
     $errors[] = 'The two passwords did not match.'; 
    } 
} 
else 
{ 
    $errors[] = 'The password field cannot be empty.'; 
} 

if(!empty($errors)) 

    /*check for an empty array, if there are errors, they're in this array (note the !  operator)*/ 
{ 
    echo 'Uh-oh.. a couple of fields are not filled in correctly..<br /><br />'; 
    echo '<ul>'; 
    foreach($errors as $key => $value) /* walk through the array so all the errors get displayed */ 
    { 
     echo '<li>' . $value . '</li>'; /* this generates a nice error list */ 
    } 
    echo '</ul>'; 
} 
else 
{ 



    //the form has been posted without, so save it 
    //notice the use of mysql_real_escape_string, keep everything safe! 
    //also notice the sha1 function which hashes the password 
    $sql = "INSERT INTO 
       users(user_name, user_pass, user_email ,user_date, user_level) 
      VALUES('" . mysql_real_escape_string($_POST['user_name']) . "', 
        '" . sha1($_POST['user_pass']) . "', 
        '" . mysql_real_escape_string($_POST['user_email']) . "', 
        NOW(), 
        0)"; 

    $result = mysql_query($sql); 
    if(!$result) 
    { 
     //something went wrong, display the error 
     echo 'Something went wrong while registering. Please try again later.'; 
     //echo mysql_error(); //debugging purposes, uncomment when needed 
    } 
    else 
    { 
     echo 'Succesfully registered. You can now <a href="signin.php">sign in</a> and start sharing links.'; 
    } 
} 
} 

include 'footer.php'; 
?> 

,這裏是我的數據庫文件,因此你也許可以告訴我如何添加頭像在數據庫

CREATE TABLE users ( 
user_id  INT(8) NOT NULL AUTO_INCREMENT, 
user_name VARCHAR(30) NOT NULL, 
user_pass VARCHAR(255) NOT NULL, 
user_email VARCHAR(255) NOT NULL, 
user_date DATETIME NOT NULL, 
user_level INT(8) NOT NULL, 
UNIQUE INDEX user_name_unique (user_name), 
PRIMARY KEY (user_id) 
); 

CREATE TABLE categories ( 
cat_id   INT(8) NOT NULL AUTO_INCREMENT, 
cat_name  VARCHAR(255) NOT NULL, 
cat_description  VARCHAR(255) NOT NULL, 
UNIQUE INDEX cat_name_unique (cat_name), 
PRIMARY KEY (cat_id) 
); 

CREATE TABLE topics ( 
topic_id  INT(8) NOT NULL AUTO_INCREMENT, 
topic_subject  VARCHAR(255) NOT NULL, 
topic_date  DATETIME NOT NULL, 
topic_cat  INT(8) NOT NULL, 
topic_by  INT(8) NOT NULL, 
PRIMARY KEY (topic_id) 
); 

CREATE TABLE posts ( 
post_id   INT(8) NOT NULL AUTO_INCREMENT, 
post_content  TEXT NOT NULL, 
post_date  DATETIME NOT NULL, 
post_topic  INT(8) NOT NULL, 
post_by  INT(8) NOT NULL, 
PRIMARY KEY (post_id) 
); 

我如何添加頭像中,當用戶寄存器DATABSE?

回答

0

您不會將實際圖像保存到數據庫中,只保存文件名。

然後,您可以簡單地將一個文件選擇元素添加到您的表單,並使用它來上傳圖像並將文件名保存到數據庫中。

我個人喜歡用uploadify(http://www.uploadify.com/)來做到這一點,這使得該過程對用戶來說更好一點。

3

首先,你真的不想在註冊表中這樣做。爲此創建一個「編輯配置文件」頁面。其次,如果不再次開始討論,你可能不想將頭像圖像存儲在數據庫中,而是將其存儲爲文件並將文件名存儲在用戶/簡檔表中(或者將用戶名或ID用作文件名)。

因此,要採取的步驟:

  1. 一個登錄用戶上傳圖片到其配置文件(使用)
  2. 您存儲在目錄中的圖片,說/images/avatars/$userid.jpg
  3. 每當有人觀看用戶的配置文件,您插入<img src="/images/avatars/$userid.jpg">標籤

或者,在數據庫中存儲:

  1. 一個登錄用戶上傳圖片到其配置文件(使用)
  2. 你確定$文件名中,比如$隨機的。$擴展
  3. 您的圖像存儲在一個目錄,說/images/avatars/$filename
  4. 更新用戶行,通過設置avatarurl = $文件名
  5. 每當有人觀看的用戶的配置文件,您retreive該用戶的頭像文件名和插入<img src="/images/avatars/$filename">標籤

第二種方法的優點是它獨立於文件擴展名,並且可以通過爲每個圖像使用隨機ID來「隱藏」文件,因此惡意訪問者無法猜測並收集所有的頭像。

0

Plupload是將文件上傳到服務器的另一個示例。我使用了uploadify,swfupload和其他一些我不記得的東西。 Plupload是那裏最好的一個。

plupload

相關問題