0

我现在正在处理一个问题。目前,我有一个注册表单,它接受用户的一些字段和个人资料图片的图片上传字段。当前正在将个人资料图片名称插入数据库,但在查看目标位置的文件夹时,没有图片的迹象。现在页面变成白色,并在左上角加载了一个小小的破碎图片。有什么建议吗?

个人资料页

<?PHP
ob_start();
error_reporting(E_ALL);
ini_set('display_errors',"On");
session_start();
if (!isset($_SESSION['username'])) {
    header('location:login.php');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<style>

</style>
<!--[if lt IE 9]>

        <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

    <![endif]-->        

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

<script>  $(document).ready(function(){

                $('#login-trigger').click(function(){

                    $(this).next('#login-content').slideToggle();

                    $(this).toggleClass('active');                  



                    if ($(this).hasClass('active')) $(this).find('span').html('&#x25B2;')

                        else $(this).find('span').html('&#x25BC;')

                    })

          });
</script>
</head>

<body>
<header class="cf">

<nav></nav>

</header>
<h1 style="text-align:center"> The Animator - BETA</h1>
<hr />
<div id="nav" style="text-align:center">
<ul style="text-align:center">
<li><a href= "theanimator.html" ><strong>Home</strong></a></li>
<strong><li><a href= "industrial.html" >Industrial</a></li>
<li><a href= "educational.html" >Education</a></li>
<li><a href= "independent.html"  >Independent</a></li>
<li><a href= "emergent.html"  >Emergent</a></li>
<li><a href= "team.html" >Team</a></li>
<li><a href= "project.html"  >Project</a></li>
<li><a href= "budget.html" >Budget</a></li>
<li><a href= "profile.html" >Profile</a></li></strong>
</ul>
</div>
<hr />
<div style="padding-left:19%"><input type="text" value="search" />
<input type="button" value="Search!" name="search"/>
</div>
<h1 style="text-align:center">Profile</h1>
<div style="padding-left:15%; padding-right:15%; font-family: Arial, Helvetica, sans-serif;">
  <div style="font-size:18px; text-align:center; font-family: Arial, Helvetica, sans-serif;">
    <p>
      <?php 

    $querytest = "SELECT * FROM account WHERE idaccount = " . $_GET['idaccount'];
    $result = mysql_query($querytest);

    echo $_SESSION['idaccount'];
  ?>
    </p>
    <p>
      <?php

echo $_SESSION['username'];
  ?>
    </p>
  </div>
  <p style="text-align:center;"><?php echo $_SESSION['email'];?></p>
    <div style="font-size:18px; width:100px; text-align:left; margin-left:201px; padding-left:10pt">Specialties</div>
</div>
  <div style="width:100%; float:left;">
  <div style="width:30%">
  <?php
 $db_name = "animator"; // Database name
  $link = mysql_connect('localhost', 'root', 'admin');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
//echo 'Connected successfully';
mysql_select_db($db_name) or die("Could not connect to Database" .mysql_error());
  $result = mysql_query("SELECT * FROM animator.account WHERE idaccount=" . $_SESSION['idaccount'] . ";");
  if (!$result) { // add this check.
    die('Invalid query: ' . mysql_error());
}
while($row = mysql_fetch_array($result))
{
 header("Content-type: image/jpeg");
     echo mysql_result($result, 0);
} 

   ?>
   </div>
  <div class="previous_work" id="previous_work" style="width:70%; float:left; margin-left:2%;">
  <hr />
  <li>3D Animation</li>
  <li>Scriptwriting</li>
  <li>CGI Animation </li>
</div>
<hr />
  </div>
  &nbsp;
  <hr />
<?php echo $_SESSION['bio']; ?>
</p>
</div>
  </p>
<p>&nbsp;</p>
</div>
<div id="footer"> <hr />
  <p><strong><u><a href="about.html">About The Animator</a> | <a     href="contact.html">Contact</a> | <a href="privacy.html">Privacy Policy</a> | <a     href="faq.html">FAQ</a></u></strong><u> | <strong><a     href="questionnaire.html">Questionnaire</a> |</strong></u> <strong><a     href="reports.html">Admin Reports</a> |</strong></u></p>
</div>
</body>
</html>

上传照片的注册页面

<?php
error_reporting(E_ALL);
ini_set('display_errors',"On");
include ('database_connection.php');
$target = "/var/www/profile";

if (isset($_POST['formsubmitted'])) {
    $error = array();//Declare An Array to store any error message  
    if (empty($_POST['name'])) {//if no name has been supplied 
        $error[] = 'Please Enter a name ';//add to array "error"
    } else {
        $name = $_POST['name'];//else assign it a variable
    }

    if (empty($_POST['e-mail'])) {
        $error[] = 'Please Enter your Email ';
    } else {


        if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) {
           //regular expression for email validation
            $Email = $_POST['e-mail'];
        } else {
             $error[] = 'Your EMail Address is invalid  ';
        }


    }


    if (empty($_POST['Password'])) {
        $error[] = 'Please Enter Your Password ';
    } else {
        $Password = $_POST['Password'];
    }


    if (empty($error)) //send to Database if there's no error '

    { // If everything's OK...

        // Make sure the email address is available:
        $query_verify_email = "SELECT * FROM account  WHERE email ='$Email'";
        $result_verify_email = mysqli_query($dbc, $query_verify_email);
        if (!$result_verify_email) {//if the Query Failed ,similar to if($result_verify_email==false)
            echo ' Database Error Occured ';
        }

        if (mysqli_num_rows($result_verify_email) == 0) { // IF no previous user is using this email .


            // Create a unique  activation code:
            $activation = md5(uniqid(rand(), true));
            $target = $target . basename($_FILES['photo']['name']);

//This gets all the other information from the form
            $pic=($_FILES['photo']['name']);
            if(!isset($_FILES['photo'])) {
$error[] = "No photo selected !";
}



            $query_insert_user = "INSERT INTO `account` ( `username`, `passwords`, `email`, `picture`) VALUES ( '$name', '$Password', '$Email ' , '$pic')";


            $result_insert_user = mysqli_query($dbc, $query_insert_user);
            if (!$result_insert_user) {
                echo 'Query Failed ';
            }

            if (mysqli_affected_rows($dbc) == 1) { //If the Insert Query was successfull.


                // Send the email:
                $message = " To activate your account, please click on this link:\n\n";
                $message .= WEBSITE_URL . '/activate.php?email=' . urlencode($Email) . "&key=$activation";
                mail($Email, 'Registration Confirmation', $message, 'From: systemadminstrator@theanimator.com');

                // Flush the buffered output.


                // Finish the page:
                echo '<div class="success">Thank you for
registering! A confirmation email
has been sent to '.$Email.' Please click on the Activation Link to Activate your account </div>';


            } else { // If it did not run OK.
                echo '<div class="errormsgbox">You could not be registered due to a system
error. We apologize for any
inconvenience.</div>';
            }

        } else { // The email address is not available.
            echo '<div class="errormsgbox" >That email
address has already been registered.
</div>';
        }

    } else {//If the "error" array contains error msg , display them



echo '<div class="errormsgbox"> <ol>';
        foreach ($error as $key => $values) {

            echo '  <li>'.$values.'</li>';



        }
        echo '</ol></div>';

    }

    mysqli_close($dbc);//Close the DB Connection

} // End of the main Submit conditional.



