UPDATE mit PDO

CreativPur

Erfahrenes Mitglied
Ich sitze mal wieder tierisch auf dem Schlauch.. Und das schon seit Tagen..

Ich versuche mich nun nach vielen Ratschlägen Euerseits mich in PDO einzuarbeiten..

Ich habe ein Formular zum ändern der Einträge.
Die SELECT-Ausgabe funktioniert, aber ich bekomme einfach das UPDATE nicht hin..

PHP:
$pdo = new PDO('mysql:host=xxx;dbname=xxx', 'xxx', 'xxx');

$parameter = $_GET["parameter"];

$sql = "SELECT * FROM bw WHERE bw_code = $parameter";
foreach ($pdo->query($sql) as $row) {
}
$sql = "update bw set fa_vorname = ".$row['fa_vorname'].",  fa_nachame = ".$row['fa_nachname']."  where bw_code =  $parameter ";

echo '

<div class="col-lg-6 col-xs-12">
    <div class="form-group">
        <label for="fa_vorname">Vorname:</label>
        <input type="text" class="form-control" id="fa_vorname" name="fa_vorname" value="'.$row["fa_vorname"].'">
    </div>
    </div>
    <div class="col-lg-6 col-xs-12">
        <div class="form-group">
            <label for="fa_nachname">Nachname:</label>
            <input type="text" class="form-control" id="fa_nachname" name="fa_nachname" value="'.$row["fa_nachname"].'">
        </div>
    </div>
</div>
<button type="submit" class="btn btn-success btn-sm">Daten ändern</button>

';

Was mache ich nur schon wieder falsch ????
 
item: Du solltest nicht innerhalb der Schleife die Variable SQL überschreiben. Mach eine 2te Varible

item: Entweder arbeitest du mit Prepared Statements (empfohlen) oder mit zusammengesetzten. Beim Letzteren müssen auch wieder die Strings in ' gesetzt werden.

item: Du setzt zwar ein SQL zusammen, schickst es aber nie zur Datenbank

item: warum machst du ein Select, gehst dann die Einzelzeilen durch um sie anzupassen? Das ganze macht keinen Sinn:
Nimm alle mit mdem Paramter xy und ersetze vorname durch vorname und nachname durch nachname.

Wegen dem letzten Punkt ist es mir nicht möglich, die ein Beispiel zu schreiben. Die Logik beisst sich selber.
Was soll der Update bewirken?
 
Ohjeeee...
Das hört sich ja alles unheimlich kompliziert an..
Also die Schleife kann ich schon mal weg lassen ??

Wie würde denn ein Aufbau mit Prepared Statements aussehen ?

Ich habe eine Datenbank mit etlichen Einträgen. Diese gebe ich in einem Formular als Select aus. So werden die Daten in den Inputfeldern ausgegeben.
Jetzt möchte ich die Möglichkeit haben, bestimmte Felder zu ändern, um diese per Update wieder auf die Datenbank zu speichern.
 
Das Haubtproblem ist deine Schleife

Wenn man deine SQL zusammenfasst, kommt das folgende dabei heraus
SQL:
update bw
set fa_vorname = fa_vorname,
   fa_nachame = fa_nachname
where bw_code = $parameter

Du nimmst den letzten Datensatz aus der Tabelle bw_code mit dem code=$paramterund schreibst in nach $row
Mit diesem Datensatz $row setzt du ein Update auf dieselbe Tabelle ab.
Dabei filterst du auf denselben $parameter.
Du überschreibst den vornamen mit dem vornamen aus $row, welche dieselben Filterkriterien haben wie die Auswahl. Also überschreibst du die Zeile mit sich selber.

Und so sieht das mit Prepeaded Statement aus
PHP:
$parameter = $_GET["parameter"];

$sql = "update bw set fa_vorname = fa_vorname, fa_nachame = fa_nachname where bw_code = :parameter";
$sth = $pdo->prepare($sql);
$sth->bindParam('parameter', $parameter, PDO::PARAM_INT);
$sth->execute();

echo '<div class="col-lg-6 col-xs-12">....';

Wenn man daraus alles raus nimmt, weil man es nichts bewirkt, bleibt das übrig
PHP:
echo '<div class="col-lg-6 col-xs-12">....';
 
Ich habe es jetzt folgender Maßen umgesetzt..

