Seite 1 von 1

Update in SQL Datenbank via PHP

Verfasst: 01.05.2003 17:23
von Dr. Standart
Tag zusammen,

habe ein Problem. Ich will mir eine Seite bauen, in welcher ich die Daten meiner Datenbank ändern kann, hab nur leider keine Ahnung, wie ich das machen muss.
In der Datenbank befinden sich Termine, welche auf einer Homepage veröffentlicht werden sollen.

Wenn ich das richtig verstanden habe, muss ich den Inhalt der Datenbank in Formularfelder übergeben und dann mittels UPDATE where ID und soweiter das Update durchführen. Dazu hab ich mir zwei Dateien gebaut.

Code: Alles auswählen

       <tr>
         <td><input type=\"Text\" name=\"ID\" value=\"$row->ID\" size=\"2\" maxlength=\"\"</td>
         <td><input type=\"Text\" name=\"tag\" value=\"$row->Tag\" size=\"\" maxlength=\"\"</td>
         <td><input type=\"Text\" name=\"datum\" value=\"$row->Datum\" size=\"\" maxlength=\"\"</td>
         <td><input type=\"Text\" name=\"uhrzeit\" value=\"$row->Uhrzeit\" size=\"\" maxlength=\"\"</td>
         <td><a href='change.php?changeentry=$row->ID'>Update</a></td>
       </tr>
Wenn ich die Datei aufrufe erscheinen die Daten der Datenbank in den Formularfeldern, wo ich sie auch ändern kann. In der letzten Spalte ist dann der link "update".

Die change.php sieht so aus:

Code: Alles auswählen

    $link = mysql_connect("$dbhost", "$dbuser", "$dbpass")
    mysql_select_db("$database")

    $aendern = "UPDATE termine SET ID = '', Tag = '$tag', Datum = '$datum', Uhrzeit = '$zeit' WHERE ID='$changeentry'
   
      $update = mysql_query($aendern);

       mysql_close($link);

       ?>
Es wird keine Fehlermeldung ausgegeben, in der Datenbank ändert sich jedoch leider nicht. Wie kriege ich jetzt die geänderten Daten in die Datenbank?

Wer kann mir eine passende Lösung verraten? Ich hab leider nicht so viel Ahnung davon. Bis vor einer Woche wusste ich noch nicht einmal, was PHP und SQL ist und das es sowas gibt :D !

Danke schon mal im Voraus!

Dr. Standart

Verfasst: 01.05.2003 17:42
von Neo007
wieso net einfach phpMyAdmin nehmen ???


Neo007

Verfasst: 01.05.2003 17:47
von Steffen
Also ersteinmal mußt Du die geänderten Feldinhalte in die change.php bekommen. Dazu solltest Du keinen Link, sondern einen Submitbutton verwenden:
statt

Code: Alles auswählen

<a href='change.php?changeentry=$row->ID'>Update</a>
also

Code: Alles auswählen

<input type=\"submit\" name=\"submit\" value=\"Update\">
In der change.php solltest Du die SQL-Anfrage in etwa so gestalten:
statt

Code: Alles auswählen

$aendern = "UPDATE termine SET ID = '', Tag = '$tag', Datum = '$datum', Uhrzeit = '$zeit' WHERE ID='$changeentry'
also

Code: Alles auswählen

$aendern = "UPDATE termine SET Tag='" . $tag . "', Datum='" . $datum . "', Uhrzeit='" . $uhrzeit . "' WHERE ID=" . $ID;
Es ist wichtig, daß die Variablen in der change.php genauso heißen wie die Namens-Attribute der Formularfelder, d.h.

Code: Alles auswählen

name=\"uhrzeit\"
dann auch

Code: Alles auswählen

$uhrzeit
. Außerdem solltest Du die ID nicht ändern, denn wie soll SQL etwas updaten, was es dann gar nicht mehr so gibt. Du mußt den Wert der ID aber trotzdem in die change.php bekommen. Dazu gibt es unsichtbare Formularfelder (type="hidden"):
statt

Code: Alles auswählen

<input type=\"Text\" name=\"ID\" value=\"$row->ID\" size=\"2\" maxlength=\"\">
also