?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registration Form</title>





<style type="text/css">
body {
    font-family:"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif;
    font-size:12px;
}
.registration_form {
    margin:0 auto;
    width:500px;
    padding:14px;
}
label {
    width: 10em;
    float: left;
    margin-right: 0.5em;
    display: block
}
.submit {
    float:right;
}
fieldset {
    background:#EBF4FB none repeat scroll 0 0;
    border:2px solid #B7DDF2;
    width: 500px;
}
legend {
    color: #fff;
    background: #80D3E2;
    border: 1px solid #781351;
    padding: 2px 6px
}
.elements {
    padding:10px;
}
p {
    border-bottom:1px solid #B7DDF2;
    color:#666666;
    font-size:11px;
    margin-bottom:20px;
    padding-bottom:10px;
}
a{
    color:#0099FF;
font-weight:bold;
}

/* Box Style */


 .success, .warning, .errormsgbox, .validation {
    border: 1px solid;
    margin: 0 auto;
    padding:10px 5px 10px 50px;
    background-repeat: no-repeat;
    background-position: 10px center;
     font-weight:bold;
     width:450px;

}

.success {

    color: #4F8A10;
    background-color: #DFF2BF;
    background-image:url('images/success.png');
}
.warning {

    color: #9F6000;
    background-color: #FEEFB3;
    background-image: url('images/warning.png');
}
.errormsgbox {

    color: #D8000C;
    background-color: #FFBABA;
    background-image: url('images/error.png');

}
.validation {

    color: #D63301;
    background-color: #FFCCBA;
    background-image: url('images/error.png');
}



