WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Formular, UPDATE: Problem mit Variablen / Wertübergabe » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Formular, UPDATE: Problem mit Variablen / Wertübergabe
von elster
jupp - alles klar - soweit
Sicherheit muß ich bei Zeiten noch machen ...

Hab vor die Form noch ein
1:
<?php if ($_POST["submit"])  $vwf[0] = $_POST['f'][$vwf[1]]; ?>

platziert.

Danke, ciao, Jörg
von subjective
Du kannst dir die Array Strukturen von PHP ähnlich wie eine Verzeichnisstruktur vorstellen. Wenn eine Element komplett in [] steht, wird es erstmal zu einem Wert aufgelöst (also der Wert aus der Variable ausgelesen) und bildet einen Schlüsselnamen.

aus
$_POST['f'][$vwf[1]]
wird so intern
$_POST['f'][712]

Zu mysql_real_escape_string() solltest du einfach mal einen Blick in das PHP-Manual. Am besten schaust du auch mal in das QNet Tutorial.

Wenn du in der Form immer den aktuellen Wert sehen willst, mußt du halt die Variable, welche du ausgibst, nach dem erfolgreichen Update ändern.
von elster
Jippie! "Richtfest" - zumindest für diesen Abschnitt.
Danke!
So klappt es jetzt:
1: 
2: 
3: 
4: 
5:
if ($_POST["submit"])
      $up = "UPDATE $tab SET $updf = '".$_POST['f'][$vwf[1]]."' WHERE $idf = ".$vwf[1]."";
      mysql_query($up);

Zwei Fragen noch - eine zugleich auch Teil der Ursache
des "Fehlers" bzw. der letzten Verzögerung:

Zum einen lags am Klammern- und Apostoph-Wirrwar vor meinen
Augen: Im Formfenster konnte ich das Wert-Update nicht gleich
sehen, sondern habs in MySql-Front verfolgt.

- Gibt es einen einfachen Trick, wie ich hier
(Form oben, if() unten ...)
mit dem Submit gleich den akt Wert oben sehen
(hier stellt sich immer wieder letzte Stand her,
erst nach Seiten-reload sehe ich korrigiertes)

- Formularwerte für die MySQL-Query absichern:
bzgl. absichern mit mysql_real_escape_string arbeite
ich mit php 4.2.1.
Habt ihr diesbzgl. eine Tipp für mich?

Grüße von der waterkant,
Jörg
von subjective
Da steht doch das der Wert in $_POST['f'][712] drin ist. Nciht in $_POST['0']. 712 sollte $vwf[1] entsprechen - also $_POST['f'][$vwf[1]].
von elster
nee -
nach Anderem nur ein (verzagter) Versuch ...
1: 
2:
$up = "UPDATE $tab SET $updf = '".$_POST['0']."' WHERE $idf = ".$vwf[1]."";

ick wees net, wat icke bei SET noch verwsuchen soll.
dat array schaut so aus:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11:
array(2) {
  ["f"]=>
  array(1) {
    [712]=>
    string(7) "aaaa cc"
  }
  ["submit"]=>
  string(7) "Und ab!"
}

bloß das aaaa cc kommt nicht in die DB ...
Grüße.
von elster
Hi,
.. Verzweiflung, Wahnsinn, ...
von subjective
Was soll das print_r() da tuen?
von elster
Hallo und Dank,
so schauts:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20:
$q  = "SELECT $updf, $idf FROM $tab WHERE $idf = $id";
$result = @mysql_query($q)or die($q.'<br> Fehler: '.mysql_error());
$vwf = mysql_fetch_array($result);
echo "<body>";
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
   <textarea <?php
   echo 'name="f['.$vwf[1].']">';
   echo $vwf[0]; ?></textarea>
   <input type="submit" name="submit" value="Und ab!" />
</form>
<?php
      if ($submit)
      $up = "UPDATE $tab SET $updf = ".print_r($_POST[0])." WHERE $idf = ".$vwf[1]."";
      mysql_query($up);
echo "<hr>";
echo "f".$vwf[1]." ?<br><pre>";
echo var_dump($_POST)." </pre><br>";

wird meist nix in die DB eingetragen -
machmal eine 1 (??)
aber ? ...
Grüße
von subjective
In der vorherigen Lösung schreibst du auch Attribute der Eingabefelder in die Action des Formulars. Das solte einen sehr seltsamen HTML-Quellcode ergeben.

In der aktuellen Variante bist du schon nah dran. Allerdings passen der Name des Textarea und die genutzte Variable nicht zusammen. Der Name muss nach dem Schema f[id] aufgebaut sein. Also

1:
echo '<textarea name="f['.$vwf[1].']">';


Im aufgerufenen PHP-Script exisitert dann $_POST[$vwf[1]]. Schau doch mal mit einerm var_dump($_POST) in die übermittelten Variablen.