PHP:
<?php
$pdo = new PDO('mysql:host=xxx;dbname=xxxx', 'xxx', 'xxx');

$parameter = $_GET["parameter"];

$sql = "SELECT * FROM bw WHERE bw_code = $parameter";
foreach ($pdo->query($sql) as $row) {
}


$sql = "update bw set fa_vorname = fa_vorname, fa_nachame = fa_nachname where bw_code = :parameter";
$sth = $pdo->prepare($sql);
$sth->bindParam('parameter', $parameter, PDO::PARAM_INT);
$sth->execute();

$sql = "SELECT DISTINCT vorname FROM bw ORDER BY id";


$anrede =  $row["fa_anrede"];  // Sollte Werte zwischen 0-2 annhemen => 0 = Frau, 1 = Mann, 3 = Generelle Ansprache
       $arrP = Array(
                   Array(
                       'sex'       =>   'Frau',
                       'anrede'   =>    'Frau',
                       'grammer'   =>  Array('',''),
                       'name'       =>  ' '. $_POST["fa_vorname"] . ' ' . $_POST["fa_nachname"]
                   ),
                   Array(
                       'sex'       =>   'Mann',
                       'anrede'   =>    'Herr',
                       'grammer'   =>  Array('r','n'),
                       'name'       =>  ' '. $_POST["fa_vorname"] . ' ' . $_POST["fa_nachname"]
                   ),
                   Array(
                       'sex'       =>   '',
                       'anrede'   =>    'Damen und Herren',
                       'grammer'   =>  Array('',''),
                       'name'       =>  ''
                   )
               );
$ausgabe = $arrP[$anrede];

echo '

<div class="container">
<h3 class="seitentitel">Bewerbung &auml;ndern</h3>
        <span style="float:right; margin-right:50px; margin-top:-30px;">
            <a href="neue_mail.php" target="_self">
            <button type="button" class="btn btn-primary btn-sm">Neue Bewerbung erfassen</button>&nbsp;&nbsp;
            </a>
            <a href="ausgabe.php" target="_self">
            <button type="button" class="btn btn-success btn-sm">Alle Bewerbungen sehen</button>&nbsp;&nbsp;
            </a>
        </span>
     
        <hr />

