Mysql Abfrage und Update per formular

klausi89

Erfahrenes Mitglied
Hallo ich hätte da mal wieder eine Frage, ich mache gerade für meine Schwester ein kleine Webseite. Damit sie ein paar Daten dort
zukünftig auch selber ändern kann habe ich einen kleinen Adminbereich erstellt.

Außerdem eine Datenbank mit einer Tabelle "data" und den Spalten für frei (zahlen) facebook und instagram (sind einfach nur die Links).

Außerdem habe ich die Webseite mit der Datenbank verbunden.

und zwar so ->


PHP:
$pdo = new PDO('mysql:host=localhost;dbname=name', 'user', 'passwort');
$sql = "SELECT * FROM data";
foreach ($pdo->query($sql) as $row) {

   $facebook = $row['facebook'];
   $instagram = $row['instagram'];
   $frei = $row['frei'];
}

Die Ausgabe habe ich mir gleich in einer Variable gespeichert und gebe diese im Formular im 'value' gleich mit aus damit man sieht was in der Datenbank steht.

hier ist dann das formular in der datei die ich mal geheim.php genannt habe weil sie ja auch im geschützten Bereich ist.

Code:
<form action="geheim.php">
  <div class="form-group">
    <label for="usr">Anzahl freie Pl&auml;tze:</label>
    <input type="text" class="form-control" id="usr" value="<?php echo $frei; ?>">
  </div>
  <div class="form-group">
    <label for="fck">Facebook - Link:</label>
    <input type="text" class="form-control" id="fck" value="<?php echo $facebook; ?>">
  </div>
  <div class="form-group">
    <label for="ins">Instagram - Link:</label>
    <input type="text" class="form-control" id="ins" value="<?php echo $instagram; ?>">
  </div>
  <button type="submit" class="btn btn-primary">Update</button>
</form>

So nun ist mir leider schleierhaft wenn ich jetzt was neu ins formular schreibe und auf update drücke wie speichert man dann neues in die datenbank bzw. überschreibt das vorhandene?

Ich habe da bei php-einfach.de folgendes gefunden:

Natürlich könnt ihr die Parameter, wie bei allen prepared Statements, auch wieder benennen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$statement = $pdo->prepare("UPDATE users SET email = :email_neu WHERE id = :id");
$statement->execute(array('id' => 1, 'email_neu' => 'neu@php-einfach.de'));
?>
Im obigen Fall haben wir die Id als ein Parameter definiert. Natürlich können wir auch eine feste Id in den Query einspeichern, z.B. wenn wir stets den Eintrag mit der Id 1 verändern wollen:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$statement = $pdo->prepare("UPDATE users SET email = :email_neu WHERE id = 1");
$statement->execute(array('email_neu' => 'neu@php-einfach.de'));
?>

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

In meinem fall wäre es immer der User mit der ID1 - allerdings übersteigt das meine Kenntnisse und hoffe mir kann hier irgendjemand dazu etwas helfen.

Ich denke mal irgendwas mit $post - den befehl update oder auch insert? Ich denke da wohl auch irgendwie verkehrt. keine Ahnung.

Danke schon mal
 

klausi89

Erfahrenes Mitglied
UPDATE ist immer überschreiben. INSERT wäre das Einfügen
Morgen...also in der DB steht schon was drin es soll beim ändern überschrieben werden.

Weiß ehrlich gesagt trotzdem nicht wie sowas auszusehen hat. Wie werden die neuen Daten übergeben und dann in der DB gespeichert bzw überschrieben. Hab echt keine Ahnung
 

m.scatello

Erfahrenes Mitglied

klausi89

Erfahrenes Mitglied
Das kannst du aber ändern, in dem du die Grundlagen lernst.
Das habe ich leider schon mehrfach probiert aber ich bekomme das eben einfach nicht hin

Mein Ansatz sieht momentan wie folgt aus

PHP:
$frei_neu = $_POST["frei"];
$facebook_neu = $_POST["facebook"];
$instagram_neu = $_POST["instagram"];

$statement = $pdo->prepare("UPDATE data SET frei = :frei_neu WHERE facebook = :facebook_neu AND instagram = :instagram_neu");
$statement->execute(array('frei_neu' => $frei_neu, 'facebook_neu' => $facebook_neu, 'instagram_neu' => $instagram_neu));

aber irgendwie geht das auch nicht....

ich kann zwar den wert frei ändern aber dazu muss ich mehrfach auf update drücken. die anderen zwei funktionieren nicht.

Sicher ist das auch totaler murx...aber ich habe eben nun mal wenig ahnung davon...lernen hab ich schon mehrfach probiert, verstehe aber viele sachen leider nicht ohne das mir das jemand ordentlich erklärt bzw. mal zeigt
 

m.scatello

Erfahrenes Mitglied
Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 

klausi89

Erfahrenes Mitglied
ok danke aber ich passe...kein plan...das übersteigt einfach meine kenntnisse

muss wohl doch schauen das ich im internet nen beispiel finde was ich irgendwie übernehmen kann
 

m.scatello

Erfahrenes Mitglied
das übersteigt einfach meine kenntnisse
Jetzt nicht dein Ernst, oder?

Punkt 2 und 3 sind zwei Zeilen an den Anfang schreiben, was soll daran schwierig sein? Und z.B.
PHP:
echo "$frei_neu, $facebook_neu, $instagram_neu<br>";
ist ja wohl auch keine Raketenwissenschaft. Aber gerade das Hochdrehen des Error-Reportings (Punkt 2 und 3) würden dir schon weiterhelfen.
 

klausi89

Erfahrenes Mitglied
Jetzt nicht dein Ernst, oder?
Ja na gut das bekomme ich nun wirklich hin

habe das nun mal eingebaut....ein fehler wird nicht angezeigt und nach drücken der update taste werden mir per echo die neu eingegebenen Daten auch richtig ausgegeben leider aber nicht in der datenbank gespeichert.

dann ändere ich die daten nochmal im formular...bei erneuten drücken der update taste wird dann nur der wert "frei" in der datenbank gespeichert.
 

m.scatello

Erfahrenes Mitglied
Ich denke, du solltest mal den kompletten HTML- und PHP-Code posten. Mit dem was ich hier sehe, müsste PHP dir eigentlich Warnings um die Ohren hauen.