Problem beim Ändern eines Datensatzes in SQL

Linus28

Grünschnabel
Hallo,
brauche etwas hilfe bei meinem problem. ich hab ein habe ein kleines content management system in php geschrieben. im hintergrund läuft auf nem webserver eine datenbank, die die informationen für eine homepage bereit stellt. hab zwar keinplan von php, aber ich hab alles das was weiss im selbststudium erabeitet und irgendwie auch zum laufen bekommen. bis auf das ändern von datensätzen ist alles schön.

zu meinem Problem:
im admin bereich vom cms befindet sich ein formular "edit.php", welches einen datensatz ausliest und in formular felder einträgt. nur wenn ich änderungen im formular durchführe und per link abschicken möchte, schreibt es nur die "id" in die tabelle und lässt den rest weg.
da ich "or die("Error: " . mysql_error()" hinter meine SQL Syntax geschrieben hab, ist mir dabei aufgefallen, dass die variablen bis auf "$id" leer sind.

Error Meldung:
UPDATE events SET id='67', days='', day='', month='', year='', time='', location='', adress='', plz='', city='' ,title='' ,subtitle='', text='', lineup='', link='', link1='', status='' WHERE id = '67'

ich weiss nicht mehr weiter, ich hoffe sehr das ihr mir dabei weiterhelfen könnt.


Code:
<?php


if ($edit == "ja"){$tabellenname="events";
$aendern = "UPDATE $tabellenname SET id='$id', days='$days', day='$day', month='$month', year='$year', time='$time', location='$location', adress='$adress', plz='$plz', city='$city' ,title='$title' ,subtitle='$subtitle', text='$text', lineup='$lineup', link='$link', link1='$link1', status='$status' WHERE  id = '$id'" or die("Error: " . mysql_error());
mysql_connect('')or die ("Konnte keine Verbindung zur Datenbank herstellen");
mysql_select_db("");
mysql_query($aendern)or die("Error: " . mysql_error()); 



echo ("$aendern");
	echo "Eintrag erfolgreich geändert<BR>
            <a href=\"javascript:history.back(1)\">zurück</a> ";}


$tabellenname="events";
$sql="SELECT * FROM $tabellenname WHERE id='$id' ORDER BY month ASC"or die("Error: " . mysql_error());
$link = mysql_connect('*********', '**********', '**********')or die("Error: " . mysql_error());
mysql_select_db("*************", $link)or die("Error: " . mysql_error());
$result = mysql_query($sql,$link)or die("Error: " . mysql_error());


 while($row = mysql_fetch_array($result)) {
  // Ergebnis in Variable schreiben
  $id = $row["id"];
  $days = $row["days"];
  $day = $row["day"];
  $month = $row["month"];
  $year = $row["year"];
  $time = $row["time"]; 
  $location = $row["location"];
  $adress = $row["adress"];
  $plz = $row["plz"];
  $city = $row["city"];
  $title = $row["title"];
  $subtitle = $row["subtitle"];
  $text = $row["text"];
  $lineup = $row["lineup"];
  $link = $row["link"];
  $link1 = $row["link1"];

echo ("<form action='edit.php' method='post'>");
echo ("<input type='hidden' name='id' value='$id'>");

echo ("<table width='100%' border='0'>");


echo ("<tr>");
echo ("<th width='35%' scope='col'><div align='left'><span class='Stil7'>Datum | Uhrzeit:<br><input type='text' size='3' name='days' value='$days' ></input> | <input type='text' size='3' name='day' value='$day' ></input><input type='text' size='10' name='month' value='$month' ></input><input type='text' size='5' name='year' value='$year' ></input> | <input type='text' size='5' name='time' value='$time' ></input><br>Club:<br><input type='text' size='50' name='location' value='$location' ></input><br>Strasse Nr.<br><input type='text' size='50' name='adress' value='$adress' ></input><br>PLZ | Ort:<br><input type='text' size='4' name='plz' value='$plz' ></input> | <input type='text' size='40' name='city' value='$city' ></input><br>Titel:<br><input type='text' size='50' name='title' value='$title' ></input><br>Untertitel:<br><input type='text' size='50' name='subtitle' value='$subtitle' ></input></span><span class='Stil7'><br>Link für Flyer front:<br><input type='text' size='50' name='link' value='$link' ></input><br>Link für Flyer back:<br><input type='text' size='50' name='link1' value='$link1' ></input></span></div></th>");
echo ("<th scope='col'><div align='left'><span class='Stil7'>Beschreibung:<br><textarea type='longtext' name='text' rows='9' cols='70%' value='$text'>$text</textarea><br>Lineup:<br><textarea type='text' name='lineup' cols='70%' rows='5' value='$lineup'>$lineup</textarea></div></span></th>");
echo ("</tr>");  
echo ("</table>");
echo ("</form>");

echo ("<tr>");
echo ("<td colspan='2'><a href=\"edit.php?edit=ja&id=$id&tabelle=$tabellenname\">Änderung eintragen</a></td></tr>"); }

?>

Gruss, Markus
 
Zuletzt bearbeitet:
Wo werden denn die ganzen Variablen deklariert? Werden sie überhaupt deklariert?

Und irgendwie fehlt bei der Fehlermeldung was... Wenn du schon die Errormessage nur partiell hier angibst, wäre zumindest der vollständige Errorcode (echo [phpf]mysql_errno[/phpf]) ganz nett - Plus die vollständige Fehlermeldung (echo [phpf]mysql_error[/phpf]), wenn das möglich ist.

