Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de ::  Datenbanken ::  PHP-Array mit MySQL Datenbank ersetzen(PDO)
Antwort schreiben
Benutzername:
Titel:
Nachrichtentext:
  :)  :D  ;)  :(  :p  :mad:  :rolleyes:  :eek:  :confused:  :cool:  :o)  :leak:  :live:  :die:  :idea:  :arrow:  :warning: 
                             
                         
         
           
                             
                             
                             
             


BBCode in diesem Beitrag deaktivieren [BBCode]
Smilies in diesem Beitrag deaktivieren
PHP-Array mit MySQL Datenbank ersetzen(PDO) and 303967
     


Themen-Überblick 
(Aktualisieren)
Autor Nachricht
_--
08:27:04 29.05.2012   Titel:   Zitieren

wieso verwendet keiner array_key_exists() :confused:

Example #2 array_key_exists() vs isset()

isset() does not return TRUE for array keys that correspond to a NULL value, while array_key_exists() does.
Mechanics
15:35:24 28.05.2012   Titel:   Zitieren

gast55 schrieb:
Ich weiss jetzt wo das Problem liegt. Die if-Bedingung wird immer TRUE zurückgeben solange der SQL Befehl erfolgreich ausgeführt werden kann.


Das hab ich doch schon ZWEI mal geschrieben. Und auch, wie du das löst.
gast55
11:40:19 28.05.2012   Titel:   Zitieren

Ich weiss jetzt wo das Problem liegt. Die if-Bedingung wird immer TRUE zurückgeben solange der SQL Befehl erfolgreich ausgeführt werden kann. Ich wollte aber nicht das er den Befehl prüft, sondern die Spalte durchgeht in denen die namen stehen und guckt ob dort, der vom Benutzer eingegebene name mit den schon vorhandenen identisch ist.

In einem Array würde es heißen:
PHP:
if(!isset($this->Array[$name]))
{nicht vorhanden, ... }
else
{schon vorhanden!}


Wie kann ich das mit PDO realisieren?
Mechanics
19:49:46 27.05.2012   Titel:   Zitieren

Ja, hab ich doch geschrieben. Wieso sollte $rekurs->execute nicht funktionieren? Das Ausführen des Statements funktioniert doch, deswegen kommt da auch true zurück und er geht in den entsprechenden Zweig. Du musst dir die Anzahl der entsprechenden Zeilen mit Select count(*) holen.
gast55
19:33:50 27.05.2012   Titel:   Zitieren

Das Problem ist das es immer den else Zweig ausführt.

weiter unten wird die funktion mit: $Card -> add("name1e", 4, 3); aufgerufen.
"name1" existiert jedoch bereits in meiner Tabelle. Trotzdem wird "Artikel darf nur 1mal enthalten sein..." angezeigt und INSERT INTO wird überhaupt nicht ausgeführt.

Also $stmt->execute() macht er nicht!

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     /**
     * Neue Artikel hinzufügen, ohne Redundanz
     */

    public function add($name, $price, $quantity) {
        $rekurs = $this -> db -> prepare('Select * From ShoppingCard Where name Like :name');
        $rekurs -> bindParam(':name', $name);
        if (!$rekurs -> execute()) {
            $stmt = $this -> db -> prepare('Insert into ShoppingCard values (:orderid, :name, :quantity, :price)');
            $stmt -> bindParam(':orderid', $this -> orderid);
            $stmt -> bindParam(':name', $name);
            $stmt -> bindParam(':quantity', $quantity);
            $stmt -> bindParam(':price', $price);
            $stmt -> execute();
        } else {
            echo "Artikel darf nur 1mal enthalten sein...";
        }
    }
Mechanics
18:55:10 27.05.2012   Titel:   Zitieren

