If Statement Always Going to Else Method? - mysql

The following code works almost perfectly. I am connecting to a mysql server on my localhost from Xcode using php in the middle. This in the end will be a login system:
NSString *strURL = [NSString stringWithFormat:#"http://localhost:8888/Check.php?user=%#&pass=%#",txtName.text,passName.text];
// to execute php code
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:strURL]];
NSError *e;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&e];
// to receive the returned value
NSString *strResult = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]autorelease];
NSLog(#"%#",strResult);
NSString *success = #"Success";
if ([strResult isEqualToString:success]) {
NSLog(#"I realize that the two strings are the same");
}
else {
NSLog(#"The two strings are not the same");
}
The strResult prints out in the debugger the following items that I am telling the php file to echo back to me for the different conditions, (if the username and password is right or wrong)
However, for some reason the if statement part of the code is always going to the else method even though in the output it specifically says that the string, strResult, is containing the word "Success".
This is so irritating because I can see that both strings, (strResult and success), are equal to each other but for some reason Xcode cannot.

Your strResult might contain whitespace at the end. Try logging like this to get a hex dump of the characters in the string:
NSLog(#"strResult = %#", [strResult dataUsingEncoding:NSUTF8StringEncoding]);
NSLog(#"success = %#", [success dataUsingEncoding:NSUTF8StringEncoding]);
OR
NSLog(#"%u",strResult.length);
If it is a whitespace problem, you can trim it using the answer here: What's the best way to trim whitespace from a string in Cocoa Touch?

Related

stringByReplacingOccurrencesOfString not functioning correctly

I created a small app which will get html from website and turn that into string. Now I want to delete some text from that string but it is not deleting that text. Here is my code that I wrote.
-(void)dk {
NSString *myURLString = #"http://bountyboulevardss.eq.edu.au/?cat=3&feed=rss2";
NSURL *myURL = [NSURL URLWithString:myURLString];
NSError *error = nil;
NSString *myHTMLString = [NSString stringWithContentsOfURL:myURL encoding: NSUTF8StringEncoding error:&error];
[myHTMLString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if (error != nil)
{
NSLog(#"Error : %#", error);
}
else
{
}
[myHTMLString stringByReplacingOccurrencesOfString:#"<title>Bounty Boulevard » » Latest News</title>" withString:#""];
NSString *newString = myHTMLString;
NSScanner *scanner = [NSScanner scannerWithString:newString];
NSString *token = nil;
[scanner scanUpToString:#"<title>" intoString:NULL];
[scanner scanUpToString:#"</title>" intoString:&token];
headline.text = token;
NSLog(#"%#", myHTMLString);
}
Like you see in the beginning I try to delete the first title in the text and then I scan for the title I still keep getting the title I deleted. I checked in log and it is not deleting. I don't know what I am doing wrong. Sorry guys if this is really easy. Thanks for helping.
Not an Objective-C expert myself, but I guess you need to assign the replaced value back to the variable:
myHTMLString = [myHTMLString stringByReplacingOccurrencesOfString:#"<title>Bounty Boulevard » » Latest News</title>" withString:#""];
So, in general the idiomatic way to replace a string and keeping the result in the same variable is:
str = [str stringByReplacingOccurrencesOfString....];
This is confirmed by the stringByReplacingOccurencesOfString doc which states that this method "returns a new string in which all occurrences of a target string in the receiver are replaced by another given string.".

How to pass an HTML string in a Query String in IOS

I have a simple IOS application that I created for consultants where I work. It has a custom keyboard with notation that they use that includes superscript and subscript characters. The easiest way that I found to handle those characters was using HTML and a WebView, which works just fine.
I am now attempting to send this information to a web application that will insert it into a SQL database. Sending all of the other information works just fine, until I get to the transcript with HTML in it. I am encoding each of the values that I send through the query string with stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding but the query string fails when HTML elements are included. I believe this is due to the / that is not removed during the escape encoding. For example the HTML break tag becomes %3Cbr%20/%3E. So the < > and space are replaced, but not the /.
Should I be using a different method? Is there an easy way to send HTML over Query String? Am I correct that the / character is what is breaking my query string?
Here is the code I have now:
NSString *datePE =[dateString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *studentPE =[student stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *teacherPE =[teacher stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *transcriberPE =[transcriber stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *vrPE =[vrTextField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *totalTimePE =[totalTimeString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *transcriptPE =[transcriptString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
parameters = [NSString stringWithFormat:#"dateQS=%#&studentQS=%#&teacherQS=%#&transcriberQS=%#&vrQS=%#&totalTimeQS=%#&transcriptQS=%#",datePE ,studentPE,teacherPE,transcriberPE,vrPE,totalTimePE, transcriptPE];
request = [NSMutableURLRequest
requestWithURL:[NSURL URLWithString:#"http://server.domain.net/folder/subfolder/Default.aspx?"]];
[request setHTTPMethod:#"POST"];
[request setHTTPBody:[parameters dataUsingEncoding:NSUTF8StringEncoding]];
connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self
startImmediately:YES];

App is STILL not updating database when string contains spaces

Slowly but surely I think I'm going mad. After getting the solution to my problem and the app now also accepting spaces, it still won't add the data that contains spaces to my mysql database. Here is the code:
NSString *strURL = [NSString stringWithFormat:#"http://www.bbc.com/phpFile.php?number=%#&name=%#&lastname=%#", number, firstName, lastName];
NSString *webStringURl = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];
NSLog(#"%#", strResult);
NSLog(#"%#", webStringURl);
NSLog even tells me that it does exactly what I tell him to:
ProjectX[4003:15203] http://www.bbc.com/phpFile.php?number=11166&name=Yong%20Wang%20Ding&lastname=Blamblam
It works everytime when the variables do not contain spaces. When I open the php file in my browser and enter the variables by hand (with spaces) it adds them to my database. I have no clue why it refuses to work when doing exactly(?) the same thing with my app.
It doesn't look like you're using webStringURl (sic) anywhere other than in the final NSLog statement. Are you sure you didn't mean to write:
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:webStringURl];
...for the third line?
At the moment, you're calling dataWithContentsOfURL on your unescaped version of the URL (which may still contain spaces).

App is not updating database when string contains spaces

I ran into a weird problem. I built a mysql database where the user can store his contacts through an app. He just adds his contact information by clicking on a button. Then, the data is added to the database.
However, when the contact's information has spaces between his first name, last name or number the app refuses to accept the data. I dont get an error message or anything like that, but I also dont get any confirmation. The record does not exist in the database.
There is no problem with my php file (The file is definitely correct, I got it checked here, twice).
Here is my code:
NSString *strURL = [NSString stringWithFormat:#"http://www.abc.com/phpFile.php?number=%#&name=%#&lastname=%#", number, firstName, lastName];
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];
NSLog(#"%#", strResult);
The space character is not allowed in a URI. Use %20 to encode the space. There are other characters that are also not allowed as part of the URI. Look up URI encoding.
NSString *strURL = [NSString stringWithFormat:#"http://www.abc.com/phpFile.php?number=%#&name=%#&lastname=%#", number, firstName, lastName];
strURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];
NSLog(#"%#", strResult);

how to escape string for UIWebView?

I pull json data from a server. It contains a dictionary with text that I insert into a html template.
How do I properly escape this string?
NSString* json = /* can be anything, but also garbage */
NSString* json_escaped = [json someEscapeMethod]; /////// HOW TO ESCAPE THIS ?
NSString* script = [NSString stringWithFormat:#"process('%#')", json_escaped];
NSString* result = [self.webView stringByEvaluatingJavaScriptFromString:script];
I currently do like this, but I'm not sure wether the escaping is sufficiently
NSString* json_escaped = [json stringByReplacingOccurrencesOfString:#"'" withString:#"\\'"];
I now encode it this way, but the overhead is huge.
NSString* json = /* can be anything, but also garbage */
NSString* json_escaped = [json stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* script = [NSString stringWithFormat:#"process('%#')", json_escaped];
NSString* result = [self.webView stringByEvaluatingJavaScriptFromString:script];
And decode it in javascript like this
function process(json_escaped) {
var json = decodeURIComponent(json_escaped);
alert('json: ' + json.toString());
}
I'm still looking for a better solution with less overhead.
Update
I have recently learned that there exists several frameworks for bridging objective-c with javascript.
The "Escaping Characters in a String" section of NSRegularExpression may work.