Ankündigung

Einklappen
Keine Ankündigung bisher.

Fragen zur PDO

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fragen zur PDO

    Da ich meine gesamte Datenbank nun auf PDO umstelle.
    Mach ich mal ein Thema auf zur fragen in PDO.

    Zum erste frage.
    Wenn ich eine Karte verkaufe trage ich den Käufer in meine Interne Datenbank ab mit der Info der Karte.
    Aber wenn ich jetzt mit dem bis jetztigen umstellung ein eintrag machen will.
    Wird kein Insert für die Rechnung erstellt (wenn der Käufer vorhanden ist).
    Sobald ein neuer Käufer dazu kommt.
    Wird ein Insert für die Rechnung erstellt.

    Das ist der Code der alten Seite.
    PHP-Code:
    if(isset($_POST['add']))
        {
            
    $tb_rechnung_versand floatval(str_replace(",""."$_POST['add_versand']));
            
    $tb_karte_wo $_POST["add_wo"];
            
    $tb_kunde_vorname str_replace($suche$ersetze$_POST["add_vorname"]);
            
    $tb_kunde_nachname str_replace($suche$ersetze$_POST["add_nachname"]);
            
    $tb_rechnung_wo $_POST["add_wo"];
            
    $datum time();
            
    $eintrag "SELECT
                            tb_kunde_id
                        FROM
                            db_kunde
                        WHERE
                            tb_kunde_vorname = '"
    .$tb_kunde_vorname."'
                        AND
                            tb_kunde_nachname = '"
    .$tb_kunde_nachname."'";

            
    $eintragen mysql_query($eintrag) OR die("Error: ".mysql_error()."</ br> Zeile ".__LINE__);
            if(
    mysql_num_rows($eintragen) < 1)
                {
                    
    $strSQL "
                            INSERT INTO
                                db_kunde
                                    (
                                    tb_kunde_vorname,
                                    tb_kunde_nachname
                                    )
                            VALUES
                                (
                                '"
    .$tb_kunde_vorname."',
                                '"
    .$tb_kunde_nachname."'
                                );"
    ;
                    
    $eintragen mysql_query($strSQL) OR die("Error: ".mysql_error()."</ br> Zeile ".__LINE__);
                    
    $id_kunde mysql_insert_id();
                }
            else
                {
                    
    $ar_kund mysql_fetch_assoc($eintragen);
                    
    $id_kunde $ar_kund["tb_kunde_id"];
                }
            
    $strSQL "INSERT INTO
                        db_rechnung
                            (
                                tb_rechnung_kunde,
                                tb_rechnung_versand,
                                tb_rechnung_status,
                                tb_rechnung_wo,
                                tb_rechnung_datum
                            )
                    VALUES
                        (
                            "
    .$id_kunde.",
                            "
    .$tb_rechnung_versand.",
                            2,
                            '"
    .$tb_rechnung_wo."',
                            '"
    .$datum."'
                        );"
    ;
            
    $eintragen mysql_query($strSQL) OR die("Error: ".mysql_error()."</ br> Zeile ".__LINE__);
            
    $id_rechnung mysql_insert_id();
            foreach(
    $_POST['id_karte'] as $id)
                {
                    
    $tb_karte_transfer_preis floatval(str_replace(",""."$_POST['add_preis'][$id]));
                    
    $strSQL "
                            UPDATE
                                db_karte_transfer
                            SET
                                tb_karte_transfer_status = 2,
                                tb_karte_transfer_preis = "
    .$tb_karte_transfer_preis.",
                                tb_karte_transfer_kunde = "
    .$id_kunde.",
                                tb_karte_transfer_rechnung = "
    .$id_rechnung.",
                                tb_karte_transfer_wo = "
    .$tb_karte_wo."
                            WHERE
                                tb_karte_transfer_id = "
    .$id."";
                    
    $eintragen mysql_query($strSQL) OR die("Error: ".mysql_error()."</ br> Zeile ".__LINE__);
                }
        } 
    Das ist der neue Code
    PHP-Code:
    if(isset($_POST['reserviert']))
        {
            
    $tb_kunde_land $_POST["add_land"];
            
    $tb_karte_wo $_POST["add_wo"];
            
    $tb_kunde_vorname str_replace($suche$ersetze$_POST["add_vorname"]);
            
    $tb_kunde_nachname str_replace($suche$ersetze$_POST["add_nachname"]);
            
    $tb_rechnung_datum date("Y.m.d");
            if(
    $tb_kunde_land == "" OR $tb_kunde_vorname == "" OR $tb_kunde_nachname == "" OR $tb_karte_wo == "" OR $_POST['id_karte'] == "")
                {
                    echo 
    "Du hast nicht alle Felder ausgefühlt";
                }
            
    $eintrag "SELECT
                            tb_kunde_id
                        FROM
                            db_kunde
                        WHERE
                            tb_kunde_vorname = '"
    .$tb_kunde_vorname."'
                                AND
                                    tb_kunde_nachname = '"
    .$tb_kunde_nachname."'
                                AND
                                    tb_kunde_land = '"
    .$tb_kunde_land."'";
            
    $eintragen $db->query($eintrag) OR die("Error: ".$db->error()."</br> Zeile ".__LINE__);
            if (
    $eintragen->fetchColumn() < 1)
                {
                    
    $strSQL "INSERT INTO
                                db_kunde
                                    (
                                        tb_kunde_vorname,
                                        tb_kunde_nachname,
                                        tb_kunde_land
                                    )
                            VALUES
                                (
                                    '"
    .$tb_kunde_vorname."',
                                    '"
    .$tb_kunde_nachname."',
                                    '"
    .$tb_kunde_land."'
                                );"
    ;
                    
    $eintragen $db->query($strSQL) OR die("Error: ".$db->error()."</br> Zeile ".__LINE__);
                    
    $id_kunde $db->lastInsertId();
                }
            else
                {
                    
    $ar_kund $eintragen->fetch(PDO::FETCH_ASSOC);
                    
    $id_kunde $ar_kund["tb_kunde_id"];
                }
            
    $strSQL "INSERT INTO
                        db_rechnung
                            (
                                tb_rechnung_kunde,
                                tb_rechnung_status,
                                tb_rechnung_wo,
                                tb_rechnung_datum
                            )
                    VALUES
                        (
                            "
    .$id_kunde.",
                            1,
                            '"
    .$tb_karte_wo."',
                            '"
    .$tb_rechnung_datum."'
                        );"
    ;
            
    $eintragen $db->query($strSQL); 
    ich bin mir nicht sicher ob das mit dem mysql_fetch_assoc richtig gemacht habe?
    Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
    Aber ich nutze diese Version nur auf meinem Rechner.

  • #2
    Da ich meine gesamte Datenbank nun auf PDO umstelle.
    Ahm.. Nein. Du stellst "nur" die Schnittstelle um, mit der PHP und deine MySQL Datenbank kommunizieren. Die Datebank bleibt unverändert.

    Ich würde an deiner Stelle gleich von Beginn an nicht mit PDO::query() sondern mit prepared Statments machen. Damit sparst du dir zB auch das Escaping, bei query() hingegen nicht, da musst du alles noch händisch machen.

    Siehe hier: http://php-de.github.io/jumpto/pdo/#prepared-statements
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      ok werd ich machen.

      Noch ne frage.
      Ich will in einer Tabelle alle werte mit dem wert 114 auslesen (kein Problem mit WHERE) und die Menge zusammenzählen.
      Aber wie mach ich das nun?

      Vorher hab ich das so gemacht
      PHP-Code:
                      $GETSQL "    SELECT
                                      tb_karte_transfer_anzahl
                                  FROM
                                      db_karte_transfer
                                  LEFT JOIN
                                      db_rechnung
                                          ON
                                              db_rechnung.tb_rechnung_id = db_karte_transfer.tb_karte_transfer_rechnung
                                  WHERE
                                      db_rechnung.tb_rechnung_id = "
      .intval($_GET['id'])."";
                                          
      $kartensumme 0;
                                          
      $rs mysql_query($GETSQL) OR die("Error: ".mysql_error()."</ br> Zeile ".__LINE__);
                                          while(
      $row mysql_fetch_array($rs))
                                              {
                                                  
      $kartensumme $kartensumme $row['tb_karte_transfer_anzahl'];
                                              } 
      Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
      Aber ich nutze diese Version nur auf meinem Rechner.

      Kommentar


      • #4
        ???
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          Code:
          SELECT SUM(tb_karte_transfer_anzahl)

          Kommentar


          • #6
            Ahhhh supa und den gesamt Wert (tb_karte_transfer_preis)
            wie rechne ich das aus?
            Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
            Aber ich nutze diese Version nur auf meinem Rechner.

            Kommentar


            • #7
              Ist das jetzt dein ernst?

              Kommentar


              • #8
                ja ist mein einst.
                hab es mit Sum versucht, auch mit Count und sogar ne kombi mit den beiden.
                aber ich bekomme jedesmal ein anderen wert aus.
                Nur nicht den richtigen
                Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
                Aber ich nutze diese Version nur auf meinem Rechner.

                Kommentar


                • #9
                  Eigentlich SELECT SUM(...). In diesem Fall kannst du aber auch einfach SELECT PI() machen.

                  Kommentar


                  • #10
                    Ich hab das nun so gemacht.
                    PHP-Code:
                    <?php
                        $SQL 
                    "SELECT
                                    SUM(tb_karte_transfer_preis) tb_karte_transfer_preis,
                                    SUM(tb_karte_transfer_anzahl) tb_karte_transfer_anzahl
                                FROM
                                    db_karte_transfer
                                WHERE
                                    db_karte_transfer.tb_karte_transfer_rechnung = "
                    .intval($_GET['id'])."";
                        
                    $statement $db->prepare($SQL);
                        
                    $statement->execute();  
                        while(
                    $row $statement->fetch())
                            {
                                
                    $kartensumme floatval($row['tb_karte_transfer_preis'] * $row['tb_karte_transfer_anzahl']);
                            }
                    ?>
                                                        <td><?php echo number_format($kartensumme,2,",",".");?>&nbsp;Eur</td>
                    Aber nun bekomme ich den wert 5.768,78

                    Der alte Code schaute so aus
                    PHP-Code:
                                                        $kartensumme 0;
                                                        
                    $rs mysql_query($GETSQL) OR die("Error: ".mysql_error()."</ br> Zeile ".__LINE__);
                                                        while(
                    $row mysql_fetch_array($rs))
                                                            {
                                                                
                    $versandkosten floatval($row['tp_verpackung_eingabe']);
                                                                
                    $kartensumme $kartensumme floatval($row['tb_karte_transfer_preis'] * $row['tb_karte_transfer_anzahl']);
                                                            } 
                    Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
                    Aber ich nutze diese Version nur auf meinem Rechner.

                    Kommentar


                    • #11
                      http://php-de.github.io/jumpto/leitfaden/
                      Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                      Kommentar


                      • #12
                        ... oder anderes Hobby suchen.

                        Kommentar


                        • #13
                          Also ich kom einfach nicht weiter.
                          Bekomme nur den gesamtwert eines Artikels raus.
                          Aber den Gesamtwert aller Artikel bekomme ich einfach nicht hin
                          Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
                          Aber ich nutze diese Version nur auf meinem Rechner.

                          Kommentar


                          • #14
                            Zitat von Germanikus Beitrag anzeigen
                            Also ich kom einfach nicht weiter.
                            Weil du einfach (wie meistens) nicht mitdenkst!

                            Du schreibst
                            PHP-Code:
                            SUM(tb_karte_transfer_anzahltb_karte_transfer_anzahl 
                            willst aber
                            PHP-Code:
                            $kartensumme += $row['tb_karte_transfer_preis'] * $row['tb_karte_transfer_anzahl'
                            Jetzt mal nachdenken, wie die Abfrage lauten muss



                            Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                            Kommentar


                            • #15
                              also im alten Code hab ich es genau so gemacht (halt ohne Count und SUM)
                              Aber geht auch nicht

                              PHP-Code:
                              <?php
                                  $sum_list 
                              = array();
                                  
                              $transfer "SELECT
                                                  *
                                              FROM
                                                  db_karte_transfer
                                              WHERE
                                                  db_karte_transfer.tb_karte_transfer_rechnung = 3"
                              ;
                                  
                              $rs $db->select($transfer);
                                  
                              $sum_list['sum'] = $rs;
                                  
                              $page->set($sum_list);
                                  
                              extract($sum_list);
                                  foreach (
                              $sum as $key => $value):
                                  
                              // $kartensumme = floatval($pn[$key]['tb_karte_transfer_preis'] * $pn[$key]['tb_karte_transfer_anzahl']);
                              ?>
                              <?php
                                  
                              endforeach;
                              ?>

                              <input type="text" name="add_kaks" value="<?php $endpreis $sum[$key]['tb_karte_transfer_preis'] * $pn[$key]['tb_karte_transfer_anzahl']; echo number_format($endpreis,2,",","."); ?>">
                              Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
                              Aber ich nutze diese Version nur auf meinem Rechner.

                              Kommentar

                              Lädt...
                              X