[GELOEST] Variablen in SQL Datenbank schreiben

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Runshak

Mitglied
7 April 2020
33
0
6
30
Hallo,

Ich habe folgendes Problem.

Auf meiner Seite habe eine Tabelle angelegt, welche Daten aus einer Datenbank bezieht. Wenn diese Tabelle dann mit den gewünschten Daten gefüllt wurde, sollen mit Hilfe eines Buttons diese gewünschten Daten in eine andere Tabelle übernommen werden, inklusive des Session users. Dabei habe ich jetzt folgendes Problem. Wie bekomme ich das am besten hin?
Die ID des Session Users bekomme ich, jedoch nicht die Inhalte der Tabelle. Ich vermute, dass die Variablen der Tabelle nicht Global sind und somit von einer anderen Prozedur einfach ausgelesen werden können.
Bzw. was ist der "normale" Weg sowas zu handhaben? Deklariert man die Variablen von vornherein global oder kann man sie, wenn man sie braucht auf anderem Wege ansprechen?
 

basti1012

Senior HTML'ler
26 November 2017
1.312
131
63
39
Minden
sebastian1012.bplaced.net
Vieleicht solltest du mal deinen Code posten dann kann man sehen wie du das aufgebaut hast.

Die Tabelle die aus der DB kommt wird die noch bearbeitet , oder soll die so kopiert werden wie sie aus der DB gekommen ist?
Ohne bearbeiten könntest du die Tabelle auch direkt mit SQL kopieren,
Wenn aber die Tabelle angezeigt wird sollte es mit den Copy Button auch gehen, denke das du da irgendwo die Daten wieder überschreibst oder sonst was.
Deswegen wäre es gut wenn du dein Code mal postest.
 

m.scatello

Senior HTML'ler
15 Februar 2017
1.205
141
63
Merke dir die ID des angezeigten Datensatzes ebenfalls in der Session oder hänge die ID als Parameter an die URL
 

Runshak

Mitglied
7 April 2020
33
0
6
30
Ich hab ein wenig herumprobiert, komme aber nicht auf die Lösung. Wenn ich Textfelder habe, weiß ich wie ich die Daten in die Datenbank bekomme. Wenn ich nur die Variablen habe, weiß ich nicht, wie ich das entsprechend umwandeln könnte. Mit dem Echo hatte ich getestet, ob überhaupt Werte in den Variablen stehen. Das funktioniert. Der Schreibvorgang für die Variablen funktioniert auch problemlos, wenn ich im test.php feste Werte in die Variablen packe.

PHP:
<?php

if (isset($_POST['insert-submit']))
{

  require 'dbOfferCon.inc.php';

  $UID = $_SESSION['id'];
  $PrID= $values["item_id"];
  $PAm = $values["item_quantity"];

  $sql = "INSERT INTO offers (UserID, ProductID, PAmount) VALUES (?, ?, ?);";
      
  $stmt = mysqli_stmt_init($conn);
        
  if (!mysqli_stmt_prepare($stmt, $sql))
  {
        
      header("Location: Warenkorb.php?error=sqlerror");
      exit();
  }
  else
  {
          
    mysqli_stmt_bind_param($stmt, "sss", $UID, $PrID, $PAm);

          
    mysqli_stmt_execute($stmt);
        
    header("Location: ../Warenkorb.php?signup=success");
    exit();
  }
}
 
  mysqli_stmt_close($stmt);
  mysqli_close($conn);

PHP:
    <form class="formLog" action="includes/test.php" method="post">
                    <?php
                      foreach($_SESSION["shopping_cart"] as $values)
                      {
                        echo $_SESSION['id'];
                        echo $values["item_id"];
                        echo $values["item_quantity"];

                       $_SESSION['id'];
                       $values["item_id"];
                       $values["item_quantity"];
                      }

                      ?>
                      <p class="pLog">
                          <button class="buttonLog" name="insert-submit" type="submit"> Eintragen </button>
                      </p>
    </form>
 

jonas3344

Neues Mitglied
25 Oktober 2019
28
12
3
37
Entweder du haust alles in eine Session oder aber alles in Formularelemente. Einfach so von selber leiten sich die Daten nicht weiter. Du kannst auch einen input type="hidden" verwenden, wenn du keine sichtbaren Textfelder möchtest.
 
  • Like
Reaktionen: Runshak

Runshak

Mitglied
7 April 2020
33
0
6
30
Das mit den Inputfeldern hab ich jetzt mal soweit probiert. Scheint aber noch nicht ganz richtig zu sein. Kannst du mir einen Tipp geben, wo ich nachbessern muss?

