MySQL pdo prepare execute ->update


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
#1
Hallo.
Ich habe folgenden Code:
SQL:
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$address_street = $_POST['option_selection1'];
$name = $_POST["option_selection2"];
$zip = $_POST["option_selection3"];
$city = $_POST["option_selection4"];
$bezahlt = 'true';
$invoice = $_POST['invoice'];

$sql = "UPDATE warenkorb SET vorname = ?, nachname = ?, strasse = ?,
name = ?, plz = ?, ort = ?, bezahlt = ? WHERE id = '{$invoice}'";
$statement = $pdo->prepare($sql);
$statement->execute(array($first_name, $last_name, $address_street,
                          $name, $zip, $city, $bezahlt));
Die $_POST Variablen kommen von PayPal.

Ich bekomme eine Fehlermeldung wenn Ich in einem PayPal vorangehenden Formular in das Strasse Input ($_POST['option_selection1']) meine mit - geschriebene Strasse eintrage:
[14-May-2019 15:10:38 UTC] PHP Fatal error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: '\xDFe 60' for column `domain_de`.`warenkorb`.`strasse` at row 1 in /customers/b/3/2/domain.de/httpd.www/action.php:20
Stack trace:
#0 /customers/b/3/2/domain.de/httpd.www/action.php(20): PDOStatement->execute(Array)
#1 {main}
thrown in /customers/b/3/2/domain.de/httpd.www/action.php on line 20


Wenn ich allerdings einen Strassenname ohne Sonderzeichen eingebe, funktioniert der Eintrag in die Datenbank.

Kann jemand helfen?
 
Zuletzt bearbeitet:

Yaslaw

n/a
Moderator
#3
Zeig doch mal die Tabellendefinition. Spezifisch das Feld warenkorb.strasse. Ist das auch brav ein Varchar?
Und lass dir $_POST mal mir var_dump() ausgeben.
 
#4
SQL:
CREATE TABLE `warenkorb` (
  `id` int(11) NOT NULL,
  `array` text COLLATE utf8_bin DEFAULT NULL,
  `vorname` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `nachname` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `strasse` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `plz` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `ort` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `bezahlt` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `bezahlt am` datetime NOT NULL,
  `verschickt` varchar(255) CHARACTER SET utf32 COLLATE utf32_bin DEFAULT NULL,
  `verschickt am` datetime NOT NULL,
  `sendungsnummer` varchar(255) COLLATE utf8_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
["on0"]=> string(6) "Srasse" ["os0"]=> string(26) "Max-Mustermann-Straße 123"
 

Yaslaw

n/a
Moderator
#5
Code:
["on0"]=> string(6) "Srasse" ["os0"]=> string(26) "Max-Mustermann-Straße 123"
Da ist kein $_POST['option_selection1']; drin
 

Zvoni

Erfahrenes Mitglied
#17
Es geht nicht um dein Script, es geht um die PayPal-Seite.
Lies dir mal den Link oben durch.
So if you want to make sure what the charset really is, do so inside of your IPN-handling script by checking the value of charset in the POST message.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…