Selo: Tabelle sichtbar und versteckt

Hi,
ich habe hier ein kleines Script gebastelt komme jedoch nicht weiter und brauche Hilfe.
Ich habe ein Auswahlliste mit Anzeige 1 und Anzeige 2. Wenn ich Anzeige 1 auswähle soll die erste Tabelle angezeigt werden und die zweite nicht mehr und bei Auswahl Anzeige 2 genau das Gegenteil.

  
<form action="#" method="post">  
<select name="waehlen" size="1">  
      <option value="Anzeige 1" selected="selected">Anzeige 1</option>  
      <option value="Anzeige 2">Anzeige 2</option>  
</select>  
<input name="submit" type="submit" value="OK">  
</form>  
  
<?php  
$ok = $_POST['submit'];  
echo $ok."<br>";  
$anzeigen = $_POST['waehlen'];  
echo $anzeigen;  
?>  
  
<table style="display:none" border=0 cellspacing=1 cellpadding=1>  
<tr>  
   <td>  
      <h2>Anzeige 1</h2>  
      <img src="1.gif" alt="Bild 2">  
   </td>  
</tr>  
</table>  
  
<table style="display:none" border=0 cellspacing=1 cellpadding=1>  
<tr>  
   <td>  
      <h2>Anzeige 2</h2>  
      <img src="2.gif" alt="Bild 2">  
   </td>  
</tr>  
</table>  
  

Ich hoffe jemand hat eine Idee und kann mir weiterhelfen.