Des Weiteren frage ich mich, warum andauernd die Scriptausführung sofort ausgesetzt wird, wenn mal nen kleiner MySQL-Error kommt. Die wichtigsten Informationen, was schief gelaufen ist, werden immer ausgegeben, somit ist das auch kein effektiver Schutz vor Angreifern :rolleyes:

Statt der OR die('print something') wäre doch ein Abfangen des Fehlers viel geschickter. Die Fehlerausgabe kannst du ruhig zum Prüfen und Testen nutzen, aber später ist es ein potentielles Sicherheitsrisiko. Das aber nur mal so nebenbei.

Erstmal also bitte die Ausgabe von mysql_error und mysql_errno vollständig angeben, und vor allem sagen, wo die Variablen deklariert werden sollen.
 
Hi,
erstmal vielen dank für die schnelle antwort.
vergesst das bitte mit der error meldung, dat war nämlich keine, sorry. hab nur vergessen das echo ("$aendern"); aus der if schleife zu nehmen.

Code:
if ($edit == "ja"){$tabellenname="events";
$aendern = "UPDATE $tabellenname SET id='$id', days='$days', day='$day', month='$month', year='$year', time='$time', location='$location', adress='$adress', plz='$plz', city='$city' ,title='$title' ,subtitle='$subtitle', text='$text', lineup='$lineup', link='$link', link1='$link1', status='$status' WHERE  id = '$id'" or die("Error: " . mysql_error());
mysql_connect('')or die ("Konnte keine Verbindung zur Datenbank herstellen");
mysql_select_db("");
mysql_query($aendern)or die("Error: " . mysql_error()); 



echo ("$aendern");
	echo "Eintrag erfolgreich geändert<BR>
            <a href=\"javascript:history.back(1)\">zurück</a> ";}

variablen deklarieren: dachte das hätte ich getan, aber wo du das grad ansprichst. denk ich mal das ich es nicht getan hab. wüsste auch ehrlich gesagt nicht wie ich das anders machen kann.
edit.php hat den datensatz schon geändert, nur hat dabei einige spalten leer gelassen.
 
Zuletzt bearbeitet:
Hi,
erstmal vielen dank für die schnelle antwort.
vergesst das bitte mit der error meldung, dat war nämlich keine, sorry. hab nur vergessen das echo ("$aendern"); aus der if schleife zu nehmen.

Code:
if ($edit == "ja"){$tabellenname="events";
$aendern = "UPDATE $tabellenname SET id='$id', days='$days', day='$day', month='$month', year='$year', time='$time', location='$location', adress='$adress', plz='$plz', city='$city' ,title='$title' ,subtitle='$subtitle', text='$text', lineup='$lineup', link='$link', link1='$link1', status='$status' WHERE  id = '$id'" or die("Error: " . mysql_error());
mysql_connect('')or die ("Konnte keine Verbindung zur Datenbank herstellen");
mysql_select_db("");
mysql_query($aendern)or die("Error: " . mysql_error()); 



echo ("$aendern");
	echo "Eintrag erfolgreich geändert<BR>
            <a href=\"javascript:history.back(1)\">zurück</a> ";}

variablen deklarieren: dachte das hätte ich getan, aber wo du das grad ansprichst. denk ich mal das ich es nicht getan hab. wüsste auch ehrlich gesagt nicht wie ich das anders machen kann.
edit.php hat den datensatz schon geändert, nur hat dabei einige spalten leer gelassen.
 
Wie es aussieht, arbeitest du mit einigen kritischen PHP Ini Settings. So vertraust du zB darauf, dass per Post und Get übermittelte Variablen einfach in Variablenform bereitstellen.

Bevor großartig weitere Tipps gegeben werden von meiner Seite, würde ich gerne wissen, was bei dir im Rahmen der Möglichkeiten ist.
Bitte füg daher die Ausgabe, die folgende Codezeilen erzeugen, bitte hier ein:

PHP:
<?php
header('Content-Type: text/plain');

echo PHP_OS . "\n";
echo "Register Globals: " . ini_get('register_globals') . "\n";
// eventuell weitere oder komplett:
// print_r(ini_get_all());

Normalerweise werden Werte im URL-Querystring in $_GET gesammelt...

Also zB
PHP:
$id = (int) $_GET['id'];

Und Werte, die via POST gesendet werden, in $_POST:
PHP:
$value = (string) $_GET['post'];

Und wenn du diese Werte hast, solltest du sie nicht direkt in die Anfrage einfügen sondern vorbereiten:
PHP:
$escaped_value = mysql_escape_string($value);
// oder
$escaped_value = mysql_real_escape_string($value);

Diese speziellen Werte kannst du dann in dein Query einbauen. Sollten dir hier schon Grundlagen fehlen, schau bitte erst ein paar Tutorials zum Thema PHP und SQL an. Das ist wichtig, sonst wird es a) nix werden mit Funktionalität und b) auch nix mit Sicherheit, Performance und Usability (englische Begriffe sind immer schön ;) ).

Links findest du hier zu den verschiedenen Themen zu Genüge.
 
hi,
ich hab es gelöst, endlich nach zwei monaten.
jaaaaa, es t. :)

ich hab dies geändert
Code:
echo ("<form action='edit.php' method='post'>");
und daraus das gemacht
Code:
echo ("<form action='edit.php?edit=ja' method='post'>");

am ende vom formular hab ich einen "submit" button eingefügt und den eigentlich gedachten auslöser entfernt.
Code:
echo ("<td colspan='2'><a href=\"edit.php?edit=ja&id=$id&tabelle=$tabellenname\">Änderung eintragen</a></td></tr>"); }

viele grüsse aus hannover
 
Zurück