Einfacher mySQL Update Befehl geht nicht?

sugar

Erfahrenes Mitglied
Hallo, ich habe ein kleines Problem. Mein PHP Befehl zum Ändern eines Eintrags funktioniert auf einmal nicht mehr!? Liegt es an "register globals"? Ich habe daher schon das "get" verwendet und damit funktioniert auch das Eintragen in die Datenbank nur jetzt geht auf einmal das Ändern nicht mehr! Hier der Code:
PHP:
if ($_GET['do']=="edit") {
$txt=($HTTP_POST_VARS[text]);
	if (($txt<>"")) {

		include "../config.php";
		$connect=mysql_connect("$host","$user","$pass");
		mysql_select_db("$db");
		
$id=($HTTP_POST_VARS[id]);
$header=($HTTP_POST_VARS[header]);
$hot=($HTTP_POST_VARS[hot]);
$objektid=($HTTP_POST_VARS[objektid]);
$ort=($HTTP_POST_VARS[ort]);
$lage=($HTTP_POST_VARS[lage]);
$preis1=($HTTP_POST_VARS[preis1]);
$preis2=($HTTP_POST_VARS[preis2]);
$preis3=($HTTP_POST_VARS[preis3]);
$bilder=($HTTP_POST_VARS[bilder]);
$url1=($HTTP_POST_VARS[url1]);
$url2=($HTTP_POST_VARS[url2]);
$url3=($HTTP_POST_VARS[url3]);
$url4=($HTTP_POST_VARS[url4]);
$url5=($HTTP_POST_VARS[url5]);

		$ind=1;

		$anf="UPDATE property SET header='$header',hot='$hot',objektid='$objektid',preis1='$preis1',preis2='$preis2',preis3='$preis3',text='$text' WHERE id='$id'";

		$erg=mysql_query($anf);

		mysql_close($connect);

		echo'
		 <tr>
		  <th colspan="4" bgcolor="#E2E2E2"></th>
		 </tr>
		 <tr>
		  <th colspan="4" bgcolor="#FFFFFF"><p><span style="color:#ff0000">Erfolgreich editiert!</span></p></th>
		 </tr>';
	}else {
		echo'
		 <tr>
		  <th colspan="4" bgcolor="#E2E2E2"></th>
		 </tr>
		 <tr>
		  <th colspan="4" bgcolor="#FFFFFF"><p><span style="color:#ff0000">Änderung fehlgeschlagen! Bitte wiederholen!</span></p></th>
		 </tr>';
	}
}

Die ID wird auch übergeben, das kann ich in der Adresszeile sehen: admin.php?do=edit&id=6

Kann mir jemand helfen?

sugar
 
also, es heisst $_POST und nicht $HTTP_POST_VARS zudem werden die schlüssel eines Array-Elements in Anführungszeichen gepackt.

Zu deinem Problem:
lass doch mal den Query ausgeben wie er geparsed aussieht, denn vllt fehlt ist die Variable id inkorrekt.
Und du solltest deinen Input escapen, da sonst SQL-Injections möglich sind.
 
Vielen Dank für deine Antwort! Ich habe das "_POST" geändert allerdings ohne Erfolg.

Leider bin ich noch ein relativer Anfänger in mySQL und habe den letzten Teil leider nicht verstanden. :confused: Sorry!
 
Probiers mal damit.