Mit freundlichen Grüßen
Selo

  1. Hellihello

    naja,

      
      
    <?php if($_POST["waehlen"] == "Anzeige 1"):?>  
    <h2>Anzeige 1</h2>  
    <?php elseif($_POST["waehlen"] == "Anzeige 1"):?>  
    <h2>Anzeige 2</h2>  
    <?php else:>  
    <h2>something else</h2>  
    <?php endif;?>  
      
    
    

    ungetestet.

    Bei deinem Beispiel verwertest du die übermittelte Information ja garnicht.

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. <?php if($_POST["waehlen"] == "Anzeige 1"):?>
      <h2>Anzeige 1</h2>
      <?php elseif($_POST["waehlen"] == "Anzeige 1"):?>
      <h2>Anzeige 2</h2>
      <?php else:>
      <h2>something else</h2>
      <?php endif;?>

      Grauenhaft :) kannst du nicht zu etwas konventioneller Syntax greifen?

      Im übrigen würde ich hier schon zu einer Switch-Verzweigung raten.

      Aber wenigstens hast du auf short_open_tags verzichtet ;)

      1. Moin!

        »» <?php if($_POST["waehlen"] == "Anzeige 1"):?>
        »» <h2>Anzeige 1</h2>
        »» <?php elseif($_POST["waehlen"] == "Anzeige 1"):?>
        »» <h2>Anzeige 2</h2>
        »» <?php else:>
        »» <h2>something else</h2>
        »» <?php endif;?>

        Grauenhaft :) kannst du nicht zu etwas konventioneller Syntax greifen?

        Diese alternative Schreibweise ist Bestandteil der Coding-Standards im Zend-Framework für View-Skripte. Also bitte nicht zu sehr verdammen - innerhalb von Inline-HTML-Sektionen ist sie durchaus lesbarer, als die gewöhnliche Klammernvariante.

        - Sven Rautenberg

        1. Also bitte nicht zu sehr verdammen - innerhalb von Inline-HTML-Sektionen ist sie durchaus lesbarer, als die gewöhnliche Klammernvariante.

          Ist mir klar :) - ist Geschmackssache, ich hatte vergessen das Thema auf "MEINUNG" zu ändern.

          1. Hellihello

            Ist mir klar :) - ist Geschmackssache, ich hatte vergessen das Thema auf "MEINUNG" zu ändern.

            Ich würde sagen, dass das keine Geschmackssache ist sondern eine Frage der Code-Optimierung [vermutlich sollte ich besser duck und weg jetzt dazufügen].
            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
        2. Hellihello

          »» Grauenhaft :) kannst du nicht zu etwas konventioneller Syntax greifen?

          Diese alternative Schreibweise ist Bestandteil der Coding-Standards im Zend-Framework für View-Skripte. Also bitte nicht zu sehr verdammen - innerhalb von Inline-HTML-Sektionen ist sie durchaus lesbarer, als die gewöhnliche Klammernvariante.

          Und nicht nur die. S.a. http://www.php.net/de/alternative_syntax die Anmerkungen. Auch googlen mit "php als Templatesprache" o.ä. hilft.

          Dank und Gruß,

          frankx

          --
          tryin to multitain  - Globus = Planet != Welt
    2. Hi,
      erstmal danke für deine Hilfe. bei meinem Beispiel habe ich nicht die Information weiter verarbeitet, weil ich nicht wuste wie ich das anstellen soll.
      Ich habe dein Beispeil getestet und es Funktioniert. Aber es zeigt nur Anzeige 1 und 2 an. Wenn ich jedoch die Tabelle noch einfüge wird dies aber nicht angezeigt.
      Hast du vllt eine Ide wie ich die gesamte Tabelle anzeige.

      1. Hellihello

        naja, statt zwischen den if-anweisungen, statt dem h2 zB.

        aber wenn du deine tabelle display:none setzt, wird sie sowieso nie angezeigt. außer im quelltext des browsers...;

        immerhin scheint dein beispiel auch nicht wirklich parktikabel oder nicht unbedingt, zumal dann, wenn du noch in den anfängen steckst...;

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. Habs nun hinbekommen jedoch habe ich jetzt ein anderes Problem undzwar habe ich zwei formulare mit denen man sql befehle ausgeben kann. Vorher muss ich aber einen der Formulare wählen damit es angezeigt wird. Wenn ich jetzt aber beim Formular auf den submit button drücke passiert nichts und die Seite aktualisiert sich und ich muss wieder einen der Formulare auswählen.
          Die Formulare funktionieren aber nur wenn sie nicht im if drinne sind.
          Ich hoffe du kannst mir wieder da weiterhelfen.

            
          <form action="" method="post">  
          <select name="waehlen" size="1">  
                <option value="---">---</option>  
          	 <option value="Anzeige 1">Anzeige 1</option>  
                <option value="Anzeige 2">Anzeige 2</option>  
          </select>  
          <input name="submit" type="submit" value="OK">  
          </form>  
            
          <?php  
          $ok = $_POST['submit'];  
          $anzeigen = $_POST['waehlen'];  
          ?>  
            
          <?php if($_POST["waehlen"] == "Anzeige 1"):?>  
          <table border=1 cellspacing=1 cellpadding=1>  
          <tr>  
          <td>  
          	<h2>Funktion SQL Befehlseingabe</h2>  
          	<b>Hier können sie ihre SQL abfragen eingeben!!!</b><br><br>  
          		  
          	<form name="sqlbefehl" action="" method="post" target="_self" >  
          	<textarea name="textfeld" cols="50" rows="4"></textarea>  
          	<input name="send" style="margin-left: 10px" type="submit" value="Send" />  
                  </form>  
                  <?php  
                  $eingabe = $_POST['textfeld'];  
                  $send = $_POST['send'];  
                  echo "<b>Ihre Eingabe lautet:</b> $eingabe<br /><br />";  
                  ?>  
          </td>  
          </tr>  
          </table>  
          <?php elseif($_POST["waehlen"] == "Anzeige 2"):?>  
          <table border=1 cellspacing=1 cellpadding=1>  
          <tr>  
          <td>  
          	<h2>Funktion SQL Befehlseingabe</h2>  
          	<b>Hier können sie ihre SQL abfragen eingeben!!!</b><br><br>  
          		  
          	<form name="sqlbefehl2" action="" method="post" target="_self" >  
          	<b>Spalte eingeben:  
          	Tabelle eingeben:  
          	Bedingung eingeben:</b><br>  
          	<input name="select" type="text" value="" />  
          	<input name="tbl" type="text" value="" />  
          	<input name="where" type="text" value="" />  
          	<input name="send2" style="margin-left: 10px" type="submit" value="Send" />  
                  </form>	  
                  <?php  
                  $select = $_POST['select'];  
                  $tbl = $_POST['tbl'];  
                  $where = $_POST['where'];  
                  $send2 = $_POST['send2'];  
                  if($_POST['select'] && $_POST['tbl'])  
                  {  
                    $eingabe2 = "SELECT $select FROM $tbl ";  
                    if($_POST['where'])  
                    {  
          	      $eingabe2 .= "WHERE $where";  
                    }  
                 }  
                 echo "<b>Ihre Eingabe lautet:</b> $eingabe2<br /><br />";  
                 ?>  
          </td>  
          </tr>  
          </table>  
          <?php else:?>  
          <h2>Bitte wählen Sie eine Eingabeform</h2>  
          <?php endif;?>  
          
          
          1. hi,

            mal was am rande:

            »         <?php  
            
            >         $eingabe = $_POST['textfeld'];  
            >         echo "<b>Ihre Eingabe lautet:</b> $eingabe<br /><br />";  
            >         ?>  
            >         $where = $_POST['where'];  
            >           $eingabe2 = "SELECT $select FROM $tbl ";  
            > 	      $eingabe2 .= "WHERE $where";
            
            

            In deinem Script öffnest du Potentiellen Angreifern mehrfach Tür und Tor.

            Die unnötige umkopiererei des $_POST-Arrays ist Sinnlos und Gefährlich, da die Herkunft dieser Variablen verschleiert wird, und wie man an deinem Beispiel sieht, wird dann auch gerne mal die kontextspezifische Behandlung der Daten vergessen.

            In deinem Fall wäre das htmlspecialchars().

            mfg

            --
            echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
            array(2) {
              ["SELFCODE"]=>
              string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
              ["Meaningful"]=>
              string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
            }
            1. Die unnötige umkopiererei des $_POST-Arrays ist Sinnlos und Gefährlich, da die Herkunft dieser Variablen verschleiert wird, und wie man an deinem Beispiel sieht, wird dann auch gerne mal die kontextspezifische Behandlung der Daten vergessen.

              In deinem Fall wäre das htmlspecialchars().

              Hi,
              ich hab nicht ganz verstanden,was du mit "kontextspezifische Behandlung der Daten" meinst. Heist das soviel wie alles was ein User in ein input eingibt wird nach Sonderzeichen untersucht und in HTML code umgewandelt, sodass er nicht in die Datenbank hacken kann???

          2. Hellihello

            vielleicht ist es schlau, wenn du dir mal das grundprinzip vor augen führst. das "if" entscheidet ja nur, welcher quelltext an den browser ausgeliefert wird. der browser "weiß" nicht, ob der server da vorher irgendwelche wenn-dann-überlegungen durchgeführt hat oder nicht. ein formular ist für ihn ein formular und nichts weiter. und für den server ebenfalls, wenn er das zurückbekommt.

            kontextspezifische behandlung scheints du richtig verstanden zu haben. der kontext kann HTML (htmlspecialchars) sein, oder SQL (mysqli_escape oder sowas).

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. Hi,

              kannst du mir vllt ein Tipp geben, wie ich es dann hinbekomme, dass das Formular benutzt werden kann. Eigentlich soll er ja im Formular eine Funktion aufrufen aber das macht er ja nicht.
              Ich weis  nämlich immer noch nicht was dran falsch sein soll :P

              Und könntest du mir vllt erläutern wann ich die "kontextspezifische Behandlung" der Daten anwenden soll und wann decodieren. Wahrscheinlich bei der eingabe den string mit "htmlspecialchars" umwandeln. Aber wann muss ich ihn dann decodieren? In der eingabe in die Datenbank? Oder bei der Ausgabe beim Browser?

              Gruß
              Selo

              1. Hellihello

                na wenn ein gewisser Teil nur angezeigt wird, wenn $_POST["waehlen"] == "Anzeige 1" ist, dann wird er _nicht_ anzgezeigt, wenn das nicht der Fall ist.

                Zeige dir doch erstmal alles an, ohne die Ifs, und dann blende später aus, wenn alles klappt.

                var_dump($_POST) könnte dir auch helfen.

                Wenn das alles klappt, kümmere dich _danach_ um etwaige Maskierungen.

                Dank und Gruß,

                frankx

                --
                tryin to multitain  - Globus = Planet != Welt
                1. Hi nochmal Ich :D,
                  es klappt ja schon alles die Formulare funktionieren ohne Problem!
                  Das Problem ist nur ich habe 2 Formulare, die beide gleichzeitig angezeigt werden. Deshalb das Listenfeld der User soll wählen können welches er benutzen will und das andere soll dann nicht angezeigt werden.

                  Das Problem lag daran, dass wenn ich das mit dem anzeigen und verstecken machen, Optisch alles so ist wie es sein soll aber dafür nicht mehr die Funktion der Formulare geht.
                  Wenn ich nämlich das Formualr abschicken will passiert nichts und ich muss wieder das Formular wählen welches angezeigt werden soll.

                  Ich Hoffe ich konnte alles verständlich erklären.
                  Wo im Quellcode liegt den der Fehler???????

                  PS:sry für die umstände.

                    
                  <form action="" method="post">  
                  <select name="waehlen" size="1">  
                        <option value="---">---</option>  
                  	  <option value="Form 1">Form 1</option>  
                        <option value="Form 2">Form 2</option>  
                  </select>  
                  <input name="submit" type="submit" value="OK">  
                  </form>  
                    
                  <?php  
                  $ok = $_POST['submit'];  
                  $anzeigen = $_POST['waehlen'];  
                  ?>  
                    
                  <?php if($_POST["waehlen"] == "Form 1"):?>  
                  <table border=1 cellspacing=1 cellpadding=1>  
                  <tr>  
                     <td>  
                  	<h2>FORMUALR 1</h2>  
                  	<b>Hier können sie ihre SQL abfragen eingeben!!!</b><br><br>  
                  		  
                  	<form name="sqlbefehl" action="" method="post" target="_self" >  
                  	<textarea name="textfeld" cols="50" rows="4"></textarea>  
                  	<input name="send" style="margin-left: 10px" type="submit" value="Send" />  
                  	</form>  
                  	<?php  
                  	$eingabe = $_POST['textfeld'];  
                  	$send = $_POST['send'];  
                  	echo "<b>Ihre Eingabe lautet:</b> $eingabe<br /><br />";  
                  	?>  
                     </td>  
                  </tr>  
                  </table>  
                  <?php elseif($_POST["waehlen"] == "Form 2"):?>  
                  <table border=1 cellspacing=1 cellpadding=1>  
                  <tr>  
                     <td>  
                          <h2>FORMULAR 2</h2>  
                  	<b>Hier können sie ihre SQL abfragen eingeben!!!</b><br><br>  
                  		  
                  	<form name="sqlbefehl2" action="" method="post" target="_self" >  
                  	<b>Spalte eingeben:  
                  	Tabelle eingeben:  
                  	Bedingung eingeben:</b><br>  
                  	<input name="select" type="text" value="" />  
                  	<input name="tbl" type="text" value="" />  
                  	<input name="where" type="text" value="" />  
                  	<input name="send2" style="margin-left: 10px" type="submit" value="Send" />  
                  	</form>	  
                  	<?php  
                  	$select = $_POST['select'];  
                  	$tbl = $_POST['tbl'];  
                  	$where = $_POST['where'];  
                  	$send2 = $_POST['send2'];  
                  	if($_POST['select'] && $_POST['tbl'])  
                  	{  
                  	  $eingabe2 = "SELECT $select FROM $tbl ";  
                  	  if($_POST['where'])  
                  	  {  
                  	    $eingabe2 .= "WHERE $where";  
                  	  }  
                  	}  
                  	echo "<b>Ihre Eingabe lautet:</b> $eingabe2<br /><br />";  
                  	?>  
                      </td>  
                  </tr>  
                  </table>  
                  <?php else:?>  
                  <h2>Bitte wählen Sie eine Eingabeform</h2>  
                  <?php endif;?>  
                  
                  
                  1. Hellihello,

                    nun ja, du müsstest dir die vorige antwort nochmal durchlesen und dein post-array var_dumpen. dann würdest du sehen, dass mit absenden des forumlars garnichts angezeigt wird, weil die if-bedingung nicht erfülltist. wenn du erstmal zum testen das if-weglässt müsstest du dennoch ja irgendwas definieren, was dir dann anzeigt, dass das formulr übermittelt wurde. erster schritt dazu: var_dump($_POST);

                    Dank und Gruß,

                    frankx

                    --
                    tryin to multitain  - Globus = Planet != Welt
                    1. Aha natürlich jetzt habe ich es verstanden wenn ich dass formular abschicke wird nicht mehr das vorige post abgeschickt und ist leer und somit ist auch das if nicht erfüllt.
                      Aber ich weis immer nochnet wie ich es besser oder richtig machen könnte. Wäre nett wenn du wieder so ein Beispiel Code schreiben würdest :S.

                      Vielen Dank nochmal für deine Hilfe

                      Gruß
                      Selo

                      1. Hellihello

                        <form action="neue_seite.php">

                        </form>

                        oder

                        <input name="action" value="Formular abschicken">

                        <?php if ($_POST["action"] == "Formular abschicken"):?>
                        <?=var_dump($_POST)?>
                        <?php endif?>

                        Dank und Gruß,

                        frankx

                        --
                        tryin to multitain  - Globus = Planet != Welt
                  2. hi,

                    frankx hat dir ja schon ein gutes Beispiel gezeigt, noch was am Rande.

                    » <?php  
                    
                    > $ok = $_POST['submit'];  
                    > $anzeigen = $_POST['waehlen'];  
                    > ?>
                    
                    

                    Sowas hier solltest du dir unbedingt abgewöhnen, dass ist ein schlechter Stil, zudem völlig überflüssig und ohne Sinn.
                    Du kannst die POST-Variablen auch direkt in deinem Script nutzen, ohne sie erst hin und her zu kopieren.
                    Was im übrigen dein Script um ein vielfaches Lesbarer machen würde, derzeit ist es wirklich Anstrengend, den Scriptverlauf zu verfolgen, da ständig Variablen umkopiert werden.

                    Beispiel:

                    » 	<?php  
                    
                    > 	$eingabe = $_POST['textfeld'];  
                    > 	echo "<b>Ihre Eingabe lautet:</b> $eingabe<br /><br />";  
                    > 	?>
                    
                    

                    Hier kannst du auch direkt

                    echo "<b>Ihre Eingabe lautet:</b> {$_POST['textfeld']} <br /><br />";

                    oder auch (meine bevorzugte Variante, da übersichtlicher)

                    echo '<b>Ihre Eingabe lautet:</b>' . $_POST['textfeld'] . '<br /><br />';

                    schreiben.

                    Kontextspezifische Behandlung der Daten:

                    Schreibe in das Feld „textfeld“ mal „<script type="text/JavaScript">onload=alert('Nachricht')</script>“ und schick das Formular ab.

                    mfg

                    --
                    echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
                    array(2) {
                      ["SELFCODE"]=>
                      string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
                      ["Meaningful"]=>
                      string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
                    }
                    1. Hi,
                      danke für deinen Beitrag, dass mit der rumkopiererei werde ich mir merken.

                      Kontextspezifische Behandlung der Daten:

                      Schreibe in das Feld „textfeld“ mal „<script type="text/JavaScript">onload=alert('Nachricht')</script>“ und schick das Formular ab.

                      Ich hab das versucht, was du mir gesagt hast und „<script type="text/JavaScript">onload=alert('Nachricht')</script>“ ins textfeld kopiert und das Formular abgeschickt.
                      Doch es kam nur dieser Fehler

                      "Fehler bei der SQL Abfrage:
                      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1"

                      Ich kann mir aber vorstellen, dass etwas passieren sollte und man sowas durch überprüfung der Eingabe verhindern kann.

                      Vielen Dank nochmal für deine Hilfe

                      Mit freundlichen Grüßen
                      Selo

                      1. hi,

                        Ich hab das versucht, was du mir gesagt hast und „<script type="text/JavaScript">onload=alert('Nachricht')</script>“ ins textfeld kopiert und das Formular abgeschickt.

                        Mache erstmal die von frankx angesprochenen Testausgaben, die Kontextspezifische Behandlung der Daten ist mit eine der wichtigsten voraussetzungen, um Sauber zu programmieren.

                        Doch es kam nur dieser Fehler

                        "Fehler bei der SQL Abfrage:
                        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1"

                        Das ist auch wieder ein Fall für Kontextspezifische Behandlung der Daten, nur ist es in diesem Fall ein SQL-Kontext.
                        Wann immer du Variable Daten in die Datenbank schreiben möchtest, musst du diese Escapen (ohne hin und her zu kopieren).

                        "INSERT INTO  
                            Feld (content)  
                        VALUES  
                            ('" . mysql_real_escape_string($_POST['textfeld']) . "')";
                        

                        Ich kann mir aber vorstellen, dass etwas passieren sollte und man sowas durch überprüfung der Eingabe verhindern kann.

                        Nicht durch Überprüfung, sondern durch die korrekte Behandlung der Daten, eben in welchem Kontext du dich gerade befindest.

                        mfg

                        --
                        echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
                        array(2) {
                          ["SELFCODE"]=>
                          string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
                          ["Meaningful"]=>
                          string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
                        }