[PHP] Formular-Schwierigkeiten

vogti

Cadet 2nd Year
Registriert
Feb. 2008
Beiträge
23
Hallo C-Baseler :)

Ich spiele zur Zeit ein bisschen mit PHP rum. Meine Kenntnisse sind bisher zwar äußerst rudimentär, aber ich hab halt spaß am rumprobieren :)
Es ist jetzt auch nicht lebenswichtig, dass ich das Problem hier gelöst bekomme. Aber ich möcht zummindest wissen, was ich falsch mache... Ich habe im Internet ein Script gefunden, welches einem ermöglicht, direkt zu Twitter zu posten (hier das Script: klick).
Nun hatte ich die Idee, das Script-Stück in ein Formular einzufügen, welches die nötigen Daten abfragt, per POST ans Script schickt und dieses dann direkt absendet. Aber irgendwie funktioniert das nicht so, wie ich mir das denke...

Hier der Formular-Teil:
Code:
post_twitter1.php


<html>
<head>
<title>Twitter posting vom feinsten;)</title>
</head>
<body>
<form name="post_twitter" action="post_twitter2.php" method="post" enctype="multipart/form-data">
  <strong>Username: </strong><input type="text" name="username" size="80"><br />
  <strong>Password: </strong><input type="text" name="password" size="80"><br />
  <strong>Message: </strong><textarea name="message" rows="4" cols="40"></textarea>
  <input type="submit" value="Submit">
</form>
</body>
</html>

und das Script:
Code:
post_twitter2.php


<?php
    $username=$_POST[username];
    $password=$_POST[password];
    $message=$_POST[message];

    $host = "http://twitter.com/statuses/update.xml?status=".urlencode(stripslashes(urldecode($message)));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $host);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_POST, 1);

 
    $result = curl_exec($ch);

    $resultArray = curl_getinfo($ch);


    curl_close($ch);

    //echo "http code: ".$resultArray['http_code']."<br />";

    if($resultArray['http_code'] == "200"){
        echo "<br />OK! posted to http://twitter.com/".$username."/<br />";
    } else {
        echo "eek! yegads! error posting to Twitter";
    }

     #debug the result
     echo "<pre>";
     print_r($resultArray);
     echo "</pre><hr>";

     $sResult = htmlentities($result);
     $sResult = str_replace("&gt;&lt;","&gt;<br />&lt;",$sResult);

     echo "<pre>";
     print $sResult;
     echo "</pre>";
?>
Beim Script hab ich allerdings nicht viel geändert, außer die Funktion aufgelöst und die Variablen ersetzt... Ich denke, dass mir dabei irgendwie ein Fehler unterlaufen ist. Kann das so überhaupt funktionieren? Und wenn ja, warum tuts das nicht?

Hoffe ihr könnt mir helfen?

lg,
vogti
 
Hallo,

Hier ein paar vorschläge:
1.
HTML:
<form name="post_twitter" action="post_twitter2.php" method="post">
anstatt
HTML:
<form name="post_twitter" action="post_twitter2.php" method="post" enctype="multipart/form-data">

enctype="multipart/form-data" wird imho zum Fileupload verwendet...

2.
PHP:
$username=$_POST['username'];
    $password=$_POST['password'];
    $message=$_POST['message'];
anstatt
PHP:
$username=$_POST[username];
    $password=$_POST[password];
    $message=$_POST[message];

oder lass dir einfach mal mit print_r das $_POST-Array ausgeben, wenn das alles korrekt ausgibt, kannst du obiges vergessen... Ich machs nur immer so wies oben steht, versuchs mal, vielleicht änderts ja was...
Ansonsten gehst du einfach alles der reihe nach durch und gibst mit echo alles aus, dann siehst du den fehler eventuell auch leichter...

mfg
mitos
 
Zuletzt bearbeitet:
Achherje...

Habe es genau so gemacht wie du gesagt hast. Die Login-Daten wurden richtig ans PHP-Script übermittelt - daran konnte es also nicht liegen. Also habe ich mich mit diesen cURL dingern genauer auseinander gesetzt. Dabei habe ich erfahren, dass wenn alles erfolgreich über cURL übermittelt wird und ich curl_exec($ch); ausgebe TRUE zurück kommt (klick. Naja - als ich das ausgegeben habe kam nur die Fehlermeldung: "Could not authenticate you.". Na klasse dacht ich. Nach ewigem hin und her probieren und Parameter vertauschen ist es mir wie Schuppen von den Augen gefallen: ich hab einfach immer falsche Login Daten (falschen usernamen...) benutzt :D - Ganz klar, dass da die Fehlermeldung kommt.
Also so funktionierts richtig:
PHP:
<?php

    $username=$_POST['username'];
    $password=$_POST['password'];
    $message=$_POST['message'];

    $host = "http://twitter.com/statuses/update.xml?status=".urlencode(stripslashes(urldecode($message)));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $host);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_NONE);
    curl_setopt($ch, CURLOPT_POST, 1);
 
    $result = curl_exec($ch);
    $resultArray = curl_getinfo($ch);

    curl_close($ch);

    echo "http code: ".$resultArray['http_code']."<br />";

    if($resultArray['http_code'] == "200"){
        echo "<br />OK! posted to http://twitter.com/".$username."/<br />";
    } else {
        echo "eek! yegads! error posting to Twitter";
    }

/*   #debug the result
     echo "<pre>";
     print_r($resultArray);
     echo "</pre><hr>";
*/
     $sResult = htmlentities($result);
     $sResult = str_replace("&gt;&lt;","&gt;<br />&lt;",$sResult);
/*
     echo "<pre>";
     print $sResult;
     echo "</pre>";
*/
?>

Tja naja. Auch wenn der Fehler kein Fehler war. Ein gutes hats: Ich verstehe das Script jetzt vollkommen und kenn es in und auswendig ;) Und print_r(); ist ein Segen - danke dafür :)

lg,
vogti

Edit: Jetzt habe ich nur noch die Frage, ob dazu wirklich 2 Dateien notwendig sind, oder ich auch irgendwie beides in eine Datei verpacken kann? Wenn ja, wie?
 
Zuletzt bearbeitet:
mit
PHP:
echo '<form name="post_twitter" action="'.$_SERVER['PHP_SELF'].'" method="post" >';
 
PHP:
action="<?php $_SERVER['PHP_SELF']; ?>"
War genau das, was ich gesucht hab, danke :)
 
Zurück
Oben