PHP:
if ($_GET['do'] == 'edit') { 
    $txt = $_POST['text']; 
    if (isset($text)) { 
        include '../config.php'; 
     
        $connect = mysql_connect("$host","$user","$pass"); 
        $select = mysql_select_db("$db"); 
         
        $id = $_POST['id']; 
        $header = $_POST['header']; 
        $hot = $_POST['hot']; 
        $objektid = $_POST['objektid']; 
        $ort = $_POST['ort']; 
        $lage = $_POST['lage']; 
        $preis1 = $_POST['preis1']; 
        $preis2 = $_POST['preis2']; 
        $preis3 = $_POST['preis3']; 
        $bilder = $_POST['bilder']; 
        $url1 = $_POST['url1']; 
        $url2 = $_POST['url2']; 
        $url3 = $_POST['url3']; 
        $url4 = $_POST['url4']; 
        $url5 = $_POST['url5']; 

        $ind=1; 

        $update = mysql_query("UPDATE property SET header = '$header',hot = '$hot', objektid = '$objektid', preis1 = '$preis1', preis2 = '$preis2', preis3 = '$preis3', text = '$text' WHERE id = '$id'"); 

        mysql_close($connect); 

         echo' 
         <tr> 
          <th colspan="4" bgcolor="#E2E2E2"></th> 
         </tr> 
         <tr> 
          <th colspan="4" bgcolor="#FFFFFF"><p><span style="color:#ff0000">Erfolgreich editiert!</span></p></th> 
         </tr>'; 
    }else { 
        echo' 
         <tr> 
          <th colspan="4" bgcolor="#E2E2E2"></th> 
         </tr> 
         <tr> 
          <th colspan="4" bgcolor="#FFFFFF"><p><span style="color:#ff0000">Änderung fehlgeschlagen! Bitte wiederholen!</span></p></th> 
         </tr>'; 
    } 
}
Spare nicht mit Freizeichen bzw. Einrückungen, welche du konsequent durchziehst, dass bringt einiges mehr Übersicht
Es wäre Hilfreich den Fehlercode zu sehen falls es weiterhin nicht funktioniert.
Gruß Niko
 
Zuletzt bearbeitet:
Danke für deine Antwort Niko, du hast Recht, ich sollte den Code besser einrücken. So erkennt man sicher die Fehler auch eher. Ich habe die Änderungen im Code übernommen jedoch weiterhin ohne Erfolg. Problem ist, es gibt gar keine Fehlermeldung! Er gibt die Erfolgsmeldung aus, aber das war's! Die Änderungen wurden in der Datenbank nicht übernommen. Komisch ist, dass ich das gleiche Script auf anderen Servern laufen lassen konnte. Ich habe jeweils nur Felder hinzugefügt oder entfernt. Jetzt bin ich bei United-Domains und habe nur Schwierigkeiten. Zunächst hat er die POST Befehle nicht gemacht, das konnte ich aber hinkriegen. Das Eintragen in die Datenbank klappt auch nur das Ändern will einfach nicht funktionieren! :mad:

Gruß
sugar
 
Schon mal daran gedacht, eine (eventuell vorliegende) Fehlermeldung von MySQL zurückgeben zu lassen? ;) Siehe [phpf]mysql_error[/phpf]
In deinem Fall...
PHP:
$update = mysql_query("UPDATE `property` SET `header` = '$header', `hot` = '$hot', `objektid` = '$objektid', `preis1` = '$preis1', `preis2` = '$preis2', `preis3` = '$preis3', `text` = '$text' WHERE `id` = '$id'") or die(mysql_error());
Und achte auch darauf, dass du keine von MySQL reservierten Wörter als Tabellen oder Spaltennamen verwendest (ist jetzt hier nicht der Fall, aber ich war mir bei text und property nicht sicher). Solltest du doch ein solches Wort verwenden, dann schreib es in Hochkommata (`). Am besten immer machen, um solche Fehler von vorn herein auszuschließen.
 
Zuletzt bearbeitet:
Ich habe mysql_error mal eingefügt. Danke für den Hinweis! Leider gibt er aber keine Fehlermeldung aus. Bei einem UPDATE Befehl kann man doch beliebige Felder updaten oder? Oder muss man die Reihenfolge einhalten wie beim Einfügen in die Datenbank? Weil ich nur ein paar Felder bearbeiten will und nicht alle.

Gruß
sugar
 
Die Reihenfolge der zu aktualisierenden Felder ist beliebig, daran wird's nicht liegen. Hast du es so wie ich es oben geschrieben hab eingefügt? Der alleinige Aufruf von [phpf]mysql_error[/phpf] bringt nämlich nichts. Mann mus es auch an den Browser ausgeben (z.B. wie oben mittels [phpf]die[/phpf] oder [phpf]echo[/phpf] geht z.B. auch...).
 
Wo genau geb ich es denn aus? Ich habe es jetzt so umgeschrieben wie du gesagt hast:
PHP:
        $update = mysql_query("UPDATE `property` SET `header` = '$header',`hot` = '$hot', `objektid` = '$objektid', `preis1` = '$preis1', `preis2` = '$preis2', `preis3` = '$preis3', `text` = '$txt' WHERE `id` = '$id'") or die(mysql_error());
 
Ja ok, so ist schon richtig :) Ich dachte, du hättest es vielleicht einfach so in den Quelltext geschrieben...
 
Zurück