Script funktioniert sporadisch nicht

Alles, was PHP betrifft, kann hier besprochen werden.

Script funktioniert sporadisch nicht

Postby Poison of the Cursed » 17. July 2010 07:15

Hallo Zusammen,

ich habe zu meinem Problem schon gegoogelt (allerdings nicht so ausführlich wie sonst, bin heute morgen etwas faul :roll: ), habe aber zu meinem Problem nichts konkretes gefunden. Bei den meisten Threads in diversen Foren funktionieren die Scripts komplett nicht. Ich habe das Problem, dass zwei meiner Scripte nur sporadisch(?) nicht funktionieren und dann auch nur eine bestimmte Stelle nicht so wollen, wie der Nutzer.

Meine Seite ist nun endlich online. Obwohl ich alles lokal getestet habe, sind natürlich Fehler zu finden. Ich beseitige also gerade die Kinderkrankheiten. Nun ist folgender Fehler aufgefallen (natürlich wieder die Schokofrösche!), bei dem ich nichts finden kann, was ich ändern könnte.

Hier der obere Teil des Scripts verwalten.php, der dafür zuständig ist, die Schokofroschkarten aus einer bestimmten Tabellenspalten zu löschen und in eine andere reinzuschreiben:

Code: Select all
<?php
error_reporting(E_ALL);

include("../connect.php");

if(!$verbindung OR !mysql_select_db("homepage"))
{
echo "Die Seite konnte leider nicht korrekt aufgebaut werden. Sollte dieser Fehler nochmals auftreten, sende
mir bitte eine E-Mail:
<br>
<br><a href=\"mailto:mail@potionmaster.de\">mail@potionmaster.de</a>";
}
else
{

//Karten neu
if(empty($_POST["gesendet1"]))
{
$_POST["status1"] = "";
}
else
{

if($_POST["status1"] == "behalten")
{
$eintrag = "INSERT INTO froesche (benutzername, bfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["neu"]) . "')";
$eintragen = mysql_query($eintrag);
}
else if($_POST["status1"] == "tauschen")
{
$eintrag = "INSERT INTO froesche (benutzername, tfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["neu"]) . "')";
$eintragen = mysql_query($eintrag);
}
else if($_POST["status1"] == "sammeln")
{
$eintrag = "INSERT INTO froesche (benutzername, sfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["neu"]) . "')";
$eintragen = mysql_query($eintrag);
}

$loeschen = "DELETE FROM froesche WHERE neu='" . mysql_real_escape_string($_POST["neu"]) . "' AND benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "' LIMIT 1";
$loesch = mysql_query($loeschen);

}


//Karten behalten
if(empty($_POST["gesendet2"]))
{
$_POST["status2"] = "";
}
else
{

if($_POST["status2"] == "tauschen")
{
$eintrag = "INSERT INTO froesche (benutzername, tfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["behalten"]) . "')";
$eintragen = mysql_query($eintrag);
}
else if($_POST["status2"] == "sammeln")
{
$eintrag = "INSERT INTO froesche (benutzername, sfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["behalten"]) . "')";
$eintragen = mysql_query($eintrag);
}

$loeschen = "DELETE FROM froesche WHERE bfrosch='" . mysql_real_escape_string($_POST["behalten"]) . "' AND benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "' LIMIT 1";
$loesch = mysql_query($loeschen);

}


//Karten tauschen
if(empty($_POST["gesendet3"]))
{
$_POST["status3"] = "";
}
else
{

if($_POST["status3"] == "behalten")
{
$eintrag = "INSERT INTO froesche (benutzername, bfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["tauschen"]) . "')";
$eintragen = mysql_query($eintrag);
}
else if($_POST["status3"] == "sammeln")
{
$eintrag = "INSERT INTO froesche (benutzername, sfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["tauschen"]) . "')";
$eintragen = mysql_query($eintrag);
}

$loeschen = "DELETE FROM froesche WHERE tfrosch='" . mysql_real_escape_string($_POST["tauschen"]) . "' AND benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "' LIMIT 1";
$loesch = mysql_query($loeschen);

}


//Karten sammeln
if(empty($_POST["gesendet4"]))
{
$_POST["status4"] = "";
}
else
{

if($_POST["status4"] == "behalten")
{
$eintrag = "INSERT INTO froesche (benutzername, bfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["sammeln"]) . "')";
$eintragen = mysql_query($eintrag);
}
else if($_POST["status4"] == "tauschen")
{
$eintrag = "INSERT INTO froesche (benutzername, tfrosch)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($_POST["sammeln"]) . "')";
$eintragen = mysql_query($eintrag);
}

$loeschen = "DELETE FROM froesche WHERE sfrosch='" . mysql_real_escape_string($_POST["sammeln"]) . "' AND benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "' LIMIT 1";
$loesch = mysql_query($loeschen);

}

$abfrage = "SELECT * FROM froesche WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'
ORDER BY neu, bfrosch, tfrosch, sfrosch, rfrosch, mfrosch";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$neu[] = $row->neu;
$behalten[] = $row->bfrosch;
$tauschen[] = $row->tfrosch;
$sammeln[] = $row->sfrosch;
$reserviert[] = $row->rfrosch;
$master[] = $row->mfrosch;
}
}
mysql_close($verbindung);
?>


