• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

variable Bezeichnung Input-Feld

Heavy-Dee

Mitglied
Hallo zusammen.

Ich habe folgende Tabellenmatrix (8 Spalten / 8 Zeilen)
In den 64 Feldern befindet sich jeweils zwei Inputfelder. In diesen Feldern sind Positionsdaten des Feldes (Spaltenwert "$s" u. Zeilenwert "$z") als Value hinterlegt.
Auch die Feldnamen beinhalten jeweils die Variablen $s und $z .
Ziel ist es bei anklicken eines Tabellenfeldes eine Ausgabe zu erhalten , welches Feld angeklickt wurde.


Code:
<form name='send' method='POST' action='Schach.php'>
    <table class="frm" align='center'>
        <tr class="frm">
            <?php
          
            for ($z = 1; $z <= 8; $z++)
            {
                echo "<tr class='frm'>";
                for ($s = 1; $s <= 8; $s++)
                {
                    echo "<td class='frm' onclick='document.send.submit()';>";
                    ?>
                    <input type='text' name='Sp<?php echo $s; ?>' value='<?php echo $s; ?>'>
                    <input type='text' name='Ze<?php echo $z; ?>' value='<?php echo $z; ?>'>
                    <?php
                    echo "</td>";
                }
                echo "</tr>";
            }
            ?>  
        </tr>
    </table>
</form>

<?php
$Spalte = $_POST ['Sp$s'];
$Zeile = $_POST ['Ze$z'];

echo "Es wurde das Feld in Spalte: " . $Spalte . " und Zeile: " . $Zeile . " angeklickt !";

?>

Leider erfolgt keine Ausgabe von $Spalte und $Zeile.
Kann mir jmd einen Tipp geben?
 
Zuletzt bearbeitet:
Werbung:
Das liegt daran, dass es $s an der Stelle

PHP:
$Spalte = $_POST ['Sp$s'];
$Zeile = $_POST ['Ze$z'];

nicht mehr gibt. Damit Du das verstehst solltest Du mal

PHP:
var_dump($_POST);

ausführen um zu sehen was in diesem Array steht. Dadurch solltest Du erkennen, dass Du beim Auswerten ebenso mit for-Schleifen durch $s und $z gehen musst um an die Werte zu kommen.
 
Schau mal nach was beim Absenden wieder bei dir ankommt.

PHP:
echo "<pre>";
    print_r($_POST);
    echo "</pre>";

Weites dann bitte beachten, das du die übertragenen Werte nicht direkt wieder ausgibst, da so Sicherheitslücken entstehen(XSS).
 
Werbung:
Das liegt daran, dass es $s an der Stelle

... Dadurch solltest Du erkennen, dass Du beim Auswerten ebenso mit for-Schleifen durch $s und $z gehen musst um an die Werte zu kommen.

Ja aber auf Basis welcher Werte ?
Die benötige ich ja um sagen zu können wo ich geklickt habe.

@Nitamud
Ausgabe:
Array
(
[Sp] => Array
(
[$s] => 8​
)

[Ze] => Array
(
[$z] => 8​
)​
)
... klar die Variablen $s und $z werden ja Ständig neu überschrieben.
Also brauche ich für jeden Schleifendurchlauf einen eindeutigen variablen Feldnamen. Aber wie kann ich ihn übergeben?
 
Ich würd das ein wenig anders lösen:

Die Spalten und Zeilen für jedes Feld würde ich in einem mehrdimensionalen (assoziativen) Array ablegen auf den man mit der Feldnummer (1-64) zugreifen kann.

Ungefähr so:

PHP:
//Array
            $feld = array();
     
         
            //Spalte und Zeile intialisieren
            $spalte = 1;
            $spaltenpruefer = 1;
            $zeile = 0;
         
            for ($i = 1; $i <= 64; $i++)
            {
                if ($zeile < 8)
                {
                    $zeile++;
                } else {
                    $zeile = 1;
                }
             
             
                if ($spaltenpruefer % 9 != 0)
                {
                    $spaltenpruefer++;
                } else {
                    $spalte++;
                    $spaltenpruefer = 1;
                }
                $feld[$i]['Zeile']     = $zeile;
                $feld[$i]['Spalte']    = $spalte;
             
            }