</style>

</head>
<body>


<form action="registeraccount.php" method="post" class="registration_form" enctype="multipart/form-data">
  <fieldset>
    <legend>Registration Form </legend>

    <h2 style="text-align:center">Create an account!</h2>
    <p style="text-align:center"> <span>Already a member? <a href="login.php">Log in</a></span> </p>

    <div class="elements">
      <label for="name">Name :</label>
      <input type="text" id="name" name="name" size="25" />
    </div>
    <div class="elements">
      <label for="e-mail">E-mail :</label>
      <input type="text" id="e-mail" name="e-mail" size="25" />
    </div>
    <div class="elements">
      <label for="Password">Password:</label>
      <input type="password" id="Password" name="Password" size="25" />
      <p>
              Photo:
            </p>
            <input type="hidden" name="size" value="350000">
            <input type="file" name="photo"> 
            <p>
      </div>

      <br />

    <div class="submit">
     <input type="hidden" name="formsubmitted" value="TRUE" />
      <input type="submit" value="Register" />

    </div>
  </fieldset>
</form>
<button onclick="window.location='theanimator.html';">Go Back!</button>
</body>
</html>
4

2 回答 2

1

注意:这是一个建议性答案。

删除或注释掉这一行:$target = "/var/www/profile";

mail()并将我在下面发布的代码放在您的函数下方,

或以上$message = "To activate your account...并尝试/测试。

路径注意:关于$upload_path = './uploads/';我的代码,这是假设您正在从root服务器运行脚本。

您可以尝试$upload_path = '/var/www/profile/uploads/';,但您需要保留尾部斜杠。

您还需要删除/注释掉$target = $target . basename($_FILES['photo']['name']);
或者更好的是,在该空间中使用我的代码。您将必须测试它在哪个位置最有效。

这是我的(经过测试的)代码:

$allowed_filetypes = array('.jpg','.gif','.bmp','.png'); // These will be the types of file that will pass the validation.
$max_filesize = 9999999999; // Maximum filesize in BYTES - SET IN to a low number for small files
$upload_path = './uploads/'; // The place the files will be uploaded to (currently a 'files' directory).

$filename = $_FILES['photo']['name']; // Get the name of the file (including file extension).
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // Get the extension from the filename.

// Check if the filetype is allowed, if not DIE and inform the user.
if(!in_array($ext,$allowed_filetypes))
die('The file you attempted to upload is not allowed.');

// Now check the filesize, if it is too large then DIE and inform the user.
if(filesize($_FILES['photo']['tmp_name']) > $max_filesize)
die('The file you attempted to upload is too large.');

// Check if we can upload to the specified path, if not DIE and inform the user.
if(!is_writable($upload_path))
die('You cannot upload to the specified directory, please CHMOD it to 777.');

// Upload the file to your specified path.
if(move_uploaded_file($_FILES['photo']['tmp_name'],$upload_path . $filename))
echo 'Your file upload was successful'; // It worked.
else
echo 'There was an error during the file upload. Please try again.'; // It failed

// rest of your code to be placed below
于 2013-06-09T02:12:46.667 回答
0

这不是一个完整的修复,但我注意到几件事

正如其他人所建议的那样,您不会将图片移动到您可以访问的位置。还:

while($row = mysql_fetch_array($result)) { header("Content-type: image/jpeg"); echo mysql_result($result, 0); }

将输出发送到浏览器后,似乎正在使用 header() 术语。我确实注意到您正在使用 ob_start 来缓冲您的输出,但不认为这会阻止意外结果。

在同一个代码块中,您似乎从 mysql 结果中返回了整行,而不仅仅是 .jpg 数据。我怀疑这是更可能的问题,因为

$result = mysql_query("SELECT * FROM animator.account WHERE idaccount=" . $_SESSION['idaccount'] . ";");

正在返回一个包含数据库中所有字段的数组。对后一种理论的快速测试是将您的查询替换为

$result = mysql_query("SELECT picture FROM animator.account WHERE idaccount=" . $_SESSION['idaccount'] . ";");

很想听听你的结果。

于 2013-06-08T21:03:01.507 回答