Update in SQL Datenbank via PHP

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Dr. Standart

Update in SQL Datenbank via PHP

Beitrag 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
Neo007
Mitglied
Beiträge: 131
Registriert: 21.04.2003 16:07

Beitrag von Neo007 »

wieso net einfach phpMyAdmin nehmen ???


Neo007
Benutzeravatar
Steffen
Mitglied
Beiträge: 42
Registriert: 22.12.2001 01:00
Wohnort: Jena
Kontaktdaten:

Beitrag 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.
Dr. Standart

Beitrag von Dr. Standart »

Vielen Dank für Deine Hilfe!

Funktioniert jedoch leider immer noch nicht! :(

Woran kann das liegen?
Benutzeravatar
Steffen
Mitglied
Beiträge: 42
Registriert: 22.12.2001 01:00
Wohnort: Jena
Kontaktdaten:

Beitrag 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>
Dr. Standart

Beitrag 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
Gast

Beitrag 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.
Dr. Standart

Beitrag von Dr. Standart »

Sorry, hab da oben vergessen, den Benutzernamen einzugeben!

Dr. Standart
Dr. Standart

Beitrag von Dr. Standart »

So, jetzt funktioniert es! <form> war an der falschen Stelle!

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

THX 4 Help
Antworten

Zurück zu „Coding & Technik“