Wichtig ist auch das du alle Formularwerte für die MySQL-Query absicherst.
von elster
Hallo,
also ich kapiere nicht, wie du das meinst.
Ich wollte mit Namen aus der id wie f722 arbeiten.
Die kann ich "produzieren" oder vorfertigen in je einem Array.
Wie aber soll die hier rein- bzw. rauskommmen?
SET titel = ".$_POST['f']['1']."
Hab ja (u.a. :-/ ) das Problem, kein Doppeltes $$ zu verwenden,
sonst könnt man ja vor $array ...
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14:
$array[] = "f".$vwf[1]."";
echo $array[0]."<br>";    // test
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
   <textarea name="<?php echo $array[0]; ?>">
   <?php echo $vwf[0]; ?></textarea>
   <input type="submit" name="submit" value="Und ab!" />
</form>
<?php
if ($array[0] == "f".$vwf[1])
    $up = "UPDATE test SET titel = ".$_POST['f']['1']." WHERE foid_ = ".$vwf[1]."";
    mysql_query(@$up);


meine vorherige "Lösung" arbeitet auch unsauber
und liefert im Quellcode:
<form action="/pfad/datei.php\ method="post>
nach 2x schicken sieht der Quellcode dann so aber aus:
<form action="/pfad/datei.php\\\\ method=\\ method=\ method="post>
Grüße, Jörg
von elster
Hallo und vielen Dank!
monmentan sehe ich aber nichts mehr. Hatte ´s einfach so eingesetzt, aber ...
1: 
2: 
3: 
4: 
5:
<form action=\""; $_SERVER["PHP_SELF"]; echo"\" name=\"f[1]\" ....
    if (!$_POST['f']['1'] == TRUE) { ....
    echo $_POST['f']['1']; ...

u.a. ...

davor hatte ich schon sowas bearbeitet:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16:
 <?php
function updatefeld($tabelle, $idfeld, $updfeld, $cols, $rows, $id) {
             echo "<form action=\"";
             print $_SERVER["PHP_SELF"];
             echo "\ method=\"post\">
             <textarea name=\"textfeld\" cols=\"$cols\" rows=\"$rows\" id=\"titel\">";
                 if (!isset($_REQUEST['textfeld'])) {echo $updfeld;}
                    else {echo htmlspecialchars($_REQUEST['textfeld']);}
             echo "</textarea><br>
                  <input type=\"submit\" name=\"do_form_x\" value=\"schicken\">
                  </form>";
             if ($textfeld == TRUE)
             $up = "UPDATE $tabelle SET $updfeld = '$textfeld' WHERE $idfeld = '$id'";
             mysql_query($up);
               } ?>

das funktioniert (eigentlich) - aber nicht als function:
Der Haken liegt wohl am Submit-Button,
an den ich nicht mehr gelange?
... besser erstmal abwaschen ;-\
habt ihr noch ein paar Tipps?
Danke, Gruß, Jörg
von subjective
PHP nutzt bei $$k schon den Inhalt der Variable $k als Variablennamen. Dies sollte man jedoch vermeiden. Einfacher ist die Verwendung von $_POST[$k], da man so auch gleich register_globals beachten würde. Viel einfacher wäre jedoch die Verwendung von Arrays. Wenn man in HTML die Feldnamen in der Form name="f[1]" angibt. Erstellt das aufgerufene PHP-Script daraus ein Array - also $_POST['f']['1'] . (Die 1 in meinem Beispiel entspricht dem Inhalt von $vwf['id'].)
von beule
Hey

versuch mal dem from und dem textarea statische namen zu geben. ich bin der meinung, du kannst keine variable aus der variable machen. also $$k meine ich. php denkt dann die variable heisst $k und merkt nicht das du hier den wert aus der variable $k willst... also ich glaube es ist so hatte das problem auch schon will hier aber nichts falsches erzählen.

cheers
beule
von elster
Hallo,
ich mache eine kleine Formfenster-function, mit der ich
später Datenbank-Werte bearbeiten möchte.
Wenn ich wie unten mit einer Variablen arbeite
finde ich aber nach submit immer nur deren Wert eingetragen.
Z.B. f280, $f280, ...
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11:
$k = "f".$vwf['id'];
echo "
<form action=\"datei.php\" name=\"$k\" method=\"post\" target=\"_self\">
<textarea name=\"$k\">".$vwf['xx1']."</textarea>
<input type=\"submit\" value=\"senden\"></form>";
if ($$k == TRUE) {
$up = "UPDATE test SET xx1 = '$$k' WHERE id = ".$vwf['id']."";
mysql_query($up);  } else {
echo "nix eingegeben, nix in db";}

Eigenartig für mich ist, wenn ich statt $k
ein gg als name nehme, werden Werte (Text, ...) übergeben.
Habe schon einige Verknüpfungen oder Verkettungen
mit Variblen versucht, komm aber auf keinen grünen Zweig.

Weiß jemand, wie man die Variable im UPDATE-Select richtig
schreibe?

Danke, Jörg

Nach oben