Darunter erfolgt die Ausgabe der Bilder und der Formulare mit denen man bestimmen kann, wohin die Schokofroschkarten verschoben werden sollen.

Beispiel:

Code: Select all
<h3>Karten behalten</h3>

<?php
if(empty($behalten) == true)
{
echo "Du hast momentan keine Karten zum Behalten.";
}
else
{

$behalten1 = array_values(array_diff($behalten, array('')));

if(empty($behalten1) == true)
{
echo "Du hast momentan keine Karten zum Behalten.";
}
else
{

foreach ($behalten1 as $ausgabe2)
{
echo '<img src="../schokofroesche/karten/'.htmlspecialchars($ausgabe2).'.jpg" alt="">&nbsp;';
}

}
}
?>

<form action="verwalten.php" method="POST">
<p>
<select name="behalten" size="1">

<?php
foreach ($behalten1 as $auswahl2)
{
echo "<option value=$auswahl2>$auswahl2</option>";
}
?>

</select>
<select name="status2" size="1">
<option value="sammeln">sammeln</option>
<option value="tauschen">tauschen</option></select>
<input type="submit" value="OK">
<input type="hidden" name="gesendet2" value="1">
</p>
</form>


Den gleichen Code verwende ich auf der Seite verwaltenklassik.php.
Also, alle Karten landen erst einmal in der Tabelle froesche in der Spalte neu. Von dort aus kann sie der Benutzer in die Kategorie verschieben, in der er die Karten haben möchte. Die Karten können auf Behalten, Tauschen oder Sammeln gesetzt werden. Verschieben kann man aber nicht nur aus der Kategorie neu. Ihr seht ja im Script, es gibt diese Möglichkeiten:

NEU - verschieben nach behalten, tauschen, sammeln
BEHALTEN - verschieben nach tauschen, sammeln
TAUSCHEN - verschieben nach behalten, sammeln
SAMMELN - verschieben nach behalten, tauschen


So, nach dem ganzen gesabbel, nun der Fehler.
Meine Kollegin hat sich bereit erklärt das Versuchskaninchen zu machen und die Homepage zu testen. Genau wie ich lokal hat sie nun die Karten hin und her geschoben. Von Neu nach Tauschen, weiter auf Behalten, wieder auf Tauschen und schließlich auf Sammeln. Alles in Ordnung. Dann wollte sie die Karte von Sammeln zurück nach Behalten schieben und:

Die Karte wurde auch in die Tabelle unter Behalten (bfrosch) eingetragen, aus Sammeln (sfrosch) aber nicht gelöscht. Die Karte hat sie nun also doppelt. Daraufhin habe ich mein Script nochmals eingehend geprüft. Die Einträge zu INSERT und DELETE sehen meiner Meinung nach, vom Aufbau alle gleich aus und die Spalten sind auch richtig eingetragen. Deshalb ist es für mich nicht nachvollziehbar, warum das Verschieben zwischen den Kategorien Neu, Behalten und Tauschen korrekt funktioniert, bei der Kategorie Sammeln aber ein Fehler auftaucht.

Nun noch das beste zum Schluß. Ich habe das Script natürlich nochmal getestet und eine Karte zig mal von einer Kategorie in die nächste sowie wieder zurück geschoben.
Ergebnis: lokal - es funktioniert alles, online - es funktioniert alles. Ich habe es sogar auf Firefox und Internet Explorer getestet, weil wir im Büro (wo es meine Kollegin probiert hat) den Internet Explorer haben und ich IE allgemein verdächtigt habe, mein Script nicht zu mögen.
Ich weiß nicht mehr weiter. Das einzige, was ich mir vorstellen könnte wäre, dass es an dem IE im Büro liegt. Wir haben auf den Rechnern noch die Version 6 drauf, total veraltet. Zuhause habe ich Firefox 3.6 und IE 8. Auf dem T-Online Server läuft die PHP Version 5 und mein SQL ist ebenfalls 5.

Kann es sein, dass es daran liegt? Oder ist es doch mein Script? Könnte es auch an dem else-if liegen?
Hat jemand von euch noch eine Idee?

Wäre echt dankbar. Ist zwar ein Fehler, der den Usern Vorteile bringt, aber es nervt mich, wenn es nicht richtig läuft.

Liebe Grüße
Poison
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Return to PHP

Who is online

Users browsing this forum: No registered users and 19 guests