2012-06-17 50 views
2

我的应用程序在注册时上传图像和用户/电子邮件/传递。 iOS到php到mySQL。电子邮件,用户&通&图像名称得到保存到数据库就好了。它只是没有上传到服务器上的文件夹的图像。所以它只是我的代码失败的一部分,但任何人都可以看到哪里?我有我的服务器上运行此代码:使用ASIHTTPRequest从iOS上传图片

<? 
include"master_inc.php"; 
//--------------------------------------------------------------------------RECEIVE LOCAL VARIABLES FROM FORM 
$lastname = strip_tags(substr($_POST['lastname'],0,32)); 
$firstname = strip_tags(substr($_POST['firstname'],0,32)); 
$phone = strip_tags(substr($_POST['phone'],0,32)); 
//$image = $_POST['image']; 
$photo=($_FILES['photo']['name']); 

$password_hint=$_REQUEST['password_hint']; 
$noERROR=1; 
$udidposted = 9; 

//---------------------------------------------------------------------------CHECK IF USERNAME IS LONG ENOUGH 
$username = strip_tags(substr($_POST['username'],0,32)); 
if(trim($username)!=='' && strlen(trim($username)) >= 4){ 
//---------------------------------------------------------------------------IF LONG ENOUGH THEN RUN A QUERY GETTING ALL DATA FROM THAT USER 
$sql="SELECT * FROM users WHERE username='$username'"; 
$result=mysql_query($sql); 
$count=mysql_num_rows($result); 
//---------------------------------------------------------------------------IF $sql GOTTEN HAS ROW COUNT > 1 THEN USER ALREADY EXISTS----------------SET EXISTING USER 104 FLAG 
if($count>0){ 
$username_already_in_use = 3141; 
} 
//---------------------------------------------------------------------------ELSE USERNAME IS TOO SHORT?!?!-------------------------------------------------------SET USER TOO SHORT 104 FLAG 
}else{ 
$username_too_short = 3142;} 

//---------------------------------------------------------------------------EMAIL FORMAT CHECK 
$email_raw = $_REQUEST['email']; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@([a-z0-9-]{2,3})+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email_raw)) 
{ 
$email = $email_raw; 
}else{ 
//---------------------------------------------------------------------------IF INVALID EMAIL THEN----------------------------------------------------------------------SET INVALID EMAIL 104 FLAG 
$bad_email=3143; 
} 

//email unique? 
$sql="SELECT * FROM users WHERE email='$email'"; 
$result=mysql_query($sql); 
$count=mysql_num_rows($result); 
if($count>0){ 
//---------------------------------------------------------------------------IF SQL FOR EMAIL RETURNS A ROW THEN------------------------------------------------SET EMAIL 104 FLAG 
$email_already_in_use=3144; 
} 

//Secure Password Format Checks 
$pw_clean = strip_tags(substr($_POST['password'],0,32)); 
if (preg_match("/^.*(?=.{4,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $pw_clean, $matches)) { 
}else{ 
//---------------------------------------------------------------------------IF PW NOT IN FORMAT THEN-----------------------------------------------------------------SET PW 104 FLAG 
$pw_insecure = 3145; 
} 

//---------------------------------------------------------------------------IF ERROR FLAGS ARE SET THEN LOG HEADERS---------------------------- 
if($username_already_in_use==3141 OR $email_already_in_use==3144 OR $pw_insecure==3145 OR $bad_email==3143 OR $username_too_short==3142){ 
header(
"location:user_add_errors.php?pw_insecure=$pw_insecure&email_already_in_use=$email_already_in_use&username_already_in_use=$username_already_in_use&bad_email=$bad_email&username_too_short=$username_too_short"); 
die(); 
} 
else {header("location:user_add_errors.php?noERROR=$noERROR");} 

//End Error Checks________________________ 

//-------------------------------------------------------------------INSERT INTO SQL 
//Encrypt Password 
$encrypted_pw = md5($pw_clean); 
$query = "INSERT INTO `users` (`username`, 
`password`, 
`lastname`, 
`firstname`, 
`email`, 
`phone`, 
`password_hint`, 
`udid`, 
`userCreated`, 
`photo`) 
VALUES 
(
'$username', 
'$encrypted_pw', 
'$lastname', 
'$firstname', 
'$email', 
'$phone', 
'$password_hint', 
'$udidposted', 
now(), 
'$photo')"; 
// save the info to the database 
$results = mysql_query($query); 

//-----------------------CODE FOR SAVING IMAGE STARTS 
//This is the directory where images will be saved 
$target = "images/"; 
$target = $target . basename($_FILES['photo']['name']); 

//This gets all the other information from the form 
$photo=($_FILES['photo']['name']); 

//Writes the photo to the server 
if(move_uploaded_file($_FILES['photo']['tmp_name'], $target)) 
{ 

//Tells you if its all ok 
echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
} 
else { 

//Gives and error if its not 
echo "Sorry, there was a problem uploading your file."; 
} 
//-----------------------CODE FOR SAVING IMAGE ENDS 

