无法通过PHP将NSData上传到MySQL

问题描述:

我正在为我的iPhone应用程序进行服务器端工作,并且出于某种原因,imageData不会上传。如果你能看看我的PHP代码,并且告诉我是否有问题,我将不胜感激。无法通过PHP将NSData上传到MySQL

addImage.php在调用addrecipie方法后调用。

我的用于上载图象的OBJ-C代码是:

NSString *name = [@"Name: " stringByAppendingFormat:@"%d", arc4random()%20091011]; 
    NSString *username = [@"User: " stringByAppendingFormat:@"%d", arc4random()%20091011]; 
    NSString *description = [@"Description: " stringByAppendingFormat:@"%d", arc4random()%20091011]; 
    NSString *shortDescription = [@"ShortDescription: " stringByAppendingFormat:@"%d", arc4random()%20091011]; 
    SBJsonWriter *writer = [[SBJsonWriter alloc] init]; 
    NSArray *array = [NSArray arrayWithObjects:@"llama", @"30", @"beef", @"beef", @"beefy", nil]; 
    NSString *ingredients = [writer stringWithObject:array]; 
    NSString *method = ingredients; 
    NSString *category = @"Health"; 
    NSString *length = @"20"; 
    [writer release]; 
    NSArray *arr = [NSArray arrayWithObjects:name,description,shortDescription,ingredients,method,UIImageJPEGRepresentation([UIImage imageNamed:@"cupboard.jpg"], 1.0),username,length,category, nil]; 
    NSDictionary *dict = [[NSDictionary alloc] initWithObjects:arr forKeys:recipieKeys]; 
    [[AccountManager sharedManager] addRecipie:dict]; 
    [dict release]; 

- (NSString *)addRecipie:(NSDictionary *)recipie { 
    NSData *data = [recipie objectForKey:@"image"]; 
    //form data away.... 

    NSString *url = [NSString stringWithFormat:@"http://...com/(..).php?name=%@&description=%@&shortDescription=%@&ingredients=%@&method=%@&username=%@&length=%@&category=%@", [recipie objectForKey:@"name"], [recipie objectForKey:@"description"], [recipie objectForKey:@"shortdescription"], [recipie objectForKey:@"ingredients"], [recipie objectForKey:@"method"], [recipie objectForKey:@"username"], [recipie objectForKey:@"length"], [recipie objectForKey:@"category"]]; 
    NSString *escaped = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    [escaped stringByReplacingOccurrencesOfString:@"$" withString:@"%24"]; 
    [escaped stringByReplacingOccurrencesOfString:@"&" withString:@"%26"]; 
    [escaped stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"]; 
    [escaped stringByReplacingOccurrencesOfString:@"," withString:@"%2C"]; 
    [escaped stringByReplacingOccurrencesOfString:@"/" withString:@"%2F"]; 
    [escaped stringByReplacingOccurrencesOfString:@":" withString:@"%3A"]; 
    [escaped stringByReplacingOccurrencesOfString:@";" withString:@"%3B"]; 
    [escaped stringByReplacingOccurrencesOfString:@"=" withString:@"%3D"]; 
    [escaped stringByReplacingOccurrencesOfString:@"?" withString:@"%3F"]; 
    [escaped stringByReplacingOccurrencesOfString:@"@" withString:@"%40"]; 
    [escaped stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; 
    [escaped stringByReplacingOccurrencesOfString:@"\t" withString:@"%09"]; 
    [escaped stringByReplacingOccurrencesOfString:@"#" withString:@"%23"]; 
    [escaped stringByReplacingOccurrencesOfString:@"<" withString:@"%3C"]; 
    [escaped stringByReplacingOccurrencesOfString:@">" withString:@"%3E"]; 
    [escaped stringByReplacingOccurrencesOfString:@"\"" withString:@"%22"]; 
    [escaped stringByReplacingOccurrencesOfString:@"\n" withString:@"%0A"]; 
    ASIHTTPRequest *req = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:escaped]]; 
    [req startAsynchronous]; 
    if (![req error]) { 
     NSString *ids = [req responseString]; 
     ASIFormDataRequest *reqs = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:[@"http://maxkdevelopment.co.uk/recipes/addimage.php?id=" stringByAppendingFormat:@"%@", [ids stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]]]; 
     [reqs setData:data forKey:@"image"]; 
     [reqs startAsynchronous]; 
     if (![reqs error]) { 
      return [reqs responseString]; 
     } 
     else { 
      return [[reqs error] description]; 
     } 
    } 
    else { 
     NSLog(@"%@", [[req error] description]); 
    } 
    return @""; 
} 

