jom: UPDATE geht nicht !

hallo,

ich habe ein problem, und zwar mache ich ein UPDATE einer TABLE zeiten mitfolgendem formular.

Hat jemand ne ahnung warum das nicht geht? ich hab das schon 1000 x gemacht, finde den fehler aber nicht.

<?
include("../includes/functions.inc.php");
connectDB(1);

if($_REQUEST["action"]=="update")
{
print $query="
UPDATE zeiten SET

mo\_de='$_POST[mo_de]',
mo\_fr='$_POST[mo_fr]' ,
di\_de='$_POST[di_de]',
di\_fr='$_POST[di_fr]' ,
mi\_de='$_POST[mi_de]',
mi\_fr='$_POST[mi_fr]' ,
do\_de='$_POST[do_de]',
do\_fr='$_POST[do_fr]' ,
fr\_de='$_POST[fr_de]',
fr\_fr='$_POST[fr_fr]' ,
sa\_de='$_POST[sa_de]',
sa\_fr='$_POST[sa_fr]' ,
so\_de='$_POST[so_de]',
so\_fr='$_POST[so_fr]'

WHERE id = 1

";

mysql_query($query);
//header("Location:time.php");
}

$query2="SELECT * FROM zeiten LIMIT 0,1";
$result=mysql_query($query2);
while($data=mysql_fetch_array($result))
{

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="time.php?action=update" enctype="multipart/form-data" method="post" style="margin:0px; padding:0px">
  <table width="100%" border="0" cellspacing="1" cellpadding="1">
    <tr bgcolor="#CCCCCC">
      <td>&nbsp;</td>
   <td width="24%">DE</td>
      <td width="24%">FR</td>
      <td width="24%">EN</td>
      <td width="24%">NL</td>
    </tr>
    <tr>
      <td bgcolor="#CCCCCC">MO</td>
   <td><input type="text" name="mo_de" class="input" style="width:100%"  value="<? print $data["mo_de"]; ?>" maxlength="255"></td>
      <td><input type="text" name="mo_fr" class="input" style="width:100%"  value="<? print $data["mo_fr"]; ?>" maxlength="255"></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
<tr>
      <td bgcolor="#CCCCCC">DI</td>
   <td><input type="text" name="di_de" class="input" style="width:100%"  value="<? print $data["di_de"]; ?>" maxlength="255"></td>
      <td><input type="text" name="di_fr" class="input" style="width:100%"  value="<? print $data["di_fr"]; ?>" maxlength="255"></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
<tr>
      <td bgcolor="#CCCCCC">MI</td>
   <td><input type="text" name="mi_de" class="input" style="width:100%"  value="<? print $data["mi_de"]; ?>" maxlength="255"></td>
      <td><input type="text" name="mi_fr" class="input" style="width:100%"  value="<? print $data["mi_fr"]; ?>" maxlength="255"></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
<tr>
      <td bgcolor="#CCCCCC">DO</td>
   <td><input type="text" name="do_de" class="input" style="width:100%"  value="<? print $data["do_de"]; ?>" maxlength="255"></td>
      <td><input type="text" name="do_fr" class="input" style="width:100%"  value="<? print $data["do_fr"]; ?>" maxlength="255"></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
<tr>
      <td bgcolor="#CCCCCC">FR</td>
   <td><input type="text" name="fr_de" class="input" style="width:100%"  value="<? print $data["fr_de"]; ?>" maxlength="255"></td>
      <td><input type="text" name="fr_fr" class="input" style="width:100%"  value="<? print $data["fr_fr"]; ?>" maxlength="255"></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
<tr>
      <td bgcolor="#CCCCCC">SA</td>
   <td><input type="text" name="sa_de" class="input" style="width:100%"  value="<? print $data["sa_de"]; ?>" maxlength="255"></td>
      <td><input type="text" name="sa_fr" class="input" style="width:100%"  value="<? print $data["sa_fr"]; ?>" maxlength="255"></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
<tr>
      <td bgcolor="#CCCCCC">SO</td>
   <td><input type="text" name="so_de" class="input" style="width:100%"  value="<? print $data["so_de"]; ?>" maxlength="255"></td>
      <td><input type="text" name="so_fr" class="input" style="width:100%"  value="<? print $data["so_fr"]; ?>" maxlength="255"></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
  </table>
  <br><input type="submit" class="input1" value="UPDATE">
</form>
</body>
</html>
<? } ?>

  1. Hat jemand ne ahnung warum das nicht geht? ich hab das schon 1000 x gemacht, finde den fehler aber nicht.

    Welchen Fehler?
    Und warum fragst du nicht die Fehler ab, die dir MySQL eventuell liefert?

    1. Wenn ich auf submit klicke wird z.b. das query nicht angezeigt und auch nicht in die DB eingefügt.

      Ich weiß absolut nicht woran es liegen könnte

      1. Da liegt dein Problem:
        <form action="time.php?action=update"

        lass mich raten, der Auslöser für deinen Eintrag heißt action :)

        Schreib das mal so:

        <form action="time.php" ...>
        <input type=hidden" name="action" value="update">

        1. Moin!

          Da liegt dein Problem:
          <form action="time.php?action=update"

          lass mich raten, der Auslöser für deinen Eintrag heißt action :)

          Man kann eigentlich ohne weiteres GET- und POST-Parameter kombinieren, wie hier gezeigt.

          Schreib das mal so:

          <form action="time.php" ...>
          <input type=hidden" name="action" value="update">

          Das schadet allerdings auch nichts. Wird ja ohnehin auf $_REQUEST zugegriffen.

          • Sven Rautenberg
        2. Habe das mal versucht.
          Darin liegt es auch aber auch nicht.

          Das SELECT welches ich danach mache funktioniert ja auch ohne probleme.

          Mein syntax für das UPDATE query ist doch richtitg?

          1. Mein syntax für das UPDATE query ist doch richtitg?

            Wenn MySQL etwas zu bemängeln hat, gibt PHP das durch entsprechende Rückgabewerte der Funktionen bekannt. Was genau bemängelt wurde musst du dann mit mysql_errno() und mysql_error() ermitteln.

            1. ich habe mir mal die fehlermeldung anzeigen lassen

              = no 1064 ER_PARSE_ERROR

              der tritt auf wenn ein ' in meinem input war.

              wie kann ich sowas vermeiden, ich hatte das problem bis jetzt noch nicht gehabt.

              Gibt es einen klassischen regulären ausdruck für sowas um soche zeichen zu codieren , oder was muss ich tun.

              danke

              1. hi,

                = no 1064 ER_PARSE_ERROR
                der tritt auf wenn ein ' in meinem input war.

                wie kann ich sowas vermeiden, ich hatte das problem bis jetzt noch nicht gehabt.

                die php-funktionen mysql_escape_string() bzw. mysql_real_escape_string() sind genau dafür gedacht.

                gruß,
                wahsaga

                --
                "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                1. Die geht nur unter PHP 5

                  gibt es da was für PHP 4

                  1. Die geht nur unter PHP 5

                    Nö, laut Handbuch gibt es mysql_escape_string seit 4.0.3 und mysql_real_escape_string seit 4.3.0

                    1. also in meinem falle wäre das ja dann:

                      print $queryescape = mysql_escape_string($query);
                      mysql_query($queryescape);

                      mein query wird dann aber nicht ausgeführt. was mache ich denn noch falsch?

                      1. hi,

                        print $queryescape = mysql_escape_string($query);
                        mysql_query($queryescape);

                        mein query wird dann aber nicht ausgeführt. was mache ich denn noch falsch?

                        du escapest die komplette query - das ist natürlich blödsinn.
                        escape nur die feldinhalte, die du in die query _einsetzen_ möchtest.

                        gruß,
                        wahsaga

                        --
                        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                        1. yep

                          jetzt funktionierts

                          danke

                      2. Hallo jom,

                        print $queryescape = mysql_escape_string($query);
                        mysql_query($queryescape);
                        mein query wird dann aber nicht ausgeführt. was mache ich denn noch falsch?

                        nein, du musst die Werte die du in dein Query einsetzt maskieren, nicht den ganzen Query. Also statt
                          $query = "SELECT ... mo_de='$_POST[mo_de]', ...";
                        eben
                          $query = "SELECT ... mo_de ='".mysql_real_escape_string($_POST['mo_de'])."', ...";

                        • die Backticks kannst du weglassen, die sind überflüssig (außer du willst reservierte Begriffe als Spalten- bzw. Tabellennamen verwenden)

                        Grüße aus Nürnberg
                        Tobias

                  2. Hallo jom,

                    Die geht nur unter PHP 5

                    Unsinn. mysql_real_escape_string gibt es ab 4.3.0 und mysql_escape_string() sogar schon seit 4.0.3.

                    Grüße aus Nürnberg
                    Tobias

      2. Wenn ich auf submit klicke wird z.b. das query nicht angezeigt und auch nicht in die DB eingefügt.

        Hast du zu Fuß nachgeprüft, ob der Wert auf den du testest auch in der Variable enthalten ist?
        Anders gefragt: Was gibt ein var_dump($_REQUEST); aus (vor dem if einfügen, und davor möglichst noch ein echo '<pre>';)

  2. Die Fehlermeldung wäre interessant :)

  3. Moin!

    Hat jemand ne ahnung warum das nicht geht? ich hab das schon 1000 x gemacht, finde den fehler aber nicht.

    Weil du ihn dir nicht ausgeben läßt!

    mysql_query($query);

    mysql_query($query) or die ("Fehler beim Query: $query<br>".mysql_error());

    • Sven Rautenberg