Antworten auf deine Fragen:
Neues Thema erstellen

mysql Datensatz ändern mit REPLACE

strichcode

Nicht mehr ganz neu hier

Hallo an alle! Ich hänge fest.
Ich möchte mit Replace einen Datensatz ändern. Replace deshalb, weil ich wenn ich normal die
Daten ändere tue ich das mit update... where objekt_nr = $objekt_nr.
Jetzt möchte ich aber die objekt_nr ändern.

Mein Versuch geht über ein Formular, in dem die bisherige objekt_nr eingeben wird und die neue.
Beim Abschicken des Formulars soll die alte obekt_nr mit der neuen ersetzt werden.
Das Feld in der Datenbank heißt objekt_nr.

Könnt Ihr mal drüber schauen und mir sagen was ich falsch mache?
Ich bekomme keine Fehlermeldung und geändert wird nichts.

<?php
error_reporting(E_ALL);

$db_host = "***";
$db_user = "***";
$db_pass = "***";
$db_name = "***";

$dbh = mysql_connect($db_host, $db_user, $db_pass)
or die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db($db_name) or die("Auswahl der Datenbank fehlgeschlagen");

if (isset( $_POST['eintragen'] ))
{
$objekt_nr_alt=$_POST['objekt_nr_alt'];
$objekt_nr_neu=$_POST['objekt_nr_neu'];
$sqlupdate = "UPDATE `ferienhaus`
SET
`objekt_nr`= REPLACE objekt_nr, '$objekt_nr_alt','$objekt_nr_neu')
WHERE
`objekt_nr` LIKE '$objekt_nr_alt' ";
$update = mysql_query($sqlupdate)or die(mysql_error());
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Objektnummer ändern</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" name="formular" id="formular">
alte Objekt-Nr: <input type="text" name="objekt_nr_alt" id="objekt_nr_alt" value="" /> ändern in
neue Objekt-Nr: <input type="text" name="objekt_nr_neu" id="objekt_nr_neu" value="" />
<input type="submit" name="eintragen" id="eintragen" value="Abschicken" /></form><br /><br /><br /><br />
<?php
$abfrage = "SELECT * FROM ferienhaus ";
$ergebnis = mysql_query($abfrage);
while ($daten = mysql_fetch_array( $ergebnis, MYSQL_ASSOC)) {
echo '
<table><tr><td>Objekt-Nr: '.$daten['objekt_nr'].'</td><td>'.$daten['ort'].'</td></tr>
'; }?>
</table></body>
</html>

Sorry, aber ich habe hier kein Button um Code formatiert einzugeben.???

Danke für Eure Hilfe
 

strichcode

Nicht mehr ganz neu hier

Da stehe ich jetzt mit auf dem Schlauch.
Ich habe error_reporting(E_ALL); im Code stehen.
Und den Befehl direkt in mysql ausführen kann ich nicht, weil ich ja objekt_nr_alt erst aus dem Formular bekomme....
Kann ich noch was machen, um an Fehlermeldungen zu kommen?
 

itstumpp

Noch nicht viel geschrieben

Hallo strichcode

Gib dein generiertes SQL-Statement aus "echo $sqlupdate;" und prüfe mal ob die Syntax passt.
Du kannst das ausgegebene Statement dann auch direkt per phpmyadmin testen und solltest so auch eine entsprechende Fehlermeldung erhalten.
 

lachender_engel

Aktives Mitglied

Für mich sieht Dein SQL-Statement falsch aus. Du arbeitest mit einem UPDATE und einem REPLACE in einem Statement. Ich meine das kann so nicht klappen. Daher mein Tip für Dein SQL-Statement:
PHP:
$sqlupdate = "UPDATE ferienhaus
    SET objekt_nr=$objekt_nr_neu
    WHERE objekt_nr LIKE $objekt_nr_alt;";
oder
PHP:
$sqlupdate = 'UPDATE ferienhaus
  SET objekt_nr='.$objekt_nr_neu.'
  WHERE objekt_nr LIKE '.$objekt_nr_alt.';';
 

strichcode

Nicht mehr ganz neu hier

Hallo itstumpp und lachender_engel, schön, daß Ihr mir auch helfen wollt.

Ich habe meinen Code um
echo $sqlupdate;
ergänzt, es passiert gar nichts.
Es passiert kein update und es wird auch keine Meldung ausgegeben. Der Fehler scheint vorher zu sein.
Ich habe auch die beiden Varianten von lachender_engel ausprobiert, ebenfalls nichts.

Gebe ich
UPDATE `ferienhaus`
SET
`objekt_nr`= REPLACE (objekt_nr, '$objekt_nr_alt','$objekt_nr_neu')
WHERE
`objekt_nr` LIKE '$objekt_nr_alt'

direkt in mysql ein, dann erscheint ein grüner Haken und die Meldung: 0 Zeilen betroffen,
also scheint an der Syntax da schon mal nicht allzuviel falsch zu sein.

Was mir noch aufgefallen ist (weiß nicht, ob das irgendeine Bedeutung hat):
Wenn ich das Formular ausfülle, also alte und neue Nummer eingebe, verändert sich meine Adresszeile im Browser.
Aus localhost/.../aendernummer.php wird

Vielleicht hilft das ja weiter.

Danke für Eure Hilfe!
 

itstumpp

Noch nicht viel geschrieben

Hallo Strichcode,

in deinem PHP-Code rufst du die Formulardaten mit $_POST['x'] ab. Das Formular übergibt diese allerdings per GET-Variablen da diese der default-Wert ist.
Um die Werte über $_POST abrufen zu können musst du im HTML-Code bei <form> noch das Attribut method="post" ergänzen oder im PHP-Code per $_GET['X'] abfragen.

Viele Grüße

P.S.: Wenn echo $sqlupdate; nicht funktioniert, probiers mal mit die($sqlupdate); oder var_dump($sqlupdate);
 

lachender_engel

Aktives Mitglied

Um die Ursache einzugrenzen prüfe erst mal ob Dein SQL-Gedönse überhautp funktioniert.
Führe den ode hier aus:
PHP:
$db_host = "***";
$db_user = "***";
$db_pass = "***";
$db_name = "***";

$dbh = mysql_connect($db_host, $db_user, $db_pass)
or die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db($db_name) or die("Auswahl der Datenbank fehlgeschlagen");

// if (isset( $_POST['eintragen'] ))
// {
$objekt_nr_alt='03491';
$objekt_nr_neu='12345';
$sqlupdate = "UPDATE ferienhaus
    SET objekt_nr=$objekt_nr_neu
    WHERE objekt_nr LIKE $objekt_nr_alt;";
echo '<p>' . $sqlupdate . '</p>';
$update = mysql_query($sqlupdate) or die('SQL-Fehler: ' . mysql_error());
// }
Wenn das dann funktioniert baust Du Deinen restlichen Code drum herum und testest dann schrittweise.
 

strichcode

Nicht mehr ganz neu hier

TÄRÄ!!!

<form method="post

Das Fehlen von method="post" war der Fehler!

(Hüstel, einfaches html zu beherrschen, wäre schon von Vorteil, wenn man sich an php herantrauen möchte)

Ich danke Euch allen für's Mitdenken und Mithelfen!!! Diese Forum ist klasse.
 

afr0kalypse

Allwissendes Karmameerschweinchen!

Soweit ich das sehe, ergibt die Funktion Replace() in einem Update Statement keinen Sinn.
Wie Lachender_Engel schon schreibt:
Für mich sieht Dein
PHP:
$sqlupdate = "UPDATE ferienhaus
    SET objekt_nr=$objekt_nr_neu
    WHERE objekt_nr LIKE $objekt_nr_alt;";
reicht ein einfaches Update Statement aus.
Alternativ kann man mit einem REPLACE INTO Statement arbeiten.
Das ist eine Mischung zwischen Update und Insert. Hier wird ein Datensatz aktualisiert, sofern vorhanden. Wenn nicht, wird ein neuer Datensatz hinzugefügt.
Update + Replace() wäre doppelte Arbeit.

Semantisch würde das bedeuten:
Aktualisiere mir tabellexy

Setze in Spalte objekt_nr den Wert ERSETZE(spalte, alter_wert, neuer_wert)
Wo in objekt_nr = alter_wert vorkommt.

Mach das lieber nur mit Update :)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.614
Beiträge
1.538.351
Mitglieder
67.525
Neuestes Mitglied
mgtaucher
Oben