Form problem bei checked

crashx

Erfahrenes Mitglied
Ich kann das Problem selbst nicht richtig einordnen, ob HTML, PHP oder anderes es verursacht.
Deshalb, stelle ich es mal hier ein und ein Mod kann es dann auch verschieben.

Problem:
Sind innerhalb eines <form> Elementes ein Submitbutton und eine Checkbox welche "selected" ist, kommt der inhalt des Submitbuttons nicht mehr an.
Ist die Checkbox nicht "selected" kann sie gewählt werden und auch der Submitbutton führt seine Funktion aus.

Code:
PHP:
$sql = "SELECT * FROM `cms`.`hersteller`";
$result = mysql_query($sql);
echo '<div class="content">';
while($row = mysql_fetch_array($result)){
  echo '<form action="'.$_SERVER['PHP_SELF'].'?cat='.$_GET['cat'].'&amp;section='.$_GET['section'].'&amp;action='.$_GET['action'].'" method="post">';
    echo '<div class="content-1">&nbsp;</div>';
    echo '<div class="content-2">'.$row['name'].'</div>';
    echo '<div class="content-3">';
      echo '<input type="hidden" name="target" value="'.$row['h_id'].'">';
      echo '<input type="submit" name="delete" value="" class="submit-delete">&nbsp;';
      echo '<input type="checkbox" name="default" value="'.$row['h_id'].'" onChange="submit()" ';
      if($row['default'] == '1'){
        echo 'checked';
      }
      echo '>';
    echo '</div>';
  echo '</form>';
}

Verarbeitet wird das ganze wie folgt auf der gleichen Seite.
Code: Submitbutton
PHP:
if(isset($_POST['delete'])){
  if(isset($_POST['target'])){
    header('Location: ./cms-einstellungen_delete.php?cat='.$_GET['cat'].'&section='.$_GET['section'].'&action='.$_GET['action'].'&h_id='.$_POST['target']);
  }
}

Code: Checkbox verarbeitung
PHP:
if(isset($_POST['default'])){
  $sql = "UPDATE `cms`.`hersteller`
          SET
          `default` = '0'
         ";
  $result = mysql_query($sql);
  
  $sql1 = "UPDATE `cms`.`hersteller`
           SET
           `default` = '1'
           WHERE `h_id` = '".mysql_real_escape_string($_POST['default'])."'
           LIMIT 1
          ";
  $result1 = mysql_query($sql1);
  header('Location: ./cms-einstellungen_shop.php?cat='.$_GET['cat'].'&section='.$_GET['section'].'&action='.$_GET['action']);
}

Wieso führt der Submitbutton "delete" die Aktion nicht aus wenn Checkbox "selected" ist?

Danke für eure Antwort.
 
Also ich habe das oben mal in eine Datei zusammenkopiert und in die IF-Blöcke jeweils eine kurzes echo geschrieben.
Dann diese Seite durch Anklicken des Buttons oder durch markieren einer der Checkboxen abgeschickt.

Es wurden bei mir alle echo Anweisungen angezeigt!?

Bei dir gibt es aber in jedem IF-Block eine header:Location und dadurch wird nur einer der Blöcke abgearbeitet und dann umgeleitet.
 
Zuletzt bearbeitet:
Hallo,

mir fällt so spontan auf ->

Deine If Blöcke sind wahrscheinlich auch so gestellt wie in deinem Thread.

Es kommt bei beiden Varianten ( via submitbutton und via checkbox ) bei beiden Bedingungen true raus.

Eventuell solltest du noch differenzieren.
if($_POST["default"] == 1).

Viele Grüße
 
Des Rätseles Lösung liegt an einem einfachen exit;

Nach der Header angabe muss die Seite einfach unterbrochen werden. Ohne exit; läuft sie weiter und führt den anderen Header Befehl aus.

Lösung:
PHP:
if(isset($_POST['delete'])){
  if(isset($_POST['target'])){
    header('Location: ./cms-einstellungen_delete.php?cat='.$_GET['cat'].'&section='.$_GET['section'].'&action='.$_GET['action'].'&h_id='.$_POST['target']);
    exit;
  }
}
if(isset($_POST['add'])){
  if(isset($_POST['hersteller'])){
    $sql = "INSERT INTO `cms`.`hersteller`
            SET
            `h_id` = '".mysql_real_escape_string(time())."',
            `name` = '".mysql_real_escape_string($_POST['hersteller'])."'
           ";
    $result = mysql_query($sql);
    header('Location: ./cms-einstellungen_shop.php?cat='.$_GET['cat'].'&section='.$_GET['section'].'&action='.$_GET['action']);
    exit;
  }
}
if(isset($_POST['default'])){
  $sql = "UPDATE `cms`.`hersteller`
          SET
          `default` = '0'
         ";
  $result = mysql_query($sql);
  
  $sql1 = "UPDATE `cms`.`hersteller`
           SET
           `default` = '1'
           WHERE `h_id` = '".mysql_real_escape_string($_POST['default'])."'
           LIMIT 1
          ";
  $result1 = mysql_query($sql1);
  header('Location: ./cms-einstellungen_shop.php?cat='.$_GET['cat'].'&section='.$_GET['section'].'&action='.$_GET['action']);
  exit;
}

Eigentlich haben ja all meine Header Befehle ein folgendes exit; jedoch habe ich das hier, warum auch immer, nicht mit geschrieben.....

Danke für eure Anteilnahme und dem richtigen Lösungsansatz.
 
Zurück