(addImage.php)

<?php 
$id = $_GET['id']; 
mysql_connect(...); 
mysql_select_db("...") or die(mysql_error()); 
$query = "SELECT * FROM recipies WHERE id=$id"; 
$result = mysql_query($query); 
if (mysql_num_rows($result) > 0) { 
$sql = sprintf("UPDATE recipies SET Image = '%s' WHERE id=$id", mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]))); 
$results = mysql_query($sql) or die(mysql_error()); 
$error = mysql_error(); 
echo "error: $error"; 
} 
?> 

(GetImage.php)

<?php 
$id = $_GET['id']; 
mysql_connect(...); 
mysql_select_db(..."); 
$query = "SELECT * FROM recipies WHERE id=$id"; 
$result = mysql_query($query) or die(mysql_error()); 
if (mysql_num_rows($result) > 0) { 
    while ($row = mysql_fetch_assoc($result)) { 
     echo $row['Image']; 
    } 
} 
?> 

(添加配方。 php)

<?php 
function uk_date() { 
    $sign = "-"; 
    $h = "0"; 
    $dst = "true"; 
    if ($dst) { 
     $daylight_saving = date('I'); 
     if ($daylight_saving){ 
      if ($sign == "-"){ $h=$h-1; } 
      else { $h=$h+1; } 
     } 
    } 
    $hm = $h * 60; 
    $ms = $hm * 60; 
    if ($sign == "-"){ $timestamp = time()-($ms); } 
    else { $timestamp = time()+($ms); } 
    return $gmdate = gmdate("d/m/Y g:i:s A", $timestamp); 
} 
$name = $_GET['name']; 
$description = $_GET['description']; 
$shortDescription = $_GET['shortDescription']; 
$ingredients = $_GET['ingredients']; 
$category = $_GET['category']; 
$method = $_GET['method']; 
//$image = $_GET['image']; 
$username = $_GET['username']; 
$length = $_GET['length']; 
$dateAdded = uk_date(); 
$conn = mysql_connect('...'); 
mysql_select_db('...'); 
$query = sprintf("INSERT INTO recipies (Name, Description, shortDescription, Ingredients, Method, Length, dateAdded, Username, Category) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", 
    mysql_real_escape_string($name), 
    mysql_real_escape_string($description), 
    mysql_real_escape_string($shortDescription), 
    mysql_real_escape_string($ingredients), 
    mysql_real_escape_string($method), 
    mysql_real_escape_string($length), 
    mysql_real_escape_string($dateAdded), 
    mysql_real_escape_string($username), 
    mysql_real_escape_string($category)); 

    $result = mysql_query($query) or die(mysql_error()); 

    $query2 = "SELECT * FROM `recipies` WHERE `Name` = $name AND `shortDescription` = $shortDescription"; 
    $result2 = mysql_query($query2) or die(mysql_error()); 
    if (mysql_num_rows($result2) > 0) { 
     while($row = mysql_fetch_assoc($result2)) { 
     die($row['id']); 
     } 
    } 
?> 
+0

哪部分不工作? – Dormouse 2011-05-12 16:08:15

+0

addImage部分。 – 2011-05-12 16:08:58

+0

它是否返回错误? – Dormouse 2011-05-12 16:10:18

你已经在addImage.php SQL中拼写了recipe“recipie”。除非您的表名拼写错误,否则该脚本将返回0行而不运行后续查询。

+0

虽然检查通过这似乎是你如何命名它。虽然有支票。 – Dormouse 2011-05-12 16:14:11

+0

是的,我知道。我将数据库命名错误。我搜遍了我的代码,似乎问题在于id不是在addrecipie.php脚本中被回显。我收到错误:'你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以找到在':2964774 AND'shortDescription' = ShortDescription:1988287'' – 2011-05-12 16:15:11

+1

附近使用的正确语法。您需要用引号包围字符串。将WHERE \'Name \'= $ name AND \'shortDescription \'= $ shortDescription'更改为WHERE \'Name \'='$ name'AND \'shortDescription \'='$ shortDescription'' – Dormouse 2011-05-12 16:19:36