PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   "input type='hidden'" gibt falschen Wert weiter. (http://www.selfphp.de/forum/showthread.php?t=23349)

CrystalRed 14.06.2010 21:47:45

"input type='hidden'" gibt falschen Wert weiter.
 
Hallo Leute,

ich bin gerade dabei einen kleinen Onlineshop zu programmieren. Ich habe eine Artikellist erstellt und wollte mittels "versteckten Button" die ArtikelID weitergeben. Nun das Problem: es wird nicht die ID weitergegeben die ausgewählt wurde sondern die letzte ID aus der Liste und somit ein Falscher Artikel.

Hier mal der Code der Artikelliste:

PHP-Code:

<?php
    session_start 
();
    include_once 
"function.inc.php";
?>

<?php

    $artikel_kategorie 
$_SESSION["Kategorie"];
    
$artikel_art $_SESSION["ArtikelArt"];
    
    
$abfrage "SELECT artikel_bild,
                artikel_nummer,
                artikel_bezeichnung,
                artikel_beschreibung
                FROM artikel
                WHERE artikel_kategorie = '$artikel_kategorie'
                AND artikel_art = '$artikel_art'"
;
    
db_verbindung();
    
$result mysql_query($abfrage);
    
mysql_close();
    
$dsanz mysql_num_rows($result);

    echo 
"<form method='post' action='weiterleitung.php'><table border='1' style='margin:20px;'>";    
    for (
$i=1$i <= $dsanz$i++)
    {
        
$wert mysql_fetch_row($result);
        
$bild $wert[0];
        
$artikelnummer $wert[1];
        
$titel $wert[2];
        
$beschreibung $wert[3];
        
        echo 
"<tr><td rowspan='2'>"?><img src='graphic/artikel/<?php echo "$bild"?>' width="100%" height="100%"> <?php echo "</td>";
        echo 
"<td><b>Artikelnummer: $artikelnummer</b></td>";
        echo 
"<td><b>$titel</b></td>";
        
        
        
        
//echo "<td rowspan='2'><input type='submit' name='btn[inWarenkorb]' value=$artikelnummer></td>";
        
echo "<td rowspan='2'><input type='image' name='inWarenkorb' src='graphic/Buttons/warenkorb.jpg'><input type='hidden' name='btn[inWarenkorb]' value=$artikelnummer></td>";


        echo 
"<tr><td colspan='2'>$beschreibung</td>";
        echo 
"</tr><tr><td>*</td></tr></tr>";
        
    }
    echo 
"</table></form>";
?>

$artikelnummer wird befüllt und in der Artikelliste korrekt ausgegeben. Jedoch nach betätigung des Buttons: 'inWarenkorb' wird in "weiterleitung.php" der Falsche Wert angezeigt.

Kommentiert man
PHP-Code:

echo "<td rowspan='2'><input type='image' name='inWarenkorb' src='graphic/Buttons/warenkorb.jpg'><input type='hidden' name='btn[inWarenkorb]' value=$artikelnummer></td>"

aus und
PHP-Code:

echo "<td rowspan='2'><input type='submit' name='btn[inWarenkorb]' value=$artikelnummer></td>"

ein funktioniert alles so wie es sein sollte. Nur mit den Unterschied das nicht der Einkaufswagen angezeigt wird sonder der Button mit der Artikelnummer.

Bin für jeden Tipp dankbar!

LG Alex

rarios 15.06.2010 04:43:37

AW: "input type='hidden'" gibt falschen Wert weiter.
 
Entschuldige, dass ich das so sage, aber das ganze Formular ist nicht wirklich sinnvoll programmiert.
Es ist vollkommen logisch, dass nur die letzte Artikelnummer übertragen wird.

PHP-Code:

echo "<td rowspan='2'><input type='image' name='inWarenkorb' src='graphic/Buttons/warenkorb.jpg'>"

Mit diesem echo-Befehl erzeugst Du zwar ein Bild als Submit, trotzdem enthält das ganze Formular lauter hidden-Felder mit derselben name-Deklarierung: "btn[inWarenkorb]".
Folgerichtig wird der letzte gesetzte Wert übertragen, da sich die anderen quasi "überschreiben".

cortex 15.06.2010 07:34:50

AW: "input type='hidden'" gibt falschen Wert weiter.
 
Zitat:

Zitat von CrystalRed (Beitrag 136954)
PHP-Code:

<input type='image' name='inWarenkorb' src='graphic/Buttons/warenkorb.jpg'


eingabefelder von typ image sind mir persönlich nicht bekannt. wenn formulare nicht funktionieren, sind sie i.d.r. kaputt / invalide. mehr dazu gibt's bei SELFHTML.

cx

CrystalRed 15.06.2010 07:57:08

AW: "input type='hidden'" gibt falschen Wert weiter.
 
Hallo Leute,

danke jedenfalls mal für die Rückmeldung. Nur: wieso ist das ganze Formular nicht wirklich sinnvoll Programmiert? Soll doch nichts weiter machen als eine Liste der Datenbankeinträge ausgeben.

Gibt es dafür eine mögliche lösung wie ich den Wert im versteckten Butten "btn[inWarenkorb]" nicht immer überschreibe?

Wieso wird der Versteckte Button immer überschrieben und der andere (eine Zeile oberhalb) nicht?

LG Alex

cortex 15.06.2010 08:22:18

AW: "input type='hidden'" gibt falschen Wert weiter.
 
Zitat:

Zitat von CrystalRed (Beitrag 136960)
Gibt es dafür eine mögliche lösung wie ich den Wert im versteckten Butten "btn[inWarenkorb]" nicht immer überschreibe?

lies' den satz bitte noch einmal:

Zitat:

Zitat von rarios (Beitrag 136956)
[...] trotzdem enthält das ganze Formular lauter hidden-Felder mit derselben name-Deklarierung [...]

anm.: es ist das name-attribut gemeint.

Zitat:

Zitat von CrystalRed (Beitrag 136960)
Wieso wird der Versteckte Button immer überschrieben und der andere (eine Zeile oberhalb) nicht?

korrigiere das formular - dann kann man weiterschauen. wieso sollte man sich den kopf zerbrechen, warum eine kaputte sache mal funktioniert und mal nicht?

cx

CrystalRed 15.06.2010 08:30:26

AW: "input type='hidden'" gibt falschen Wert weiter.
 
Hallo Cortex,

um das Formular problemlos zum laufen zu bringen braucht man nur den auskommentierten Button entkommentieren und den Button darunter einfach auskommentieren. Dann funktioniert alles so wie es funktionieren soll. Trotz des gleichen namen-attributes.

Soweit sogut. jetzt würde das Formular funktionieren. Aber wie bekomme ich jetzt ein Bild statt des häßlichen Buttons, der als Namen die Artikelnummer hat, in das Formular?

LG Alex

cortex 15.06.2010 08:39:37

AW: "input type='hidden'" gibt falschen Wert weiter.
 
hallo CrystalRed,

Zitat:

Zitat von CrystalRed (Beitrag 136962)
um das Formular problemlos zum laufen zu bringen [...]

ich möchte mich nicht wiederholen; ich musste mir erst gestern ein unqualifiziertes statement zu einem ähnlichen problem reinziehen:

Zitat:

Zitat von Gothic (Beitrag 136931)
[...] bei der Ausgabe von 'gültigem und vollständigem HTML' ensteht dadurch nur zusätzlicher Datenmüll.

valides (X)HTML ist keine glaubensfrage, sondern voraussetzung dafür, websites zu produzieren, die in möglichst vielen unterschiedlichen browsern erwartungsgemäsz funktionieren.

Zitat:

Zitat von CrystalRed (Beitrag 136962)
Aber wie bekomme ich jetzt ein Bild statt des häßlichen Buttons, der als Namen die Artikelnummer hat, in das Formular?

verstehe deine frage leider nicht. willst du nun ein bild, einen button oder einen button mit hintergrundbild? wie auch immer - belies' dich bitte selbst: (X) HTML bei SELFHTML.

cx

DokuLeseHemmung 15.06.2010 09:24:41

AW: "input type='hidden'" gibt falschen Wert weiter.
 
Wie ich das sehe gibts da ein Dutzend(oder so) Imagebuttons!

Wenn man sie unterscheiden möchte, dann brauchen sie unterschiedliche Namen. Denn Image Buttons haben kein Value (außer im FF). Da sie ansonsten nur freiwillig Koordinaten liefern ist die Auswertung etwas tricky.

PHP-Code:

<?php
error_reporting
(E_ALL);
ini_set('display_errors'TRUE);
?>
<form action="" method="post">
  <input type="image" name="image[1][]" value="egal" src="btn.jpg" title="ein Button"/>
  <input type="image" name="image[2][]" value="egal" src="btn.jpg" title="ein Button" />
  <input type="image" name="image[3][]" value="egal" src="btn.jpg" title="ein Button" />
  <input type="image" name="image[4][]" value="egal" src="btn.jpg" title="ein Button" />
  <input type="image" name="image[rot][]" value="egal" src="btn.jpg" title="ein Button" />
</form>
<hr>
<h1>Auswertung</h1>
<?php
    
if(!empty($_POST['image']))
    {
      
$Button array_pop(Array_keys($_POST['image']));
      echo 
" Button $Button geklickt <br>";
      echo 
" X POS: {$_POST['image'][$Button][0]} <br>";
      echo 
" Y POS: {$_POST['image'][$Button][1]} <br>";
      if(isset(
$_POST['image'][$Button][2]))
      {
        echo 
"Value: {$_POST['image'][$Button][2]} <br>";
        echo 
"Vorsicht: Inkompatibles FF/Gecko Viech.<br>";
      }
    }else
    {
      echo 
"Kein Image Button geklickt.";
    }
?>
<hr>
<pre>
<h1>Post Daten</h1>
 <?php
    var_export
($_POST);
 
?>
</pre>

Die ganzen hidden Fields können in die Tonne.

cortex 15.06.2010 10:16:46

AW: "input type='hidden'" gibt falschen Wert weiter.
 
herr gott nochmal, es gibt kein attribut image beim HTML-element input. sollte hier ein klick-button mit bild-hintergrund gemeint sein, muss das ungefähr so aussehen:

HTML-Code:

    <button name="Klickmich" type="button" value="Überraschung" onclick="alert('Überraschung!');">
        <img src="selfhtml.gif" width="106" height="109" alt="SELFHTML Logo">
    </button>

quelle: Klick-Buttons definieren (Bild)

dass ein eingabefeld (input) mit einer ressource (image) in zusammenhang gebracht wird, ist doch per se widersprüchlich.

cx

DokuLeseHemmung 15.06.2010 10:22:46

AW: "input type='hidden'" gibt falschen Wert weiter.
 
Da muss ich dir widersprechen!

Zitat:

Erläuterung:

Mit <input type="image"> definieren Sie einen grafischen Button (input = Eingabe). Die gewünschte Grafikdatei bestimmen Sie mit dem Attribut src (src = source = Quelle). Weisen Sie eine geeignete Grafik vom Typ GIF, JPEG oder PNG zu. Im obigen Beispiel wird vorausgesetzt, dass sich die Grafik absende.gif im gleichen Verzeichnis befindet wie die HTML-Datei mit dem Formular. Für das Adressieren der Grafik gelten die Regeln zum Referenzieren in HTML
Aus: http://de.selfhtml.org/html/formular....htm#grafische

Und selbst in den betreffenden DTD Dateien wirst du die Image Inputs finden.
Es gibt also nichts an den Image Inputs auszusetzen.
Siehe:
Zitat:

Code:

<!ENTITY % InputType
  "(text | password | checkbox |
    radio | submit | reset |
    file | hidden | image | button)"
  >


Aus: http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:27:55 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.