ERLEDIGT
JA
JA
ANTWORTEN
14
14
ZUGRIFFE
389
389
EMPFEHLEN
-
12.01.11 10:02 #1
- Registriert seit
- Dec 2010
- Beiträge
- 164
Hallo guten Morgen,
ich hab ein Problem mit Datensätze ändern
derzeit sieht mein Code so aus:
die Daten werden nicht übernommen. Ich hoff ihr habt nen Vorschlag was falsch läuft.PHP-Code:<html>
<body>
<form action="" method="GET">
<div align="right"/>
Userid <input type="text" name="Userid"><br>
Vorname<input type="text" name="Vorname"><br>
Nachname <input type="text" name="Nachname"><br>
Firma <input type="text" name="Firma" ><br>
Email<input type="text" name="Email" ><br>
Telefon<input type="text" name="Telefon" ><br>
Laufzeit<input type="text" name="Laufzeit"><br>
Lizenz PC <input type="text" name="PCLizenzen" ><br>
Seriennummer <input type="text" name="dpSrn" ><br>
Datum Aktiv <input type="text" name="DatumAktiv" ><br>
Datum End Aktiv <input type="text" name="DatumEndAktiv" ><br>
<input type=submit name=submit value="Formular absenden"><br>
<?php
$Userid="";
$Host = "localhost";
$User = "david";
$Password = "a";
$dbname = "ABMC-Datenbank";
$tbl="Kunden";
mysql_connect('localhost', 'david', 'a') or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db($dbname) or die ("Keine Verbindung möglich: ".mysql_error());
if(isset($_GET['submit'])) {
mysql_select_db($dbname);
mysql_query('UPDATE $tbl SET Vorname=$_GET["Vorname"] WHERE Userid=$_GET["Userid"]');
}
mysql_close();
?>
</div>
</form>
</body>
</html>
-
Nunja, ich kann dir noch den Tipp gebe, dass Strings die in einfache ' gefasst sind, nicht kompliert werden - also Variabeln darin werden nicht mit dem Variableninhalt überschreiben.Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
[PHP] [MySQL] Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
12.01.11 10:24 #3
- Registriert seit
- Dec 2010
- Beiträge
- 164
ich hab vorher update anders geschrieben
mysql_query("UPDATE $tbl SET Vorname=$_GET['Vorname'] WHERE Userid=$_GET['Userid']");
Nur kommt hier die Fehlermeldung wegen "
auch mit error_reporting ist dort kein Fehler bzw wird keiner angezeigt.
-
12.01.11 10:37 #4
- Registriert seit
- Dec 2010
- Beiträge
- 164
So sieht mein derzeitiger Code aus wenn ich in die Browserzeile eingebPHP-Code:<html>
<body>
<form action="" method="GET">
<div align="right"/>
Userid <input type="text" name="Userid" value="<?php echo @$_GET['Userid'] ?>"><br>
Vorname<input type="text" name="Vorname" value="<?php echo @$_GET['Vorname'] ?>"><br>
Nachname <input type="text" name="Nachname" value="<?php echo @$_GET['Nachname'] ?>"><br>
Firma <input type="text" name="Firma" value="<?php echo @$_GET['Firma'] ?>"><br>
Email<input type="text" name="Email" value="<?php echo @$_GET['Telefon'] ?>"><br>
Telefon<input type="text" name="Telefon" value="<?php echo @$_GET['Telefon2'] ?>" ><br>
Laufzeit<input type="text" name="Laufzeit"value="<?php echo @$_GET['Laufzeit'] ?>"><br>
Lizenz PC <input type="text" name="PCLizenzen" value="<?php echo @$_GET['PCLizenzen'] ?>" ><br>
Seriennummer <input type="text" name="dpSrn" value="<?php echo @$_GET['dpSrn'] ?>" ><br>
Datum Aktiv <input type="text" name="DatumAktiv" value="<?php echo @$_GET['DatumAktiv'] ?>" ><br>
Datum End Aktiv <input type="text" name="DatumEndAktiv" value="<?php echo @$_GET['DatumEndAktiv'] ?>" ><br>
<input type=submit name=submit value="Formular absenden"><br>
<?php
if (isset($_GET) {
$Host = "localhost";
$User = "david";
$Password = "a";
$dbname = "ABMC-Datenbank";
$tbl="Kunden";
mysql_connect('localhost', 'david', 'a') or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db($dbname) or die ("Keine Verbindung möglich: ".mysql_error());
$Vorname=$_GET["Vorname"];
mysql_query('UPDATE $tbl SET $Vorname WHERE Userid=$_GET["Userid"]');
}
mysql_close();
?>
</div>
</form>
</body>
</html>
dbaendern.php?Userid=4&Vorname=Dave steht es zwar nun im Formular aber nicht in der Datenbank.
-
12.01.11 10:39 #5
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Mach doch mal
Code php:1
mysql_query("UPDATE $tbl SET Vorname=$_GET['Vorname'] WHERE Userid=$_GET['Userid']") or die(mysql_error());
Dann wirst du vermutlich eine Fehlermeldung bekommen, das bei der Spalte Vorname die Quotes fehlen.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
12.01.11 10:45 #6
- Registriert seit
- Dec 2010
- Beiträge
- 164
ich bekomm weder ne Fehlermeldung noch einen Eintrag
ach schon klar hab grad die falsche datei geöffnet tschuldigung +lol+
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /srv/www/htdocs/dbaendern2.php on line 29
ich sagte doch hab ' und " ausgetauscht
Geändert von puschelchen (12.01.11 um 10:49 Uhr)
-
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
12.01.11 10:54 #8
- Registriert seit
- Dec 2010
- Beiträge
- 164
yo scheint wohl so Yaslaw.
Na dann probier ich mal.
-
12.01.11 10:56 #9
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Versuch es doch mal durch einen kleinen Umweg:
Code php:1 2 3 4 5 6
$query = 'UPDATE $tbl SET Vorname=$_GET["Vorname"] WHERE Userid=$_GET["Userid"]'; mysql_query($query); if( mysql_affected_rows() == 0) { echo "Der Query hat keine Zeilen geändert:<br/><pre>$query</pre>"; }
Wenn die Meldung unten kommt, kannst du den Query in phpMyAdmin einfügen und dann wirst du sehen, was nicht aus welchem Grund nicht geht.
Das ist übrigens ein allgemeines Verfahren wenn es um das Debuggen von MySQL-Problemen geht und mit sehr großer Sicherheit auch in yaslaw's Tutorial so beschrieben.
Wenn du das wieder verwenden willst, kannst du eine Funktion draus machen:
Code php:1 2 3 4 5 6 7 8 9 10 11
function mysql_update($query) { mysql_query($query); if( mysql_affected_rows() == 0) { echo "Der Query hat keine Zeilen geändert:<br/><pre>$query</pre>"; } } // Achtung hier dann kein mysql_query sonder mysql_update mysql_update('UPDATE $tbl SET Vorname=$_GET["Vorname"] WHERE Userid=$_GET["Userid"]');
Das kannst du dann auch für Inserts und Deletes machen.
@yaslaw: Spätestens beim zweiten mal ignorieren würde ich es dann auch aufgeben, nicht jeder will ein Tutorial lesen, egal wie lang es ist.Geändert von saftmeister (12.01.11 um 10:57 Uhr) Grund: Tag korrigiert
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
12.01.11 11:04 #10
- Registriert seit
- Dec 2010
- Beiträge
- 164
ich hab nun die abfrage auch umgebaut
$Vorname=$_GET['Vorname'];
$Userid=$_GET['Userid'];
mysql_query('UPDATE Kunden SET Vorname=$Vorname WHERE Userid = $Userid') or die(mysql_error());
jetzt hab ich ja auch ne andere Fehlermeldung aber den Fehler krieg ich schon noch raus.
-
12.01.11 11:07 #11
- Registriert seit
- Aug 2007
- Ort
- Pfalz
- Beiträge
- 219
Probier das mal
Strings müssen in 'nem Query doch generell in Anführungszeichen geschrieben werden, oder lieg ich falsch?PHP-Code:$query = "UPDATE $tbl SET Vorname='".$_GET["Vorname"]."' WHERE Userid='".$_GET["Userid"]."'";
mysql_query($query) or die ("Fehler in Abfrage ".$query.":<br/>".mysql_errno()." - ".mysql_error());
Code :1 2
UPDATE $tbl SET Vorname=Klaus // Wird nicht funktionieren UPDATE $tbl SET Vorname='Klaus' // das schon
Geändert von Back2toxic (12.01.11 um 11:12 Uhr)
-
@puschelchen
Du hast mein Tutorial. Das beinhaltet genau das was saftmeister hier für dich geschrieben hat.
Hast du beides nicht gelesen?
Mein Tutorial beinhaltet sogar ein Beispiel das genau das Problem hat, das du auch hast.
Nun gut, ich will mal nich so sein. Hier mal für dich, wie man sowas angehen sollte
------------------------------
Wir haben einen einfachen Code, der ein Update auf die Datenbank macht. Nun updated dieser Code aber nichts in der Datenbank und wir finden noch nicht heraus warum. In der folgenden Anleitung werden wir anhand dieses Beispiels sehen wie man eine einfache Fehleranalyse durchführen kann um solche Probleme zu lösen.
Code PHP:1 2 3 4 5 6 7 8 9 10
<?php mysql_connect('localhost', 'root', '') or die ("Keine Verbindung möglich: ".mysql_error()); mysql_select_db('testdb') or die ("Keine Verbindung möglich: ".mysql_error()); $value = 'test'; $where = 15; $sql = "UPDATE myTable SET feld1 = {$value} WHERE id = {$where};"; mysql_query($sql); echo mysql_affected_rows(); ?>
Lösung
1) Report Error All
Als erstes ergänzen wir unseren Code mal um die folgende Zeile um uns alle Fehlermeldungen auszugeben.
error_reporting(E_ALL);
Anschliessend testen wir erneut und schauen ob eine Sinnvolle Fehlermeldung erscheint.
Code PHP:1 2 3 4 5 6
<?php error_reporting(E_ALL); mysql_connect('localhost', 'root', '') or die ("Keine Verbindung möglich: ".mysql_error()); mysql_select_db('testdb') or die ("Keine Verbindung möglich: ".mysql_error()); ... ?>
Diese Zeile sollte wieder entfernt werden, bevor man in die produktive Umgebung geht. Mehr dazu findest du in der PHP-Doku -> http://php.net/manual/de/security.errors.php
2) Query-String ausgeben
Führte der erste Schritt noch nicht zu einem Resultat, so können wir noch den generierten Query-String testen.
Dazu geben wir diesen mittels echo() aus (Nicht das Result von mysql_query, sondern den zusammengesetzten Query-String). Zudem versuchen wir noch die Fehlermeldung herauszukriegen. Wir erweitern also das mysql_query() um die Errorausgabe mysql_error() .
Code PHP:1 2 3 4 5 6 7 8 9 10 11 12
<?php error_reporting(E_ALL); mysql_connect('localhost', 'root', '') or die ("Keine Verbindung möglich: ".mysql_error()); mysql_select_db('testdb') or die ("Keine Verbindung möglich: ".mysql_error()); $value = 'test'; $where = 15; $sql = "UPDATE myTable SET feld1 = {$value} WHERE id = {$where};"; echo "{$sql}<br />\n"; mysql_query($sql) or die(mysql_error()); //echo mysql_affected_rows(); ?>
In der Ausgabe erscheint dann etwa das Folgende: Unser SQL und eine Fehlermeldung
Code :1 2
UPDATE myTable SET feld1 = test WHERE id = 15; Unknown column 'test' in 'field list'
So haben wir eine Fehlermeldung die etwas aussagt und das SQL, wie es an die Datenbank abgesetzt wird.
Mit diesen Informationen können andere Programmierer in Foren etc. besser helfen als 'nur' mit der Meldung 'Es geht nicht'.
Geübte SQL-Leser sehen hier sofort den Fehler. test ist natürlich kein Feld sondern ein String und sollte in '...' gesetzt werden.
3) Testen mit phpMyAdmin
Um das Sql zu verfeinern und zu testen kann man dieses nun aus der Ausgabe kopieren und mit phpMyAdmin oder einem anderen Tool für MySQL testen und anpassen bis es funktioniert. Das funktionierende SQL anschließend wieder zurück in den PHP-Code implentieren
Unser korrigiertes und getestete SQL sieht dann so aus
Code sql:1
UPDATE myTable SET feld1 = 'test' WHERE id = 15;
4) Korrektur einpflegen
Zum Schluss müssen wir nur noch das error_reporting() sowie unser echo() wieder entfernen und unseren korrigiertes SQL in den Code einpflegen. Und so sieht dann der funktionierende Code aus
Code PHP:1 2 3 4 5 6 7 8 9 10
<?php mysql_connect('localhost', 'root', '') or die ("Keine Verbindung möglich: ".mysql_error()); mysql_select_db('testdb') or die ("Keine Verbindung möglich: ".mysql_error()); $value = 'test'; $where = 15; $sql = "UPDATE myTable SET feld1 = '{$value}' WHERE id = {$where};"; mysql_query($sql) or die(mysql_error()); echo mysql_affected_rows(); ?>
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
12.01.11 11:10 #13
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
12.01.11 11:12 #14
- Registriert seit
- Dec 2010
- Beiträge
- 164
Ok das hat nun Funktioniert. Danke

Hast du vll nen Tutorial oder sowas das ich das ganze noch erweitern kann? wäre lieb Danke
-
12.01.11 11:12 #15
- Registriert seit
- Aug 2007
- Ort
- Pfalz
- Beiträge
- 219
Upsa - da hat der saftmeister recht - habe natürlich die Funktionsklammern bei mysql_error() vergessen.
Hab' die mal dazu editiert..
Ähnliche Themen
-
Datenbank UPDATE
Von Anubia im Forum PHPAntworten: 3Letzter Beitrag: 16.12.07, 15:50 -
Datenbank Update
Von bambid im Forum PHPAntworten: 2Letzter Beitrag: 13.09.07, 13:21 -
Update von SQL Datenbank
Von Blattspinat im Forum PHPAntworten: 5Letzter Beitrag: 14.11.05, 07:19 -
Datenbank Update
Von dragon90 im Forum PHPAntworten: 7Letzter Beitrag: 13.11.05, 15:47 -
Update Datenbank
Von server im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 24.03.04, 17:14





Zitieren



Login






[PHP][Snippet] Array zu XML konvertieren