HTML:
<form class="formLog" action="includes/test.php" method="post">         

          <?php

                            if (!empty($_SESSION['id'])) {

                            echo '<input type="hidden" name="hidden_user" value="'.$_SESSION['id'].'">';

                            }

                            else {

                            echo '<input type="hidden" name="hidden_user">';

                            }



                            if (!empty($values["item_id"])) {

                            echo '<input type="hidden" name="hidden_iid" value="'.$values["item_id"].'">';

                            }

                            else {

                            echo '<input type="hidden" name="hidden_iid">';

                            }



                            if (!empty($values["item_quantity"])) {

                            echo '<input type="hidden" name="hidden_quant" value="'.$values["item_quantity"].'">';

                            }

                            else {

                            echo '<input type="hidden" name="hidden_quant">';

                            }

?>

                      <p class="pLog">

                          <button class="buttonLog" name="place_offer" type="submit"> Eintragen </button>

                      </p>

    </form>
und der Part für die Datenbank

PHP:
if (isset($_POST['place_offer']))
{

  require 'dbOfferCon.inc.php';

  $UID = $_Post['hidden_user'];
  $PrID= $_POST["hidden_iid"];
  $PAm = $_POST["hidden_quant"];


  $sql = "INSERT INTO offers (UserID, ProductID, PAmount) VALUES (?, ?, ?);";
        // Here we initialize a new statement using the connection from the dbh.inc.php file.
  $stmt = mysqli_stmt_init($conn);
        // Then we prepare our SQL statement AND check if there are any errors with it.
  if (!mysqli_stmt_prepare($stmt, $sql))
  {
          // If there is an error we send the user back to the signup page.
      header("Location: Warenkorb.php?error=sqlerror");
      exit();
  }
  else
  {
          // Next we need to bind the type of parameters we expect to pass into the statement, and bind the data from the user.
    mysqli_stmt_bind_param($stmt, "sss", $UID, $PrID, $PAm);

          // Then we execute the prepared statement and send it to the database!
          // This means the user is now registered! :)
    mysqli_stmt_execute($stmt);
          // Lastly we send the user back to the signup page with a success message!
    header("Location: ../Warenkorb.php?signup=success");
    exit();
  }
}
  // Then we close the prepared statement and the database connection!
  mysqli_stmt_close($stmt);
  mysqli_close($conn);
 

jonas3344

Neues Mitglied
25 Oktober 2019
28
12
3
37
Was bedeutet: "Scheint nicht ganz richtig". Wo liegt das Problem? Versuch es selbst einzugrenzen.
 

Runshak

Mitglied
7 April 2020
33
0
6
30
nunja, wenn ich auf den button klicke, läuft das ganze durch und wird als success in der Adressleiste angezeigt, jedoch wird die datenbank nicht gefüllt. Wenn ich im code-Teil, welcher die Daten in die Datenbank schreibt, konkrete Werte eintrage anstelle der Variablen werden diese in die Datenbank geschrieben. Dieser Teil scheint also zu funktionieren. Also muss es am ersten Teil hängen. Vermutlich werden die Werte nicht übergeben. Ich weiß aber nicht woran es liegt. Ansonsten würde ich hier nicht um Hilfe bitten
 

jonas3344

Neues Mitglied
25 Oktober 2019
28
12
3
37
1.Ansatz:
Schau Dir den generierten HTML-Code an im Browser. Werden die Felder korrekt generiert? Stehen auch die values drin?

2. Ansatz:
Lass Dir im PHP-Script $_POST ausgeben (var_dump($_POST)). Stehen die Werte drin?
 
  • Like
Reaktionen: Runshak

Runshak

Mitglied
7 April 2020
33
0
6
30
das mit dem var_dump ist hilfreich.

C:\wamp64\www\Parallax\Warenkorb.php:379:int 2

C:\wamp64\www\Parallax\Warenkorb.php:380:string '1' (length=1)

C:\wamp64\www\Parallax\Warenkorb.php:381:string '1' (length=1)

:rolleyes:

hab den Fehler gefunden...hab anstatt "POST" "Post" geschrieben... Danke fuer deine Hilfe und dem Tipp mit dem var_dump. Das ist super Hilfreich!
 

m.scatello

Senior HTML'ler
15 Februar 2017
1.205
141
63
das mit dem var_dump ist hilfreich.
Das auch:

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.
 
  • Like
Reaktionen: Runshak und jonas3344