3 Einträge! ... 2 Zuviel..

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 3 Einträge! ... 2 Zuviel..

    Hallo,

    ich habe ein kleines Problem.
    Vorab: Alle Variablen etc werden ordnungsgemäß übermittelt. Angenommen $keyarray['payment_status'] == "Completed"...
    in diesem Falle sollte das Skript unten 1 mal in die Datenbank schreiben. Komischerweise erstellt das Skript 3 Einträge, wobei bei den letzten beiden Einträgen die "Authid" leer bleibt. Also nur der erste Datensatz der 3 eingetragenen ist vollständig.

    Woran kann es liegen das er 3 Einträge erstellt?


    PHP-Code:
    include 'inc/dbinc.php';
    include 
    'inc/message.php';

    //print_r($HTTP_POST_VARS);
    //echo "Get";
    //print_r($HTTP_GET_VARS);
    // read the post from PayPal system and add 'cmd'
    $req 'cmd=_notify-synch';

    $tx_token $_GET['tx'];
    $auth_token "D8uFNAmFhdfhdfghzxn1vjdO";
    $req .= "&tx=$tx_token&at=$auth_token";

    // post back to PayPal system to validate
    $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " strlen($req) . "\r\n\r\n";
    $fp fsockopen ('www.paypal.com'80$errno$errstr30);
    // If possible, securely post back to paypal using HTTPS
    // Your PHP server will need to be SSL enabled
    // $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

    if (!$fp) {
    // HTTP ERROR
    } else {
    fputs ($fp$header $req);
    // read the body data
    $res '';
    $headerdone false;
    while (!
    feof($fp)) {
    $line fgets ($fp1024);
    if (
    strcmp($line"\r\n") == 0) {
    // read the header
    $headerdone true;
    }
    else if (
    $headerdone)
    {
    // header has been read. now read the contents
    $res .= $line;
    }
    }

    // parse the data
    $lines explode("\n"$res);
    $keyarray = array();
    if (
    strcmp ($lines[0], "SUCCESS") == 0) {
    for (
    $i=1$i<count($lines);$i++){
    list(
    $key,$val) = explode("="$lines[$i]);
    $keyarray[urldecode($key)] = urldecode($val);
    }

    if(
    $keyarray['payment_status'] == "Completed")
    {
        
    // Zahlung OK: Was wurde gekauft?
        
    if($keyarray['item_number'] == "sms_pack_1")
        {
        
    $addcreds "1";
        }
            
    $sql_addcreds "UPDATE mx_users SET creds = creds+'$addcreds' WHERE userID = '$authid';";
            
    $raw =  mysql_query($sql_addcreds) OR die(mysql_error());
            
    $value $addcreds;
            echo 
    $gutgeschrieben;
    }

    if(
    $keyarray['payment_status'] == "Failed")
    {
            
    $tx_id $keyarray['txn_id'];
            
    $tx_item $keyarray['item_number'];
            
    $status $keyarray['payment_status'];
            
    $sql_insert_failed "INSERT INTO `mx_transaction` 
            ( `id` , `tx_id` , `pack`, `status`, `user` )
            VALUES (
            '', 
            '
    $tx_id', 
            '
    $tx_item',
            '
    $status',
            '
    $authid'
            );"
    ;
            
    $raw =  mysql_query($sql_insert_failed) OR die(mysql_error());
            echo 
    $txfehler;
    }

    if(
    $keyarray['payment_status'] == "Pending")
    {
            
    $tx_id $keyarray['txn_id'];
            
    $tx_item $keyarray['item_number'];
            
    $status $keyarray['payment_status'];
            
    $sql_insert_pending "INSERT INTO `mx_transaction` 
            ( `id` , `tx_id` , `pack`, `status`, `user` )
            VALUES (
            '', 
            '
    $tx_id', 
            '
    $tx_item',
            '
    $status',
            '
    $authid'
            );"
    ;
            
    $raw mysql_query($sql_insert_pending) OR die(mysql_error());
            echo 
    $txpending;

    }

    }
    else if (
    strcmp ($lines[0], "FAIL") == 0) {
    echo 
    "FAIL";
    // log for manual investigation
    }

    }

    fclose ($fp); 
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

  • #2
    du hast echo $gutgeschrieben; in dem If-Block. Wieviel Mal bekommst du die Ausgabe?
    Woher kommt $authid?

    btw: du willst hier: creds = creds+'$addcreds' bestimmt Zahlen addieren?

    Kommentar


    • #3
      Hi, danke für die Antwort.

      1. Also "echo $gutgeschrieben;" bekomme ich ordnungsgemäß 1 mal ausgegeben.

      2. $authid wird beim einloggen als Sessionvariable gespeichert. Und steht auch ordnungsgemäß im ersten Datensatz an der richtigen stelle.

      3. Ja, will zahlen addieren. Der Case "Completed" war bis jetzt nur noch nicht eingetreten, dementsprechend hab ich da auch noch nix getestet etc.. Danke für den Tip ... *änder*


      ->Ergo:
      Ich versteh nicht warum er 3 Einträge generiert...
      The Human Mirror - Mein Blog!
      www.sonicsense.de - The future of music!

      Kommentar


      • #4
        du meinst, daß die INSERT in den anderen IF auch durchgeführt werden oder wie hast du denn festgestellt, daß 3 mal was eingefügt/aktualisiert wurde? Bekommst du denn die echo in den anderen If-Blöcke?

        Kommentar


        • #5
          Ich bekomme einmal das Korrekte Echo. Und auch nur das. Ich habe, nachdem das Skript abgeschlossen wurde, selbst wenn ich ein Exit einbaue..

          PHP-Code:
          if($keyarray['payment_status'] == "Pending")
          {
                  
          $tx_id $keyarray['txn_id'];
                  
          $tx_item $keyarray['item_number'];
                  
          $status $keyarray['payment_status'];
                  
          $sql_insert_pending "INSERT INTO `mx_transaction` 
                  ( `id` , `tx_id` , `pack`, `status`, `user` )
                  VALUES (
                  '', 
                  '
          $tx_id', 
                  '
          $tx_item',
                  '
          $status',
                  '
          $authid'
                  );"
          ;
                  
          $raw mysql_query($sql_insert_pending) OR die(mysql_error());
                  echo 
          $txpending;
                  exit;

          In der Datenbank 3 Einträge stehen. Dies prüf ich indem ich im PHPmyadmin nachsehe.
          The Human Mirror - Mein Blog!
          www.sonicsense.de - The future of music!

          Kommentar


          • #6
            Ich hab mir nun erstmal so geholfen das ich das Feld tx_id auf unique gesetzt habe. Nur irgendwie erklärt das nicht warum er 3 mal eingetragen hat....
            The Human Mirror - Mein Blog!
            www.sonicsense.de - The future of music!

            Kommentar

            Lädt...
            X