[DRINGEND] Script zum editieren von Polls

unlord

Erfahrenes Mitglied
Das Script zum auswählen des Polls, den man editieren will, sieht so aus:

PHP:
<?php
  if(!isset($_SESSION['admin'])) {
      die("Acess denieded.");
  } else {
  echo "<h2>Poll bearbeiten</h2><br>";
  $table = 'poll';
  $ID = (isset($ID)) ? abs((int)$ID) : 0;
  $limit = 6;
  $resultID = mysql_query("SELECT COUNT(ID) FROM ".$table);
  $total = mysql_result($resultID,0);
  $ID = ($ID >= $total) ? $total - $limit : $ID;
  $query = "SELECT ID,Frage FROM ".$table." ORDER BY ID DESC LIMIT ".$ID.",".$limit;
  $resultID = mysql_query($query);
  while ($data = mysql_fetch_array($resultID)) {
         echo "<font color=\"blue\">ID-Nummer: </font>";
         echo "<font color=\"red\"><b>";
         echo $data['ID'];
         echo "</b></font><br>";
         echo "<font color=\"blue\">Frage: </font>";
         echo "<font color=\"FF000\"><b>";
         echo $data['Frage'];
         echo "</b></font><br><hr>";
  }
  if($ID > 0) {
     $newID = ($ID - $limit < 0) ? 0 : ($ID-$limit);
     echo "<a href=".$_SERVER['PHP_SELF']."?section=admin&action=intern&acp_action=edit_poll&ID=".$newID.">&lt;&lt; zurück</a>&nbsp;&nbsp;";
  }
  if($ID + $limit < $total) {
     $newID = $ID + $limit;
     echo " <a href=".$_SERVER['PHP_SELF']."?section=admin&action=intern&acp_action=edit_poll&ID=".$newID.">vor &gt;&gt;</a>";
  }
  echo "<br><form name=\"updID\" action=\"index.php?section=admin&action=intern&acp_action=8gr_420g348&acp_status=poll_upd_selected\" method=\"POST\">";
  echo "<br>Bitte wählen sie die ID-Nummer des Polls aus, den sie bearbeiten wollen: <br>";
  echo "<input type=\"text\" name=\"upd_id\" size=\"4\"><br><br>";
  echo "<font face=\"Verdana\" size=\"2\"><a href=\"index.php?section=admin&action=intern&acp_action=8gr_420g348&acp_status=poll_upd_selected\" onclick=\"window.document.forms['updID'].submit(); return false;\" style=\"text-decoration: none\"><font color=\"black\">Bearbeiten</font></a><br>";
  echo "</form>";
  }
?>

...hier ist glaube ich noch alles richtig... nun das Script zum angeben der neuen Antworten:

PHP:
<?php
  if(!isset($_SESSION['admin'])) {
      die("Acess denieded.");
  } else {
    echo "<h2>News bearbeiten</h2><br>";
    if(!isset($_POST['upd_id'])) {
        die("Acess not allowed. Please use our formular.");
    }
    if(trim($_POST['upd_id']) == "") {
     die("Bitte geben sie eine ID-Nummer an.");
    }
    if(isset($_POST['upd_id'])) {
       $ID = $_POST['upd_id'];
       global $ID;
       echo "<form name=\"updPoll\" action=\"index.php?section=admin&action=intern&acp_action=8gr_420g348&acp_status=poll_updated\" method=\"POST\">";
       $sql = "SELECT
                   Frage,
                   Datum
             FROM
                   poll
             WHERE
                   ID = '$ID'";
     $exists = mysql_query($sql) OR die(mysql_error());
     while($data = mysql_fetch_array($exists)) {
           $Frage = $data['Frage'];
           echo "Frage: <input type=\"text\" name=\"updFrage\" size=\"30\" value=\"$Frage\"><br><br>";
     }
     $sqltwo = mysql_query("SELECT
                   Antwort,
                   Klicks
             FROM
                   poll_antworten
             WHERE
                   PollID = '$ID'");
     $sum = mysql_query("SELECT COUNT(Antwort) AS Antwort FROM poll_antworten WHERE ID = '".$ID."'");
     $curr_a = mysql_query("SELECT Antwort FROM poll_antworten WHERE PollID = '".$ID."'");
     $get_sum = mysql_fetch_array($sum);
     $a_sum = $get_sum['Antwort'];
     $an = array();
     $aID = 1;
     while($row = mysql_fetch_array($curr_a)) {
                 $value = $row['Antwort'];
                 echo "Antwort ".$aID.": <input type=\"text\" name=\"an[$a_sum]\" value=\"$value\" size=\"40\"><br>";
                 $aID++;
                 $a_sum++;
     }
     $sum = mysql_query("SELECT COUNT(Antwort) AS Antwort FROM poll_antworten WHERE ID = '".$ID."'");
     $get_sum = mysql_fetch_array($sum);
     $a_sum = $get_sum['Antwort'];
     echo "<input type=\"hidden\" name=\"a_sum\" value=\"$a_sum\">";
     echo "<input type=\"hidden\" name=\"selectedID\" value=\"$ID\"><br><br>";
     echo "<font face=\"Verdana\" size=\"2\"><a href=\"index.php?section=admin&action=intern&acp_action=8gr_420g348&acp_status=poll_updated\" onclick=\"window.document.forms['updPoll'].submit(); return false;\" style=\"text-decoration: none\"><font color=\"black\">Ändern</font></a><br></form>";
     }
  }
?>

...soweit ist mein Script glaube ich ohne Fehler, aber der folgende Teil, welcher den Poll dann verändern soll, funktioniert nicht:

PHP:
<?php
  if(!isset($_SESSION['admin'])) {
      die("Acess denieded.");
  }

  $sum = $_POST["a_sum"];
  $ID = $_POST["selectedID"];
  $frage = $_POST["updFrage"];
  $an = $_POST["an"];
  while($sum > 0) {
          while($sum > 0) {
                $sql = "UPDATE
                              poll_antworten
                        SET
                              Antwort = '".$an[$sum]."'
                        WHERE
                              PollID = '".$ID."'";
                mysql_query($sql) OR die(mysql_error());
          }
  $sum--;
  }
  $asql = "UPDATE
                 poll
           SET
                 Frage = '".$frage."'
           WHERE
                 ID = '".$ID."'";
  mysql_query($asql) OR die(mysql_error());
  echo "Poll erfolgreich geändert."
?>

.... hab ewig dran rumprobiert, aber es will einfach nicht -.-

Wenn es Fragen gibt unbedingt melden
Im Anhang gibts übrigens nochmal die drei Dateien.

Hoffe ihr könnt mir helfen....

mfg
unlord

P.S.: Hier noch kurz eine Erklärung zum Aufbau meiner mySQL-DB:

Tabelle: poll
Spalten: ID(prim_key, auto_incr, INT), Frage(VARCHAR), Datum(DATE)

Tabelle: poll_antworten
Spalten: ID(prim_key,auto_incr,INT), PollID(hiermit werden die Antworten einem Poll zugeordnet... also PollID == ID von der Tabelle poll), Antwort(VARCHAR, es kann beliebig viele antworten geben, da dann die PollID einfach wiederholt wird), Klicks(die Anzahl der Klicks für die jeweilige Antwort)
 

Anhänge

Zuletzt bearbeitet:
Ich würde mal versuchen bei den POST-Variablen nur einfache Anführungszeichen (') zu verwenden...Ansonsten musst du mir mal sagen was es für einen Fehler gibt? Das es nicht funktioniert hilf meistens nicht so besonders viel...Und stressen musst du auch nicht so ;-)
 
Hehe ok...

nur leider kommt gar kein Fehler :p ... die Erfolgsmeldung
PHP:
  echo "Poll erfolgreich geändert."
wird ausgegeben und mehr nicht...

die Frage wird auch verändert, nur eben die Antworten nicht
und welche POST-Vars. meinst du? Die im mysql-query oder wo?

mfg
unlord
 
hm...Überlegungsfehler...

$sum muss kleiner sein als 0...Er kommt gar nicht in die while-Schlaufe zum ändern der Antworten rein...Somit ändert er es auch nicht...Würde er in die Schlaufe reinkommen würde es die Erfolgsmeldung nicht anzeigen, da es eine Enlosschleife ist --> ist $sum grösser bleibt er IMMER in der Schlaufe, da du den Wert nie verändert. Also ich meine in der 2. Schlaufe...

OK? :-)
 
PHP:
<?
  while($sum > 0) {
          while($sum > 0) {
                $sql = "UPDATE
                              poll_antworten
                        SET
                              Antwort = '".$an[$sum]."'
                        WHERE
                              PollID = '".$ID."'";
                mysql_query($sql) OR die(mysql_error());
          }
  $sum--;
  } 
?>

Für mich ergibt das nicht wirklich Sinn ...
Warum nicht so:
PHP:
<?
for($i=$sum;$i>0;$i--) {
                $sql = "UPDATE
                              poll_antworten
                        SET
                              Antwort = '$an[$i]'
                        WHERE
                              PollID = '$ID' ";
                mysql_query($sql) OR die(mysql_error());
}
?>
 
Keine der beiden Vorschläge funktionieren -.- ....

aber eine Endlosschleife hab ich bei der While-Schleife nie, es lädt immer fertig..
und auch mit der For-Schleife wird die Frage geupdatet, jedoch nicht die Antworten und es kommt auch keine Fehler- sondern nur die Fertigmeldung

plz help :(

mfg
unlord

P.S.: was ist das Gegenteil von DESC?
 
Es wird nicht geupdatet WEIL du NICHT in die While-Schlaufe kommst, weil $sum <= 0 ist....

Und es ist KEINE Endlosschleife WEIL du gar nicht hineinkommst WEIL $sum <= 0 ist, wäre $sum > 0 dann WÜRDE es auch updaten, jedoch WÄRE es dann eine Endlosschlaufe...

Verstanden?
 
Das ergibt KEINE Endlosschleife (warum auch immer O.O):

PHP:
  while($sum > 0) {
                $sql = "UPDATE
                              poll_antworten
                        SET
                              Antwort = '$an[$sum]'
                        WHERE
                              PollID = '$ID' ";
                mysql_query($sql) OR die(mysql_error());
        $sum--;
  }

... heißt das nicht, dass die Schleife ausgeführt wird, bis $sum größer als 0 ist?
Wenn ja würde es ja hier eine Endlosschleife geben, wie aquasonic es gesagt hat, aber das passiert nicht

@_voodoo

deine Version mit der For-Schleife funktioniert leider auch nicht :(

mfg
unlord

P.S.: was mich wundert ist, dass nie ein Fehler oder eine Endlosschleife kommt, egal ob ich das < durch > vertausche oder andersrum, auch bei der For-Schleife! Vielleicht liegt der Fehler ja doch in einem anderen Teil des Scriptes
 
Zuletzt bearbeitet:
Nein, bis $sum kleiner als 0 ist wird es gemacht...Und die Endlosschleife ist auch nicht die...Du hast ja da 2 ineinanderverschatelt:

PHP:
while($sum > 0) { 
          while($sum > 0) { 
                $sql = "UPDATE 
                              poll_antworten 
                        SET 
                              Antwort = '".$an[$sum]."' 
                        WHERE 
                              PollID = '".$ID."'"; 
                mysql_query($sql) OR die(mysql_error()); 
          } 
  $sum--; 
  }
Die innere ist eine Endlosschleife...Hast du schonmal was von Debuggen gehört? Gib doch mal irgendetwas aus in der While-Schleife...Wenn das dann das ausgibt dann kommt er in die Schleife aus, dann versuchst du mal im PHPMyAdmin das SQL-Statement auszuführen...

Wenn es das nicht ausgibst dann kommt er gar nicht in die While-Schleife, dann gib mal $sum vor der Schlaufe aus und prüfe dann mal ob das richtig ist...Und sonst stimmt dein Ausdruck für die Schleife nicht...

Schritt für Schritt-Fehlersuche...Du findest nicht immer einen Fehler und weisst was du ändern musst nur wenn du den Code anschaust...Aber ich behaupte mal das $sum schon zu Beginn 0 ist oder das $sum leer ist was auch immer...
 
Zurück