// print out the results 
if($results) 
{ 
    if($username_too_short==3142){echo"ShortUser=".$username_too_short;} 

    if($username_already_in_use==3141){echo"UserTaken=".$username_already_in_use;} 

    if($email_already_in_use==3144){echo"EmailTaken=".$email_already_in_use;} 

    if($pw_insecure==3145){echo"ShortPass=".$pw_insecure;} 

    if($bad_email==3143){echo"BadEmail".$bad_email;} 



//echo("<font size='2' face='Verdana, Arial, Helvetica, sans-serif'>Your changes have been made sucessfully. <br><br><a href='login.php'>Back to login</a></font> "); 
} 
else 
{ 
die("Trouble saving information to the database: " . mysql_error()); 
} 
//--------------------------------------AGAIN?! THIS IS FOR THE FIRST ENTRY I THINK 
$sql="SELECT * FROM users"; 
$result=mysql_query($sql); 
$count=mysql_num_rows($result); 
if($count==1){ 

$query = "UPDATE `users` SET `permissions`='5' WHERE `email`='$email'"; 
//---------------------------------------SAVE the info to the database 
$results = mysql_query($query); 
//---------------------------------------JUST PRINT CODE 
if($results) 
{ echo("ADMINCREATED"); 
} 
else 
{ 
die("ERRORSAVINGADMIN" . mysql_error()); 
} 

} 
?> 

和我的iOS代码,我敢肯定是工作的罚款:

-(void)callASIHTTP{ 

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.myserver.com/learn/login/user_save2.php"]];  
    // Upload an NSData instance 
    NSData *imageData = UIImageJPEGRepresentation(self.pickedImage, 90); 

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    [request addPostValue:self.userName.text forKey:@"username"]; 
    [request addPostValue:self.userPass.text forKey:@"password"]; 
    [request addPostValue:self.userEmail.text forKey:@"email"]; 
    [request addData:imageData withFileName:self.userName.text andContentType:@"image/jpeg" forKey:@"photo"]; 

    //check if passedData is nil 
    if (imageData == nil) { 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title:iDnil" message:@"msg:iDnil" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alertView show]; 
     [alertView release]; 
    } 

    //completion blocks 
    [request setCompletionBlock:^{ 
     NSString *responseString = [request responseString]; 
     if (responseString == nil) { 
      UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title:rStrg" message:@"msg:rStrg" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alertView show]; 
      [alertView release]; 
     } 
    }]; 
    [request setFailedBlock:^{ 
     NSError *error = [request error]; 
     NSLog(@"Error: %@", error.localizedDescription); 
    }]; 

    [request startAsynchronous]; 

} 

回答

2

我知道你的问题..我遇到了同样的问题..你必须给图像的路径..下面的代码将从路径中获取图像..如果图像在你的目录索引中要获取路径有点不同..试试这个,让我知道..

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder 
     NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"photo.jpg"]; 
[request setFile:[NSURL URLWithString:dataPath] forKey:@"photo"]; 

//IF the photo is in directory index use the following code to get the url 
NSString *filename = [[NSBundle mainBundle] pathForResource:@"photo" ofType:@"png"]; 
[request setFile:[NSURL URLWithString:filename] forKey:@"photo"]; 

确定这里是你必须写UIImagePicker

- (void) imagePickerController:(UIImagePickerController *)thePicker didFinishPickingMediaWithInfo:(NSDictionary *)imageInfo 
{ 
    imagePicker = nil; 

    UIImage *image = [imageInfo objectForKey:@"UIImagePickerControllerEditedImage"]; 
    image = [image roundedCornerImage:23.5 borderSize:1]; 




    // Get the data for the image as a JPEG 
    NSData* imageData = UIImageJPEGRepresentation(image, 0.5); 

    // Give a name to the file 
    NSString* imageName = @"photo.png"; 

    // Now, we have to find the documents directory so we can save it 
    // Note that you might want to save it elsewhere, like the cache directory, or something similar. 
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString* documentsDirectory = [paths objectAtIndex:0]; 

    // Now we get the full path to the file 
    NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName]; 
    [imageData writeToFile:fullPathToFile atomically:NO]; 
    myPicture = imageData; 
    myPicturePath = fullPathToFile;  

    // Dismissing the image picker view 
    [self dismissModalViewControllerAnimated: YES]; 
} 

上传图片时使用的代码。 。您将从图像选择器设置myPicture路径..

Request setFile:myPicturePath forKey:@"photo"]; 

下面的代码来从文件目录中的图片,并将其发送..

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
       NSString* documentsDirectory = [paths objectAtIndex:0]; 

       // Now we get the full path to the file 
       NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:@"photo.png"]; 
       [imageData writeToFile:fullPathToFile atomically:NO]; 

       [Request setFile:fullPathToFile forKey:@"photo"]; 
+0

如果此代码无效..请让我知道... –

+0

为什么我需要路径如果我设置为nsdata uiimage? – marciokoko

+0

什么是代码中的[NSString stringWithFormat:@“%@”,@“photo.jpg”]?我没有上传这个文件从我的包,它从UIImagePicker采摘的图像 – marciokoko

0

我知道这是愚蠢的,但我也有类似的问题才发现它是在Web服务器上的文件夹权限。

+0

我已经给了我觉得这件事情在我的PHP代码的文件夹777,但我不当然,因为我不是一个PHP专家。上传图片的代码恰好在数据库代码之后。 – marciokoko