<form action="#" method="post">
              
                        <div class="row">
                                <div class="col-lg-6 col-xs-12">
                                        <div class="form-group">
                                            <label for="bw_als">Bewerbung als..:</label>
                                            <select class="form-control" id="bw_als" name="bw_als">
                                                  <option value="'.$row["bw_als"].'">'.$row["bw_als"].'</option>
                                                  <option value="Webdesigner">Webdesigner</option>
                                                  <option value="Küchenplaner">Küchenplaner</option>
                                            </select>
                                          </div>
                                </div>
                                <div class="col-lg-6 col-xs-12">
                                        <div class="form-group">
                                            <label for="bw_referenz_nr">Referenz-Nr.:</label>
                                            <input type="text" class="form-control" id="bw_referenz_nr" name="bw_referenz_nr" value="'.$row["bw_referenz_nr"].'">
                                          </div>
                                </div>
                                <div class="col-lg-12 col-xs-12">
                                        <div class="form-group">
                                            <label for="bw_anschreiben">Anschreiben:</label>
                                            <textarea class="form-control"  rows="10" id="bw_anschreiben" name="bw_anschreiben" value="'.$row["bw_anschreiben"].'">'.$row["bw_anschreiben"].'</textarea>
                                          </div>
                                </div>
                              
                              
                                <h3 class="seitentitel">Adresse ändern..</h3>
                                <hr />
                                <div class="col-lg-12 col-xs-12">
                                        <div class="form-group">
                                            <label for="fa_firmen_name">Firma:</label>
                                            <input type="text" class="form-control" id="fa_firmen_name" name="fa_firmen_name" value="'.$row["fa_firmen_name"].'">
                                          </div>
                                </div>
                                <div class="col-lg-4 col-xs-4">
                                        <div class="form-group">
                                            <label for="fa_anrede">Anrede:</label>
                                            <select class="form-control" id="fa_anrede" name="fa_anrede">
                                                  <option value="'.$row["fa_anrede"].'">'.$ausgabe["anrede"].$ausgabe["grammer"][2].'</option>
                                                  <option value="0">Frau</option>
                                                  <option value="1">Herr</option>
                                                  <option value="2">Damen und Herren</option>
                                            </select>
                                          </div>
                                </div>
                              
                                <div class="col-lg-6 col-xs-12">
                                </div>
                        </div>
                        <div class="row">      
                                <div class="col-lg-6 col-xs-12">
                                        <div class="form-group">
                                            <label for="fa_vorname">Vorname:</label>
                                            <input type="text" class="form-control" id="fa_vorname" name="fa_vorname" value="'.$row["fa_vorname"].'">
                                          </div>
                                </div>
                                <div class="col-lg-6 col-xs-12">
                                        <div class="form-group">
                                            <label for="fa_nachname">Nachname:</label>
                                            <input type="text" class="form-control" id="fa_nachname" name="fa_nachname" value="'.$row["fa_nachname"].'">
                                          </div>
                                </div>
                              
                                <div class="col-lg-10 col-xs-10">
                                        <div class="form-group">
                                            <label for="fa_strasse">Strasse:</label>
                                            <input type="text" class="form-control" id="fa_strasse" name="fa_strasse" value="'.$row["fa_strasse"].'">
                                          </div>
                                </div>
                                <div class="col-lg-2 col-xs-2">
                                        <div class="form-group">
                                            <label for="fa_hausnummer">Nr:</label>
                                            <input type="text" class="form-control" id="fa_hausnummer" name="fa_hausnummer" value="'.$row["fa_hausnummer"].'">
                                          </div>
                                </div>
                              
                                <div class="col-lg-2 col-xs-2">
                                        <div class="form-group">
                                            <label for="fa_plz">PLZ:</label>
                                            <input type="text" class="form-control" id="fa_plz" name="fa_plz" value="'.$row["fa_plz"].'">
                                          </div>
                                </div>
                                <div class="col-lg-10 col-xs-10">
                                        <div class="form-group">
                                            <label for="fa_ort">Ort:</label>
                                            <input type="text" class="form-control" id="fa_ort" name="fa_ort" value="'.$row["fa_ort"].'">
                                          </div>
                                </div>
                              
                                <div class="col-lg-10 col-xs-10">
                                        <div class="form-group">
                                            <label for="fa_telefon">Telefon:</label>
                                            <input type="text" class="form-control" id="fa_telefon" name="fa_telefon" value="'.$row["fa_telefon"].'">
                                          </div>
                                </div>
                              
                                <div class="col-lg-10 col-xs-10">
                                        <div class="form-group">
                                            <label for="fa_email">E-Mail:</label>
                                            <input type="text" class="form-control" id="fa_email" name="fa_email" value="'.$row["fa_email"].'">
                                          </div>
                                </div>
                              
                                <div class="col-lg-10 col-xs-10">
                                        <div class="form-group">
                                            <label for="fa_web">Webseite:</label>
                                            <input type="text" class="form-control" id="fa_web" name="fa_web" value="'.$row["fa_web"].'">
                                          </div>
                                </div>
                        </div>
                        <hr />
                        <input type="hidden" class="form-control" id="bw_code" name="bw_code" value="'.$row["bw_code"].'">
                        <button type="submit" class="btn btn-success btn-sm">Bewerbung ändern</button>
                      
                </form>
</div>';

$pdo = null;
?>

Aber funktionieren tut es immer noch nicht
 
Natürlich nicht.
Du überschreibst Hans mit Hans und Meier mit Meier. Da sieht man am Ende keinen Unterschied. Das erkläre ich dir seit anbeginn dieses Threads.
Das hat nix mit Code zu tun. Dein Update macht genau Null, nix, nada Sinn. Nicht nur keinen Sinn, es macht gar nix als sich selber mit sich selber zu überschreiben.

Vorher
vorname: Hans
nachname: Meier
code: 123

Nachher:
vorname: Hans
nachname: Meier
code: 123

Oder anders formuliert. Du fährst mit deinem Auto aus dem Parkfeld A heraus, umrundest es und stellst es wieder aufs Parkfeld A.


Darum die Frage. Was soll dein Update eigentlich machen?
 
Machen wir eine kleine Lehrstunde:
Wie kommt man an den Wert aus dem Formular?
Den Parameter hast du schon. Jetzt noch den Vornamen und den Nachnamen. Das fehlt in all dienen Scripts bisher.
 

Neue Beiträge

Zurück