Warum sollte $rekurs->execute nicht funktionieren? Funktionen tut es schon, nur gibt es keine Zeilen zurück. Du könntest z.B. ein SELECT Count(*) ausführen und dir dann den Wert mit fetchColumn holen.
Natürlich ist es generell besser, Anweisungen so spät wie möglich auszuführen. Die ersten zig Befehle brauchst du doch erst, wenn du ein Insert machen willst, wenn du es dann doch nicht machen willst, waren sie völlig umsonst.
gast55
18:45:59 27.05.2012   Titel:   Zitieren

Also Faul auf keinen Fall :D aber die Zeit für das einlesen, bis jetzt hättet Ihr mir natürlich mit einpaar sätzen ersparen können, ist natürlich Charackter/Einstellungs frage.

Jedenfalls habe ich weiter gemacht und meine If-Abfrage geht immer auf False, also in den else Zweig. Und hier komme ich wirklich nicht weiter:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function add($name, $price, $quantity) {
        $stmt = $this -> db -> prepare('Insert into ShoppingCard values (:orderid, :name, :quantity, :price)');
        $stmt -> bindParam(':orderid', $this -> orderid);
        $stmt -> bindParam(':name', $name);
        $stmt -> bindParam(':quantity', $quantity);
        $stmt -> bindParam(':price', $price);
        $rekurs = $this -> db -> prepare('Select * From ShoppingCard Where name Like :name');
        $rekurs -> bindParam(':name', $name);
        if (!$rekurs -> execute()) {
            $stmt -> execute();
        } else {
            echo "Artikel darf nur 1mal enthalten sein...";
        }
    }

Sie sollte bei identischem Namen kein Insert ausführen! Nur tut es das Nie.
Mechanics
16:35:24 26.05.2012   Titel:   Zitieren

Hä? Wie wärs, wenn du dich einfach mal ein bisschen in das Thema einliest? Soll das jetzt jemand für dich zusammenfassen, weil du zu faul bist, deine kostbare Zeit zu investieren? Ja, wenn ich Code sehe, verstehe ich nur, dass du gar nichts weißt und keine Lust hast, dich damit zu beschäftigen.
gast55
16:16:09 26.05.2012   Titel:   PHP-Array mit MySQL Datenbank ersetzen(PDO) Zitieren

Hallo,

der Titel sagt eigentlich alles. Das Problem dabei ist das ich nicht genau weiß wie ich mit diesen PDO-Methoden meine Datenbank durchsuchen, abfragen kann.

SQL befehle kenne ich ja schon, nur werden hier auch parameter übergeben und wie kann ich dann genau "diese" Zeile/Spalte löschen? Oder zB Überprüfen ob ein element gesetzt ist? ->Ausgeben der Tabelle?

Wenn Ihr den Code seht werdet Ihr verstehen was ich meine.

Verbindung kriege ich, die Funktionen sind mein Problem.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
 
/**
 * Datenbank-klasse
 */

class ShoppingCard {
   
    protected $db;
    protected $orderid;
 
    public function __construct($hostname, $username, $password) {
        try
        {
            /**Mit Datenbank verbinden**/
            $this->$db = new PDO("mysql:host=$hostname;dbname=blabla", $username, $password);
            echo 'Verbindung zur Datenbank hergestellt';
 
            /**PDO Error-Mode auf Exceptions setzen**/
            $this->$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            //$this->$db -> exec("Insert into ShoppingCard(orderID, name, quantity, price) Values ('34','jacoc', 435, 89.3)");
        }
        catch (PDOException $e) {
            echo "Fehler bei Verbindung: " . $e -> getMessage();
        }
 
    }
   
    public function setOrderid($orderid)
    {
        $this->$orderid = $orderid;
    }
   
    public function add($name, $price, $quantity)
    {
       
    }
   
    public function delete($name, $quantity)
    {
       
    }
   
    public function display()
    {
       
    }
 
}
 
$hostname = 'localhost';
$username = '***';
$password = '***';
 
$Card = new ShoppingCard($hostname,$username,$password);
 
?>

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.