Siehe Posting #11 und/oder #12
Ankündigung
Einklappen
Keine Ankündigung bisher.
Fragen zur PDO
Einklappen
Neue Werbung 2019
Einklappen
X
-
Halllo nochmal,
das Problem mit dem zählen hat sich nun erledigt.
Lösung ist
PHP-Code:$kartensumme = 0;
$sql = "SELECT
SUM(tb_karte_transfer_anzahl) inhalt,
tb_karte_transfer_preis,
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(PDO::FETCH_ASSOC))
{
$kartensumme = $kartensumme + floatval($row['tb_karte_transfer_preis'] * $row['tb_karte_transfer_anzahl']);
}
Wenn ich eine Karte Tausche und ich einen (neunen) Trader habe.
Überprüfe ich die mit Selct und fals er nicht vorhanden ist in der DB.
Wird der mit Insert eingetragen.
Dabei wird der neu eingetragene Trader deren ID weitergegeben in die Tabelle der Karte.
So sieht der alte Code davon aus
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"];
}
}
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";
}
$client_array = array();
$select_client = "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."'";
$select = $db->query($select_client) OR die("Error: ".$db->error()."</br> Zeile ".__LINE__);
if ($select->fetchColumn() < 1)
{
$client_data['tb_kunde_vorname'] = $tb_kunde_vorname;
$client_data['tb_kunde_nachname'] = $tb_kunde_nachname;
$client_data['tb_kunde_land'] = $tb_kunde_land;
$add_client = $db->insert("db_kunde",$client_data) OR die("Error: ".$db->error()."</br> Zeile ".__LINE__);
$id_kunde = $add_client->lastInsertId();
}
else
{
$ar_kund = $client_array[0];
$id_kunde = $ar_kund["tb_kunde_id"];
}
}
Notice: Undefined offset: 0 in ....\angebot.php on line 37
Keine Ahnung warum.
Könnt ihr mir da weiter helfen
Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
Aber ich nutze diese Version nur auf meinem Rechner.
Kommentar
-
Warum nutzt du nicht Prepared Statments? So brings das nicht viel, sind die Queries ja wieder nicht abgesichert. Mach es doch gleich "richtig".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
-
Zitat von Germanikus Beitrag anzeigendas Problem mit dem zählen hat sich nun erledigt.
Lösung ist
PHP-Code:$kartensumme = 0;
$sql = "SELECT
SUM(tb_karte_transfer_anzahl) inhalt,
tb_karte_transfer_preis,
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(PDO::FETCH_ASSOC))
{
$kartensumme = $kartensumme + floatval($row['tb_karte_transfer_preis'] * $row['tb_karte_transfer_anzahl']);
}
Was ist tb_karte_transfer_preis? Ist das der Einzelpreis einer ... was ... Rechnungsposition?
Ist folglich tb_karte_transfer_anzahl die Menge der Rechnungsposition? Wenn das so ist, dann macht SUM(tb_karte_transfer_anzahl) hier keinen Sinn.
Zumal du PDO auch richtig benutzen solltest:
PHP-Code:<?php
$query = "
SELECT
kt.tb_karte_transfer_anzahl AS anzahl,
kt.tb_karte_transfer_preis AS preis,
kt.tb_karte_transfer_preis * kt.tb_karte_transfer_anzahl AS gesamtpreis
FROM
db_karte_transfer kt
WHERE
kt.tb_karte_transfer_rechnung = :id
";
$statement = $db->prepare($query);
$statement->execute(['id' => $_GET['id']]);
foreach($statement->fetchRows(PDO::FETCH_ASSOC) as $row) {
print_r($row);
}
Wenn das eine Rechnung/Bestellung sein soll, dann ist das Schemadesign möglicherweise kaputt.
Kommentar
-
So bin schon wieder ein kleines stück weiter gekommen.
Aber nun habe ich mal ne frage, warum das nicht (mal wieder, wie soll es den sonst sein^^) hinhaut.
Also wenn ein neuer Trader erstellt wird, der nicht in der DB steht.
Wird er erstellt und desen ID wird in der rechnung abgesichert.
Aber warum wird die ID von den vorhandenen Trader nicht in der rechnung abgespeichert.
Bei vardump bekomme ich den wert aus.
Aber der fehler verweist mich in die klasse
array(1) { ["tb_kunde_id"]=> string(1) "1" }
Notice: Array to string conversion in ...\classes.php on line 29
PHP-Code:if(isset($_POST['reserviert']))
{
$tb_kunde_vorname = str_replace($suche, $ersetze, $_POST["add_vorname"]);
$tb_kunde_nachname = str_replace($suche, $ersetze, $_POST["add_nachname"]);
$sql = "SELECT
tb_kunde_id
FROM
db_kunde
WHERE
tb_kunde_vorname = :vorname
AND
tb_kunde_nachname = :nachname";
$select = $db->prepare($sql);
$select->bindParam(':vorname', $tb_kunde_vorname);
$select->bindParam(':nachname', $tb_kunde_nachname);
$select->execute();
if($select->rowCount() < 1)
{
$client_data['tb_kunde_vorname'] = $tb_kunde_vorname;
$client_data['tb_kunde_nachname'] = $tb_kunde_nachname;
$add_client = $db->insert("db_kunde",$client_data) OR die("Error: ".$db->error()."</br> Zeile ".__LINE__);
$id_kunde = $db->lastInsertId();
}
else
{
$results = $select->fetchAll(PDO::FETCH_ASSOC);
$id_kunde = $results[0];
var_dump($id_kunde);
}
$rechnung['tb_rechnung_kunde'] = $id_kunde;
$add_rechnung = $db->insert("db_rechnung",$rechnung) OR die("Error: ".$db->error()."</br> Zeile ".__LINE__);
}
PHP-Code:class Database extends PDO {
public function __construct($DB_TYPE, $DB_HOST, $DB_NAME, $DB_PASS, $DB_USER){
parent::__construct($DB_TYPE.":host=".$DB_HOST.';dbname='.$DB_NAME.";charset=utf8", $DB_USER, $DB_PASS);
}
public function select($sql, $array = array(), $fetchMode = PDO::FETCH_ASSOC){
$sth = $this->prepare($sql);
foreach($array as $key => $value){
$sth->bindValue($key, $value);
}
$sth->execute();
return $sth->fetchAll($fetchMode);
}
public function insert($table, $data){
//ksort($data);
$this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$fieldNames = implode('` , `', array_keys($data));
$fieldValues = ":".implode(', :', array_keys($data));
$sth = $this->prepare("INSERT INTO `".$table."` (`".$fieldNames."`) VALUES (".$fieldValues.")");
foreach ($data as $key => $value) {
$sth->bindValue(":".$key, $value);
}
return $sth->execute();
}
Ja ich weiß das MySQL_ API was ich verwende veraltet ist.
Aber ich nutze diese Version nur auf meinem Rechner.
Kommentar
-
Zitat von Germanikus Beitrag anzeigenNotice: Array to string conversion in ...\classes.php on line 29
Zitat von Germanikus Beitrag anzeigenwarenkorp.php
klasse.php
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
Kommentar