Hallo,

Ik onderhoud een site en moet nu zorgen voor een bevestiging mail plus een insert query die alle gegevens opslaat in de database.
Bij het testen werkt de betaling wel alleen de mail en de query worden niet uitgevoerd.
Heb niet veel ervaring met ideal dus misschien zit ik bij het verkeerde eind.

De ideal code is door een andere programmeur zeer slordig geprogrammeerd en doordat er nogal haast achter zit heb ik dit nog niet geoptimaliseerd.

De code
_____________________________________
<?php
if(isset($_GET['ec']) && isset($_GET['trxid'])){
// 000000 OK betekent succesvol. We kunnen het product leveren
if(($status = CheckReturnurl( $rtlo, $_GET['trxid'] ))=="000000 OK" )
{
echo $_SESSION['voornaam']."<br>";
echo $_SESSION['achternaam']."<br>";
echo $_SESSION['tel_nummer']."<br>";
echo $_SESSION['email']."<br>";
echo $_SESSION['id']."<br>";
echo $_SESSION['prijs']."<br>";
echo $_SESSION['numberDays']."<br>";
echo $_SESSION['personen']."<br>";
echo $_SESSION['checkin']."<br>";
echo $_SESSION['checkout']."<br>";
echo $_SESSION['aanhef']."<br>";
echo $_SESSION['adres']."<br>";
echo $_SESSION['postcode']."<br>";
echo $_SESSION['woonplaats']."<br>";
echo $_SESSION['totaalprijs']."<br>";
echo $_SESSION['res_nummer']."<br>";
echo $_SESSION['reisideal']."<br>";
echo $_SESSION['annuleerideal']."<br>";


//$stmt = $connect->prepare("INSERT INTO reservering (ip, reserveringsnummer, aanhef, adres, postcode, woonplaats, user_id, naam, achternaam, telnummer, email, huis_id, prijs, reis, annuleer, dagen, personen, checkin, checkout, datum) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, NOW())");
//$stmt->bind_param('sssssssssssssssss', $ip, $_SESSION['res_nummer'], $_SESSION['aanhef'], $_SESSION['adres'], $_SESSION['postcode'], $_SESSION['woonplaats'], $_SESSION['user_id'], $_SESSION['voornaam'], $_SESSION['achternaam'], $_SESSION['tel_nummer'], $_SESSION['email'], $_SESSION['id'], $_SESSION['totaalprijs'], $_SESSION['reisideal'], $_SESSION['annuleerideal'], $_SESSION['numberDays'], $_SESSION['personen'], $_SESSION['checkin'], $_SESSION['checkout']);
//$stmt->execute();
$stmt = $connect->prepare("INSERT INTO reservering (ip, reserveringsnummer, aanhef, adres, postcode, woonplaats, user_id, naam, achternaam, telnummer, email, huis_id, prijs, reis, annuleer, dagen, personen, checkin, checkout, datum)
VALUES (:ip, :reserveringsnummer, :aanhef, :adres, :postcode, :woonplaats, :user_id, :naam, :achternaam, :telnummer, :email, :huis_id, :prijs, :reis, :annuleer, :dagen, :personen, :checkin, :checkout, :datum)");
$stmt->bindParam(':ip', $id);
$stmt->bindParam(':reserveringsnummer', $_SESSION['res_nummer']);
$stmt->bindParam(':aanhef', $_SESSION['aanhef']);
$stmt->bindParam(':adres', $_SESSION['adres']);
$stmt->bindParam(':postcode', $_SESSION['postcode']);
$stmt->bindParam(':woonplaats', $_SESSION['woonplaats']);
$stmt->bindParam(':user_id', $_SESSION['user_id']);
$stmt->bindParam(':naam', $_SESSION['voornaam']);
$stmt->bindParam(':achternaam', $_SESSION['achternaam']);
$stmt->bindParam(':telnummer', $_SESSION['tel_nummer']);
$stmt->bindParam(':email', $_SESSION['email']);
$stmt->bindParam(':huis_id', $_SESSION['id']);
$stmt->bindParam(':prijs', $_SESSION['totaalprijs']);
$stmt->bindParam(':reis', $_SESSION['reisideal']);
$stmt->bindParam(':annuleer', $_SESSION['annuleerideal']);
$stmt->bindParam(':dagen', $_SESSION['numberDays']);
$stmt->bindParam(':personen', $_SESSION['personen']);
$stmt->bindParam(':checkin', $_SESSION['checkin']);
$stmt->bindParam(':checkout', $_SESSION['checkout']);
$stmt->bindParam(':datum', NOW());
$stmt->execute();

//mail
$to = $_SESSION['email']; // note the comma
$subject = "Bevestiging reservering HuurinTurkije";
$message = "TEST";
mail($to, $subject, $message, $headers);
$link = "www.voorbeeld.nl"
header( "Location: ". $link );
}
?>
____________________________

Zit ik bij het goede if statement en wat gaat er dan eventueel fout.

Bij voorbaat dank!

Ja je zit goed.

ik denk dat hier je probleem zit:

1. Session_start toegepast?
2. database verbinding opgezet?

<?php
$stmt->bindParam(':ip', $id);
?>

$id of moet dat $ip zijn?
Elmar vH op 03/07/2014 14:43:23

Ja je zit goed.

ik denk dat hier je probleem zit:

1. Session_start toegepast?
2. database verbinding opgezet?


Ja beide zijn juist.



[size=xsmall]Toevoeging op 03/07/2014 15:10:01:[/size]

Erwin H op 03/07/2014 14:53:21


<?php
$stmt->bindParam(':ip', $id);
?>

$id of moet dat $ip zijn?

Moest ip zijn, gelijk aangepast.
Zien jullie verder geen fouten? Heb de insert query zelf aangepast de vorige programmeur kwam met dit:
____________________________
<?php
$stmt = $connect->prepare("INSERT INTO reservering (ip, reserveringsnummer, aanhef, adres, postcode, woonplaats, user_id, naam, achternaam, telnummer, email, huis_id, prijs, dagen, personen, checkin, checkout, datum) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, NOW())");
$stmt->bind_param('sssssssssssssssss', $ip, $_SESSION['res_nummer'], $_SESSION['aanhef'], $_SESSION['adres'], $_SESSION['postcode'], $_SESSION['woonplaats'], $_SESSION['user_id'], $_SESSION['voornaam'], $_SESSION['achternaam'], $_SESSION['tel_nummer'], $_SESSION['email'], $_SESSION['id'], $_SESSION['totaalprijs'], $_SESSION['numberDays'], $_SESSION['personen'], $_SESSION['checkin'], $_SESSION['checkout']);
$stmt -> execute();
?>
Hoe wordt dit script aangeroepen?

Is dat de bezoeker van de site, of is het een call "onderwater" vanaf "de bank"

In dat laatste geval is er geen gevulde $_SESSION.
Die gegevens zul je dan aan de hand van $_GET['trxid'] (transaxie-id) moeten opvragen
Wat doet 'ssssssssssssssssss' daar? Nu komt het aantal velden met de bindparameters niet overeen. Kijk dus even naar je foutafhandeling van je query.
@gerhard
Volgens mij is dat een foutieve mix van mysqli (oo) en pdo. bind_param() is een method in het mysqli statement object dat als eerste parameter een string verwacht die voor elke gebonden parameter het type duidt. s staat daarin voor string. In PDO heb je die methode niet, maar bindParam die je voor elke parameter aanroept.

@Mike
Mike van den Hoek op 03/07/2014 15:08:44

Moest ip zijn, gelijk aangepast.

Met alle respect, maar dit zijn dus wel fouten die je zelf moet kunnen vinden. Tikfouten maken we allemaal en dus ook dit soort dingen. Alleen met behulp van de fout rapportage van php zie je dat direct. Php zal direct aangeven dat $id niet bestaat en dat je die dus niet kunt gebruiken. Zorg dus altijd dat je in je test omgeving dit soort foutmeldingen op je scherm krijgt.

@Ivo
Bingo! Ik had ook al het gevoel dat er iets niet klopte, maar kon de vinger niet op de zere plek leggen, maar dat lijkt mij het probleem. De call komt van de ideal afhandelaar en dus heb je geen toegang tot de session van de gebruiker.
Ik denk niet dat dit door ideal gecalled wordt omdat je al een resultaat in je database moet hebben alvorens ideal je hook raadpleegt. Het enige wat ideal doorgeeft is de status van de betaling. Mocht het wel zo zijn dat zit zijn logica niet goed in elkaar..
Is het een Target Pay script? Ik heb namelijk nog een script liggen dat ik gemaakt heb en goed werkt. Is ook een stuk duidelijker gemaakt. Stuur even een PM als je em wil hebben
Reshad F op 03/07/2014 21:20:14

Ik denk niet dat dit door ideal gecalled wordt

ideal roept helemaal niets aan, want dat is alleen een betaalmethode. Hoe de toko het regelt die de betaling uitvoert ligt aan hun implementatie.

Gezien dit stukje code lijkt het er wel op dat het een afhandeling van de call van de betaal toko is:

<?php
if(isset($_GET['ec']) && isset($_GET['trxid'])){
  // 000000 OK betekent succesvol. We kunnen het product leveren
  if(($status = CheckReturnurl( $rtlo, $_GET['trxid'] ))=="000000 OK" )
?>


Is dit de report url van de betaling provider?

Zo ja, moet je zoals ook al eerder aangegeven door iemand anders een database verbinding tot stand brengen en via de terug geposte transactieId uit je database de benodigde gegevens ophalen. Om te testen haal ik meestal alles weg en stuur ik enkel een mailtje met daarin de transactie_ID post, zo kan je zien of het bestand uberhaubt wordt aangeroepen.

Reageren