Dann musst du jedem deiner Inputs in einer Schleife als Name nur noch einen Wert zwischen 1-64 per for-Schleife eintragen lassen. Den Namen des geklickten Feldes dann mit JS übergeben und den Array an dieser Stelle dann aufrufen. Hoffe das hilft dir ein wenig weiter :)

PS: Dann brauchst du auch nur ein Input-Feld, das zweite erscheint mir überflüssig...
 
Zuletzt bearbeitet:
Ich verstehe die ganze Logik schon nicht? Wofür brauchst du zwei Eingabefelder und wieso steht da hinterher "angeklickt"? Das passt doch schon nicht zusammen.
 
Werbung:
Mir ist gerade auch noch eine Frage eingefallen...

Wozu brauchst du denn in deinem Fall überhaupt ein Formular?
Sowas lässt sich doch auch ganz einfach ohne PHP und nur mit JavaScript realisieren.

Wenns PHP sein soll, könnte man das Ganze aber auch einfach als Links anlegen, die dann Parameter in der URL übergeben , und eine entsprechende Ausgabe unterhalb erzeugen. (spart dir das onclick, und das Formular)
 
Da Schachbrett war exemplarisch.
In meinem Formular werden horizontal die Tage des ausgewählten Monats, und vertical die eingetragenen Nutzer aus einer db dargestellt.
In der Tabellenzelle eines jeden Nutzers stehen best. Informationen für den entsprechenden Tag.

-----------| Tag1 | Tag2 |...
Nutzer1| InfoA | InfoB |
Nutzer2| InfoC | InfoD |
.

Mit dem Klick auf das entsp. Infofeld soll dieses über ein spez. Form editierbar sein.
Die Werte für die Tage u. Nutzer liegen auch in einem mehrdim. Array.

Ich suche nur nach einer Möglichkeit wie ich bei anklicken von z.B. Zelle [InfoB] die Werte von Tag2 (= Datum) und
Nutzer1 (= Userid) übergeben bekomme.
 
Werbung:
Die Daten liegen wie folgt im Array:

