requête et réponse php avec NSURL

Bonjour,



Je m'initie à  NSURL avec le livre de Hillegass et au php.



Je sais utiliser un formulaire html et le traiter avec un script php.

En html, le formulaire envoie une URL de type :
<br />
monSite/maPage1.php?var1=valeur1&amp;var2=valeur2<br />


D'après le Hillegass, on reproduit cela avec des NSString, puis on fait :
<br />
NSURL *url = [NSURL URLWithString:urlString];<br />
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url<br />
							    cachePolicy:NSURLRequestReturnCacheDataElseLoad<br />
										    timeoutInterval:30];<br />
où urlString est la chaà®ne de caractères comme plus haut.



Je pense que la NSURLResponse attend une chaà®ne de caractère similaire, toujours de type
<br />
monSite/maPageResponse.php?var1=valeur1&amp;var2=valeur2<br />




Ma question est :

comment écrit-on cette réponse dans le code php? J'ai essayé avec <a href ...> mais cela ne marche pas.



Je bugg là -dessus depuis ce matin, est-ce que quelqu'un pourrait m'aiguiller? Merci!

Réponses

  • AlakAlak Membre
    juillet 2012 modifié #2
    Tu peux faire :


    <br />
    [NSURL URLWithString:[NSString stringWithFormat:@&quot;monSite/maPageResponse.php?var1=%@&amp;var2=%@&quot;, valeur1, valeur2]];<br />
  • Merci Alak,



    Tu montres ce que j'ai su faire effectivement, merci tout de même.



    En fait, je pose ici une question relative au php : que dois-je écrire dans le code php sur mon site pour que mon appli puisse interpréter la réponse? Je sais, ici c'est un forum Cocoa, pas php, mais je pense que certains font les deux...
  • Pour la partie php :


    <br />
    &#036;_GET[&#39;[color=#008800][font=monospace][size=3]var1[/size][/font][/color]&#39;];<br />
    &#036;_GET[&#39;[color=#008800][font=monospace][size=3]var2[/size][/font][/color]&#39;];<br />
  • Merci Alak,



    En fait mon problème, c'est dans l'autre sens. C'est interpréter la réponse. Mon idée est :

    j'entre dans des NSTextField des infos qui sont envoyées avec NSURL vers le code php. Le php renvoie une réponse que NSURLResponse doit savoir lire.



    Je pense que cette réponse est de type : (comme l'était la sollicitation du site)
    <br />
    monSite/maPageResponse.php?var1=valeur1&amp;var2=valeur2<br />


    Puis NSURLResponse sait transformer en xml les "var1=valeur1&var2=valeur2".

    Est-ce bien cela?



    J'ai un bug dans php que j'ai du mal à  résoudre par ailleurs, mais bon, si déjà  je suis certain de ne pas le corriger pour rien, ce sera parfait!
  • AlakAlak Membre
    juillet 2012 modifié #6
    tu peux pas générer toi même une réponse xml?


    <br />
    &lt;?php<br />
    &#036;_GET[&#39;variableDuNSTextField&#39;];<br />
    <br />
    // je traite ma variable j&#39;ajoute des truc a la bdd<br />
    // Je recupere ce que je veux répondre<br />
    // Je format un xml<br />
    <br />
    echo &quot;&lt;xml&gt;&quot;;<br />
    echo &quot;&lt;vars&gt;&quot;;<br />
    echo &quot;&lt;var&gt;&quot;.&#036;var1.&quot;&lt;/var&gt;&quot;;<br />
    echo &quot;&lt;var2&gt;&quot;.&#036;var2.&quot;&lt;/var2&gt;&quot;;<br />
    echo &quot;&lt;/vars&gt;&quot;;<br />
    ?&gt;<br />
  • AliGatorAliGator Membre, Modérateur
    Heu oui je crois Hervé que tu n'es pas bien à  l'aise avec la façon dont fonctionne les communications client/serveur.



    Le serveur il te répond à  une requête. Cette réponse n'est pas elle-même une requête (ça n'aurait pas de sens ça voudrait dire qu'il faudrait que ton iPhone soit lui-même un serveur) encore moins du genre "reponse.php?a=1&b=1" (ça voudrait dire que ton iPhone a un serveur PHP et sait interpréter le PHP. L'iPhone c'est le client dans l'histoire, il s'en fout de PHP, il demande un truc à  un serveur, c'est pas le serveur qui demande au client).



    La réponse du serveur peut être n'importe quoi, peut avoir la forme que tu veux. A toi de choisir, du moment que le serveur et le client sont d'accord sur le format d'échange. Le serveur (ton code PHP côté serveur) peut te répondre en retournant du HTML (pas très utile voir pas du tout adapté pour ton cas), en retournant une image si c'était une image que tu as demandé (ce n'est pas ton cas non plus), ou si c'est des données structurées que tu attends (là  c'est ton cas semble-t-il) en réponse, à  toi de choisir le format de réponse, par exemple du XML, du JSON, du PLIST... ce qui t'arrange le plus pour lire ces données côté iPhone, au final.
  • Merci AliGator, je comprends un peu mieux.



    Juste une question : j'ai vu une "api php" pour créer des xml :

    http://eusebius.developpez.com/php5dom/

    Si je fais
    <br />
    return (&#036;dom); //un xml généré par le code php<br />


    est-ce que cela a des chances de marcher? image/huh.gif' class='bbc_emoticon' alt='???' />
  • HerveHerve Membre
    juillet 2012 modifié #9
    Bon, "return", cela ne marche pas. J'ai essayé la méthode de Alak, dans tous les cas il y a bien un NSURLResponder, mais le code de Hillegass ne marche pas.



    J'ai toujours cette erreur :



    Error Domain=NSXMLParserErrorDomain Code=76 "Line 8: Opening and ending tag mismatch: body line 0 and br

    " UserInfo=0x101994e50 {NSLocalizedDescription=Line 8: Opening and ending tag mismatch: body line 0 and br

    }



    Bon, il me faudrait juste un retours avec deux ou trois entiers en fait, lisible par l'appli...



    Merci pour vos aides, je vais reprendre cela. Si vous avez des idées, je suis preneur...



  • Bon, cela va mieux.

    J'ai supprimé tous les "echo..." de contrôle et ai fait ceci :
    <br />
    echo &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot;?&gt;&quot;;<br />
    echo &quot;&lt;phpreaderlist version=\&quot;1\&quot; xmlns=\&quot;http://xspf.org/ns/0/\&quot;&gt;&quot;;<br />
    echo &quot;&lt;vars&gt;&quot;;<br />
    echo &quot;&lt;var&gt;ert&lt;/var&gt;&quot;;<br />
    echo &quot;&lt;var2&gt;tre&lt;/var2&gt;&quot;;<br />
    echo &quot;&lt;/vars&gt;&quot;;<br />




    Le message d'erreur a changé. Il est devenu :
    URLResponse = <NSHTTPURLResponse: 0x101c8c820>

    pas de doc : Error Domain=NSXMLParserErrorDomain Code=64 "Line 1: XML declaration allowed only at the start of the document

    " UserInfo=0x101c8f980 {NSLocalizedDescription=Line 1: XML declaration allowed only at the start of the document

    }






    On progresse...

    Apparemment, le problème vient de ma première ligne de code. Si je ne mets pas de déclaration "habituelle" du XML, cela ne marche pas mieux ("<xml>" ne suffit apparemment pas).
  • Je me réponds un peu à  mois même, mais bon, cela m'aide...



    Si je fais
    <br />
    doc = [[NSXMLDocument alloc]initWithContentsOfURL:[response URL]<br />
    									 options:0<br />
    									   error:&amp;error];<br />
    à  la place de "initWithData", cela marche si j'appelle une page qui ne s'occupe que de XML.



    Par contre, je dois employer des fonctions qui renvoient des booléens, et évidemment, ces booléens font partie de la réponse apparemment. Ils s'affichent lorsque je teste mon formulaire dans Safari, et la lecture du XML ne marche donc plus. Bon, on n'est plus très loin...



    Merci AliGator et Alak de m'avoir aiguillé en tous les cas.
  • Merci encore une fois Alak et AliGator, un bon vieux NSString fera l'affaire... Je n'avais pas compris en fait en quoi devait consister cette réponse. Pour moi, "url" était égal à  "http://www....";
Connectez-vous ou Inscrivez-vous pour répondre.