Kevinst Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 Hallo, ich habe folgendes Problem, ich möchte eine SQL Abfrage senden um daten zu ändern, aber die Daten werden einfach nicht geändert, hier mein Quelltext <?php mysql_connect("localhost","root","admin") or die ("Keine Verbindung moeglich"); mysql_select_db("skillinventory") or die("Herstellen einer Verbindung fehlgeschlagen"); if(isset($_POST[Produktaendernsave])) { $aendern = "UPDATE produkte Set ProduktName = $_POST[Produktnameneu] WHERE ProduktName = $_POST[neu]"; $update = mysql_query($aendern); echo $update; } echo" <html> <style type=text/css> input.button { height: 20px; width: 200px; font-family: verdana; } </style> <head><title>Daten ändern</title></head> <body><div align=center> <form action=produkt_aendern2.php method=POST> <table> <tr> <td><input type=text name=Produktnameneu value=$_GET[wert]></td> <input type=hidden name=neu value=$_GET[wert]> </tr> <tr> <td><input type=submit class=button name=Produktaendernsave></td> </tr> </form> </div> </body> </html> "; ?> Die Variable $_GET[Wert] übergebe ich über die URL, und Sie enthält auch einen Wert. Sieht jemand einen Fehler? Danke im voraus. Zitieren
flashpixx Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 Hallo, achte mal bitte auf den Syntax. Wenn ich nicht irre müsste es heißen: isset($_POST["Produktaendernsave"])) [/PHP] (analog bei allen anderen assoziativen Arrays) Ebenso würde ich mir das Statement anschauen, der Where-Teil identifiziert den Datensatz, das Set ändert den Wert, da Du bei Where den neuen Namen angibst, wird er wohl kaum einen passenden Datensatz finden HTH Phil Zitieren
Elexil Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 würd auch sagen achte dadrauf, das die übergabevariablen in ' ' stehen also $_GET['variable']. ansonsten gib auch bei der SQL syntax acht. $aendern = "UPDATE produkte Set ProduktName = $_POST[Produktnameneu] schreibe SET groß. auch würde ich dir empfehlen den html teil der seite wirklich als html zu schreiben und nicht in ein echo zu packen. aber das ist nur nebensächlich mfg Elexil Zitieren
Kevinst Geschrieben 5. Mai 2008 Autor Geschrieben 5. Mai 2008 (bearbeitet) danke für deine Antowort, aber die änderung an der Syntax hat leider nichts gebracht. Die Where Anweisung sollte stimmen, da in der Variable $_POST[neu] der Wert von $_Get drin steht also der wert der geändert werden soll. Da habe ich den Namen ein wenig unglücklich vergeben. Also in die If Anweisung wird gesprungen, dass konnte ich durch ein paar echos herausfinden und die Werte stimmen anscheinend auch alle, nur die Abfrage wird nicht durchgeführt. Die Tabellennamen habe ich auch schon mit den im Quelltext angegebenen verglichen und die stimmen auch alle. Nur wird die Abfrage leider nicht durchgeführt Das Ändern von Set in SET hat leider genauso wenig gebracht. Bearbeitet 5. Mai 2008 von Kevinst Zitieren
flashpixx Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 Führe mal das gewünschte Statement per Hand im DBMS aus und dann lässt Du Dir am besten mal mitloggen was Dein Code sendet und vergleichst (Logging beim DBMS hoch drehen) Phil Zitieren
geloescht_JesterDay Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 ... und dann lässt Du Dir am besten mal mitloggen was Dein Code sendet... Ich schätze mal er meckert, weil Produktname sehr wahrscheinlich ein String ist und er keine ' um den Wert findet. Zitieren
flashpixx Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 Hallo, Ich schätze mal er meckert, weil Produktname sehr wahrscheinlich ein String ist und er keine ' um den Wert findet. so etwas tippe ich auch, oder es ist nicht case-(in)sensitiv bzw getrimmt. Aber bevor ich ins Blaue rate, einfach den Logauszug anschauen Phil P.S.: Ich würde da auf ADODB setzen und Preparestatements verwenden Zitieren
Kevinst Geschrieben 5. Mai 2008 Autor Geschrieben 5. Mai 2008 (bearbeitet) Vielen Dank für eure Hilfe, ich habe es einfach nochmal neu geschrieben und jetzt gehts. Es lag wohl an den ' '. So sieht mein Quelltext jetzt aus: <html> <head> <title> Produkt ändern</title> </head> <body> <?php mysql_connect("localhost","root","admin") or die ("Keine Verbindung moeglich"); mysql_select_db("skillinventory") or die ("Herstellen einer Verbindung fehlgeschlagen"); if(isset($_POST['aendern'])) { $neuerwert=$_POST['neu']; $alterwert=$_POST['wert']; $abfrage = "UPDATE produkte SET ProduktName = '$neuerwert' WHERE Produktname = '$alterwert' "; $update = mysql_query($abfrage); echo mysql_error(); } ?> <form action="produkt_aendern2.php" method="POST"> <input type="text" name="neu" value="<?php echo $_GET['wert']?>"> <input type="hidden" name="wert" value="<?php echo $_GET['wert']?>"> <input type="submit" name="aendern" value="ändern"> </form> </body> </html> Vielen Dank nochmal! Bearbeitet 5. Mai 2008 von Kevinst Zitieren
Kevinst Geschrieben 7. Mai 2008 Autor Geschrieben 7. Mai 2008 Kann mir jemand sagen, warum diese Abfrage nicht funktioniert? Es gibt eine Tabelle namens Land in der es auch eine Spalte namens Land und eine Spalte namens LandID gibt. Und ich möchte den Wert der Spalte LandID aus der Zeile ausgegeben bekommen, in der der Wert in der Spalte Land mit dem Wert den ich aus dem Formuar übergeben bekomme übereinstimmt. $land1=$_POST["land"]; $abfrage1="SELECT LandID FROM Land WHERE Land = $land1"; $ergebnis1=mysql_query($abfrage1); echo mysql_error(); Zitieren
flashpixx Geschrieben 7. Mai 2008 Geschrieben 7. Mai 2008 Kann mir jemand sagen, warum diese Abfrage nicht funktioniert? Warum fragst Du? echo mysql_error(); Die Antwort sagt Dir Dein echo, falls ein syntaktischer Fehler vorliegt. Andernfalls kennst nur Du die Antwort Phil Zitieren
dr.dimitri Geschrieben 7. Mai 2008 Geschrieben 7. Mai 2008 SELECT LandID FROM Land WHERE Land = $land1 1. Fehler: Keine Bindvariablen -> Potentiell anfällig für SQL Injection. 2. Fehler: Strings werden in SQLs die keine Binds verwenden mit ' ' eingeschlossen. Das fehlt bei Dir. Dim Zitieren
Amstelchen Geschrieben 7. Mai 2008 Geschrieben 7. Mai 2008 weil land vermutlich ein CHAR ist und du keine anführungszeichen verwendest. ist das hier ein ratespiel oder was? s'Amstel Zitieren
Kevinst Geschrieben 8. Mai 2008 Autor Geschrieben 8. Mai 2008 (bearbeitet) doppelter Eintrag Bearbeitet 8. Mai 2008 von Kevinst Zitieren
Kevinst Geschrieben 8. Mai 2008 Autor Geschrieben 8. Mai 2008 Hallo, kann mir jemand helfen? ich habe nun die folgenden 3 Tabellen: Mitarbeiterdaten: MitarbeiterID Vorname Nachname RegionID Kenntnisse: KenntnissID MitarbeiterID Produkt Note Regionen: RegionID Region Die Tabellen Sollen mit Hilfe einer SQL Abfrage ausgelesen werden. Bis jetzt schaffe ich es die Spalten Mitarbeiterdaten.Vorname,Mitarbeiterdaten.Nachname und Kenntnisse.Note mit folgender Abfrage auszulesen: SELECT Vorname, Nachname, Note FROM Mitarbeiterdaten INNER JOIN Kenntnisse ON (Mitarbeiterdaten.MitarbeiterID = Kenntnisse.MitarbeiterID) WHERE Kenntnisse.ProduktID = 18 Jetzt brauche müsste ich noch zusätzlich Die Spalte Regionen.Region über die Spalte Mitarbeiterdaten.Region ID auslesen, weiss aber nicht wie ich die Abfrage dafür verschachteln muss. Kann mir jemand helfen? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.