Array
(
[1] => Array
(
[1] => Array
(
[sSpalte] => 1
[sZeile] => 1
[sDatum] => 2015-01-01
[sUser] => d215c89a
)

[2] => Array
(
[sSpalte] => 1
[sZeile] => 2
[sDatum] => 2015-01-01
[sUser] => 7e4986c7
)

...

[25] => Array
(
[sSpalte] => 1
[sZeile] => 25
[sDatum] => 2015-01-01
[sUser] => 62244eee
)

)

[2] => Array
(
[1] => Array
(
[sSpalte] => 2
[sZeile] => 1
[sDatum] => 2015-01-02
[sUser] => d215c89a
)

[2] => Array
(
[sSpalte] => 2
[sZeile] => 2
[sDatum] => 2015-01-02
[sUser] => 7e4986c7
)

...

[25] => Array
(
[sSpalte] => 2
[sZeile] => 25
[sDatum] => 2015-01-01
[sUser] => 62244eee
)

...

[31] => Array
(
[1] => Array
(
[sSpalte] => 31
[sZeile] => 1
[sDatum] => 2015-01-31
[sUser] => d215c89a
)

[2] => Array
(
[sSpalte] => 31
[sZeile] => 2
[sDatum] => 2015-01-31
[sUser] => 7e4986c7
)

...

[25] => Array
(
[sSpalte] => 31
[sZeile] => 25
[sDatum] => 2015-01-31
[sUser] => 62244eee
)


Über die Daten v. "sDatum" und "sUser" rufe ich dann die entspr. Infos aus einer db ab.
 
Uns hier erst mit einem Schachbrettmuster anzukommen, um damit ein Crossposting zu vertuschen ist schon heavy.

In einen Forum habe ich das Thema zurück gezogen.
Dir sollte doch wohl klar sein, dass, wenn du mit Crosspostings auffällst, dir solche Aussagen schnell widerlegt werden, oder?
 
Werbung:
Da ihr scheinbar alle mehr Zeit damit verbringt zu suchen in welchen Foren jmd um Hilfe bettelt als jmd mal hilfreich unter die Arme zu greifen, könnt ihr mich alle mal gern haben.
Wenn so euro Hilfe aussieht, dann will ich gar keine .!!!
 
Schön blöd,wenn man mit Crossposting auffällt und sich dann auch noch versucht, auf eine dumme Art und Weise rauszureden, oder?
Glaubst du wirklich, dass jemand nach Crosspostern gezielt sucht? Wenn man in unterschiedlichen Foren unterwegs ist, fallen einem Crossposter auf, und das wird völlig zurecht angesprochen.

Und lustigerweise hast du deinen letzten Beitrag auch noch 1 zu 1 kopiert. :D
 
Falls jemand später auf diesen Thread stoßen sollte, hier mal eine Lösung zum Schachfeld:
(hat mich selbst gerade interessiert, und da ich Zeit hatte...)



PHP:
                    <table>
            <?php
          
          
          
            //Array für die Spalten|Zeilen
            $feld = array();
      
          
            //Spalte und Zeile intialisieren
            $spalte = 1;
            $spaltenpruefer = 1;
            $zeile = 0;
          
            for ($i = 1; $i <= 64; $i++)
            {
                if ($zeile < 8)
                {
                    $zeile++;
                } else {
                    $zeile = 1;
                }
              
              
                if ($spaltenpruefer % 9 != 0)
                {
                    $spaltenpruefer++;
                } else {
                    $spalte++;
                    $spaltenpruefer = 1;
                }
                $feld[$i]['Zeile']     = $zeile;
                $feld[$i]['Spalte']    = $spalte;
              
            }
              
              
            //Ausgabe
            $e = function ($s) {
                return htmlspecialchars(
                    $s,
                    ENT_QUOTES | ENT_HTML5 | ENT_DISALLOWED | ENT_SUBSTITUTE,
                    'UTF-8'
                );
            };
          
            //Index intialisieren(zur Übergabe)
            $i = 0;
          
          
            for ($z = 1; $z <= 8; $z++)
            {
                echo "\n<tr>\n";
              
                for ($s = 1; $s <= 8; $s++)
                {
                    $i++;
                                  
                    echo "\t<td>";
                    echo "<a  id='$i' href='test.php?ergebnis=$i'</a>";
                    echo "</td>\n";
          
              
                }
            echo "\n</tr>\n\n";
            }
          
          
            ?>
        </table>
      
        <?php
      
            if (isset($_GET['ergebnis'])    &&    is_numeric($_GET['ergebnis']) && (int) $_GET['ergebnis'] <= 64 && (int) $_GET['ergebnis'] >= 1)
            {
                    $ergebnis = $_GET['ergebnis'];
            }    else {
                die('Manipulationsversuch...');
            }
          
            $opSpalte = $feld[$ergebnis]['Spalte'];
            $opZeile  =    $feld[$ergebnis]['Zeile'];
          
            echo '<p id="ergebnis">';
            echo 'Du hast das Feld ' .$e($ergebnis). ', das in Zeile ' . $e($opZeile). ' und Spalte ' . $e($opSpalte) . ' liegt, angeklickt.';
            echo '</p>';
          
        ?>



Ist nur schnell drauflosgeschrieben und eine Rohfassung, wie eine Lösung ausschauen könnte...
 
Werbung:
Das Schachbrett geht auch etwas einfacher, hier mal mit Radio-Button:
PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Schachbrett</title>
</head>
<body>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<table>
<?php
   for ($i = 0; $i < 64; $i++)
   {
       if (!($i % 8))
          echo "<tr>\n";
        
       echo "<td><input type='radio' name='field' value='$i'></td>\n";
     
        if (!(($i+1) % 8))
          echo "</tr>\n";
   }
?>
<tr>
  <td colspan="8"><input type="submit" name="submit" value="Abschicken"></td>
</tr>
</table>
</form>
<?php
  if (isset($_POST['field']))
  {
     echo "Zeile " . floor ($_POST['field'] / 8) . " Spalte " . ($_POST['field'] % 8);
  }
?>
</body>
</html>
 
@Nitamud
Ich habe mir deinen Code mal angesehen.
Du benutzt einen eigenen Index $i für die Übergabe als ID.
Ich glaube das war genau die Initialzündung die ich gebraucht habe.

DANKE
 
Wenn du dich schon nicht an Forenregeln hältst, dann sei wenigestens so fair und schreibe in den anderen Foren, dass du einen Lösungsansatz hast. Ist ja wohl nicht zuviel verlangt, oder? Die Frage konntest du ja auch mehrfach stellen!
 
Werbung:
Zurück
Oben