2012-04-07 14 views
1

Ok, also versuche ich ein einfaches Handels-Skript zu machen Ich habe versucht, das Problem seit Wochen zu finden, jetzt habe ich beschlossen, um Hilfe zu bitten. Ich wähle einige Monster aus der Datenbank aus und auch die Handelsinformationen, z. B. von wem der Handel stammt und von wem er kommt. Das Skript geht zwar in Ordnung und sagt, dass es erledigt ist, macht aber nicht die 2 Updates. Es sollte die Monster von der DB holen und dann ihre Besitzer aktualisieren. Ich habe Sitzungsbeginn und der db Verbindung am oberen Rand der Seite sein für jemand sagt, dass das Problem ist,PHP while-loop schief gelaufen

} else if ($_POST['Submit'] == 'Complete') { 

    //// This is the bit which does the update and does not work 

    $TradeID = $_POST['id']; 
    $sql12 = mysql_query("SELECT * FROM Trades WHERE ID='$TradeID'"); 
    $row12 = mysql_fetch_array($sql12) or die(mysql_error()); 

    $unserialize11 = unserialize($row12['MyPokemon']); 

    foreach ($unserialize11 as $poke222) { 
    $sql2 = mysql_query("SELECT * FROM user_pokemon WHERE id='$poke222'"); 
    while ($row2 = mysql_fetch_array($sql2)) { 
     $Update1 = mysql_query("UPDATE user_pokemon SET belongsto='".$row12['Me']."' WHERE id='".$row2['ID']."'"); 
    } 
    } 
    $unserialize12 = unserialize($row12['OtherPokemon']); 
    foreach ($unserialize12 as $poke122) { 
    $sql3 = mysql_query("SELECT * FROM user_pokemon WHERE id='$poke122'"); 
    while ($row3 = mysql_fetch_array($sql3)) { 
     $Update1 = mysql_query("UPDATE user_pokemon SET belongsto='".$row12['OtherPerson']."' WHERE id='".$row3['ID']."'"); 
    } 
    } 

    echo "You have successfully completed trade #".$TradeID."!"; 
} 
} else if ($_GET['action'] == 'delete'){ 

Ich habe gerade das Stück Code snipped, die nicht funktioniert, es ist die Monster feinen greifen aber nur Wenn ich das Update nicht mache, denke ich, dass ich vielleicht die}} am falschen Ort habe oder vielleicht zu viele ???

+3

ist dies eine Art von Stress-Tests für alte Server? Haben Sie jemals versucht, SQL ** zu lernen? Es sieht so aus, als ob du nicht einmal eine einfache 'JOIN'-Anweisung schreiben kannst. –

+0

was meinst du stresstest? – user1121083

+0

https://en.wikipedia.org/wiki/Stress_testing_(software) –

Antwort

0

Beim Bereinigen Ihrer Formatierung scheint es, dass Sie ein zusätzliches Semikolon haben, das Sie am Ende der hier vorgestellten if-Anweisung finden. In Ihrer if-Anweisung haben Sie 5 Instanzen von { und 6 Instanzen von }. Das Entfernen des letzten } kann Ihr Problem beheben.

Wenn Sie Ihren Code gut formatieren, werden Probleme bei der Fehlerbehebung in Zukunft reduziert. Ich habe viel von dem Körper dieser Codeblöcke entfernt, die Problem-Klammer zu offenbaren:

if ($_POST['Submit'] == 'Complete') { 
    /* Removed variable assignments */ 
    /* Removed foreach & while */ 
    /* Removed variable assignment */ 
    /* Removed foreach & while */ 
    /* Removed output */ 
} 
} /* This brace shouldn't be here */ 
+0

Erhalte eine weiße Seite nach dem Entfernen der zusätzlichen} – user1121083

+0

Leider konnte ich die Ursache der weißen Seite nicht diagnostizieren, ohne mehr Code zu sehen. Vielleicht könnten Sie uns eine größere Probe über http://pastebin.com/ zur Verfügung stellen? – Sampson

+0

http://pastebin.com/2ybh7kYw da gehst du – user1121083

0

Wie wissen Sie Ihren Skript Throught OK geht? Sie suchen nirgendwo nach Erfolg. Ihre Erfolgsmeldung spiegelt immer wider, wenn die Senden-Schaltfläche gedrückt wird. Vielleicht sollten Sie den Erfolg überprüfen, indem Sie die betroffenen Zeilen überprüfen. http://php.net/manual/en/function.mysql-affected-rows.php

Vielleicht muss Ihre DB-Struktur verfeinert werden. While innerhalb foreach zweimal im selben Handel ist nicht sehr effizient. Basierend auf Ihrer Beschreibung würde ich die folgenden Tabellen verwenden:

  • user: dies für selbstverständlich ist ...
  • pokemon_gen: allgemeine Informationen über verschiedene Modelle.
  • pokemon_unique: Jeder Artikel sollte eine eindeutige ID haben. Diese Tabelle enthält FK zum Besitzer (Benutzer) und zum Pokemon-Modell. Auch Informationen über das letzte Handelstag, den Zustand von Pokemon (wenn es sich um eine Buy-and-Sell-Datenbank handelt) usw. könnten hier sein (oder FK zu einer anderen, detaillierteren Tabelle).
  • trade: Daten und Informationen über eine einzigen Handel. Welches Pokemon wurde von wem zu wem und wann gehandelt? Hierfür wird FK nach pokemon_unique benötigt.

Sie sollten nur Arrays benötigen, um die einzigartigen Pokemons und ihre aktuellen und zukünftigen Besitzer zu identifizieren. (Braucht ein Handel nicht nur zwei Besitzer: den aktuellen und den neuen?). Sie aktualisieren nur den Besitzer in der pokemon_unique Tabelle und erstellen eine Zeile für die trade (eine Zeile für jeden Pokemon).

Vielleicht habe ich etwas verpasst. Hoffentlich nicht.

Verwandte Themen