Code: Alles auswählen

<input type=\"hidden\" name=\"ID\" value=\"" . $row->ID . "\">
Änderst Du die ID, dann würde sich ein völlig neuer Eintrag ergeben. Kommt darauf an, was Du wirklich mit dem "Update" bezweckst.

Verfasst: 01.05.2003 18:05
von Dr. Standart
Vielen Dank für Deine Hilfe!

Funktioniert jedoch leider immer noch nicht! :(

Woran kann das liegen?

Verfasst: 02.05.2003 08:19
von Steffen
Das kann noch 'ne ganze Menge Ursachen haben, z.B. daß die Spalten in der Datenbank anders heißen als in der UPDATE-Anfrage. Oder im Rest des Quelltextet stimmt nochetwas nicht.
Was um die Formularfelder noch rum muß, ich dachte das ist klar, ist das Form-Tag:

Code: Alles auswählen

<form action=\"change.php\" method=\"post\">
 <table>
  <tr> 
   <td><input type=\"Text\" name=\"tag\" value=\"" . $row->Tag . "\" size=\"\" maxlength=\"\"></td>
   <td><input type=\"Text\" name=\"datum\" value=\"" . $row->Datum . "\" size=\"\" maxlength=\"\"></td>
   <td><input type=\"Text\" name=\"uhrzeit\" value=\"" . $row->Uhrzeit . "\" size=\"\" maxlength=\"\"></td>
   <td><input type=\"hidden\" name=\"ID\" value=\"" . $row->ID . "\"><input type=\"submit\" name=\"submit\" value=\"Update\"></td> 
  </tr>
 </table>
</form>

Verfasst: 02.05.2003 13:52
von Dr. Standart
Den <form> Teil hatte ich schon, die korrekten Bezeichnungen ebenfalls.

Mir ist folgendes aufgefallen:
Ich kann immer nur den Termin ändern, der ganz unten in der Liste steht. Dort kann ich alle Felder ohne Probleme ändern. Will ich jedoch den zweiten Termin von unten oder einen mittendrin ändern, dann funktioniert das nicht. Die Frage ist nur, warum.

Ich habe in die Datenbank noch zwei Spalten hinzugefügt, so dass die change.php jetzt so aussieht:

Code: Alles auswählen

<?php

       include ("../config_php/cfg.php");

    $link = mysql_connect("$dbhost", "$dbuser", "$dbpass");

    mysql_select_db("$database");

    $aendern = "UPDATE termine SET Tag='" . $tag . "', Datum='" . $datum . "', Uhrzeit='" . $uhrzeit . "', Ort='" . $ort . "', Bemerkungen='" . $bemerkungen . "' WHERE ID=" . $ID;

    $update = mysql_query($aendern);

  echo "<center>Termin wurde geändert.";
       echo "<meta http-equiv='refresh' content='1; URL=termine.php'></center>";

       mysql_close($link);

       ?>
Wie gesagt, ändern kann ich nur den untersten Termin. Egal welchen Termin ich ändern will, es tritt folgendes auf:
Wenn ich einen Eintrag ändern will, so wird "Termin wurde geändert" ausgegeben und die Seite immer wieder neu aufgebaut, anstatt zur termine.php zurückzukehren.

Irgendwie is da noch der Wurm drin...

Gruß,
Dr. Standart

Verfasst: 02.05.2003 15:34
von Gast
[quote="Dr. Standart"]
Wenn ich einen Eintrag ändern will, so wird "Termin wurde geändert" ausgegeben und die Seite immer wieder neu aufgebaut, anstatt zur termine.php zurückzukehren.
[quote]
Das habe ich in den Griff bekommen, jetzt besteht nur noch das Problem, dass ich nur den letzten Eintrag ändern kann, die anderen nicht.

Verfasst: 02.05.2003 15:35
von Dr. Standart
Sorry, hab da oben vergessen, den Benutzernamen einzugeben!

Dr. Standart

Verfasst: 02.05.2003 15:51
von Dr. Standart
So, jetzt funktioniert es! <form> war an der falschen Stelle!

Nächstes Mal weiß ich, wie es geht! :-)

THX 4 Help