gegevens worden niet opgeladen in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul prive

paul prive

12/06/2007 11:07:00
Quote Anchor link
Beste
ik heb het volgend formulier gemaakt maar spijtig genoeg komen de gegevens niet in de database terecht wat doe ik hier fout?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
<?php
// Associatieve array voor de betaalmethodes
// om te voorkomen dat de array moet worden geconverteerd en gesorteerd,
// staan de betaalmethodes als HTML in alfabetische volgorde:


$payment = array (
               "CC"        => "Creditcard",
               "Dexia"    => "DEXIA NetBanking",
               "Direct" => "Direct Debits NL",
               "Ideal"    => "Ideal",
               "ING"    => "ING Homepay",
               "kbc"    => "KBC Online",
               );


$currency = array (
                    "AUD"    =>    "Australische Dollar",
                    "CAD"    =>    "Canadese Dollar",
                    "CHF"    =>    "Zwitserse frank",
                    "CNY"    =>    "Yuan Renminbi",
                    "CZK"    =>    "Tsjechische Kroon",
                    "DKK"    =>    "Deense kroon",
                    "EEK"    =>    "Estonia Kroon",
                    "EUR"    =>    "EURO",
                    "GBP"    =>    "Britse Pond",
                    "HKD"    =>    "Hong Kong Dollar",
                    "HRK"    =>    "Croatian Kuna",
                    "HUF"    =>    "Hongaarse Forint",
                    "ILS"    =>    "New Shekel",
                    "ISK"    =>    "Iceland Krona",
                    "JPY"    =>    "Japanse Yen",
                    "MAD"    =>    "Moroccan Dirham",
                    "NZD"    =>    "Nieuw Zeelandse Dollar",
                    "PLN"    =>    "Poolse Zloty",
                    "RUR"    =>    "Rouble"
                    );

//Formulier lezen en controleren:
if(isset($_POST['submit'])){
    $OrderId = trim($_POST['orderid']);
    $amount = trim($_POST['amount']);
    $currency = trim($_POST['currency']);
    $payment = trim($_POST['pt']);
    $ShaSign = trim($_POST['ShaSign']);

    $melding =""; //string voor foutmeldingen
    if (strlen($Orderid) <0) {
        $melding .=" het orderid moet uit minimaal 1 teken bestaan.";
    }

    //amount moet zonder comma's geplaatst worden
    if (strlen($amount)<2) {
        $melding .="Het bedrag mag geen comma's bevatten vb 5,00 Euro wordt 500";
    }

    //lengte van shasign controleren
    if (strlen($ShaSign) <40) {
        $melding .="De shasign moet uit 40 karakters bestaan";
    }

    if (strlen($naam)<1) {
        $melding .="gebruikersnaam moet uit tenminste 7 karakters bestaan";
    }

    //overige formuliergegevens lezen
    $naam =$_POST['naam'];

    //database verbinding pas openen als er geen foutmeldingen zijn:
    if ($melding == ""){
        //eerst controleren of het OrderID al bestaat
        $sql1 = "Select `OrderId` FROM `payments` ";
        $sql1 .="WHERE `OrderId` = '$OrderId'";
        $sql2 = "INSERT INTO `payments` (`paymentid`, `OrderId`, `naam`, `ShaSign`, `payment`,`currency`)";
        $sql2 .= "VALUES (";
        $sql2 .="'$paymentid','$OrderId','$amount','$ShaSign','$payment','$currency'";
        $sql2 .=");";
    
    //constanten voor Mysql_connect() insluiten:
    require_once('mysql_connect.inc.php');
    //database selecteren en verbinding openenen
    $verbinding = mysql_connect(MYSQL_SERVER,MYSQL_GEBRUIKERSNAAM,MYSQL_WACHTWOORD) or die(mysql_error());
        mysql_select_db("foto_galerij") or die (mysql_error());
    //kijken of OrderId al gebruikt is
    $resultaat = mysql_query($sql1) or die(mysql_error());
    //de tweede query uitvoeren als het Orderid niet gevonden is
    if (mysql_num_rows($resultaat) == 0){
        mysql_free_result($resultaat);
        mysql_query($sql2) or die (mysql_error());
        mysql_close($verbinding);
        //succesvolle betaling vermelden
        if (!headers_sent()) {
                header("Cache-Control: no-store, no-cache, must-revalidate");
                header("Cache-Control: post-check=0, pre-check=0", false);
                header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
                 }

            include_once('header.php');
            echo "<h1>betaling uitgevoerd</h1>\n";
            
            include_once('footer.php');
            exit;
        }
else {
            mysql_free_result($resultaat);
            mysql_close($verbinding);
            $melding .= "het Orderis <strong>$OrderId</strong> is al eens gebruikt ";
            $OrderId = "";
        }
    }


}

    // Lege formuliervelden:
    $naam                = "";
    $OrderId            = "";
    $ShaSign            = "";
    //vaste bijdrage
    $amount                = "500";
    
    //vaste waarden
    $pspid ="paulecommercest";
    $pswd="hash";
    //berekening van sha1    
    $ShaSign= sha1($OrderId.$amount.$currency.$pspid.$pswd);


// HTTP-headers toevoegen:
if (!headers_sent()) {
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
}


//include_once('header.txt');
?>

<body>
<?php include_once('header.php');
require_once("init.php");
print getNavHTML();
?>

<form method="post" action="https://secure.ogone.com/ncol/test/orderstandard.asp" id="form1" name="form1" >

    <fieldset>
    <legend>paymentform</legend>
    
    <table >
    
        <tr>
            <td>
                <label for="n">
                <span style="text-decoration: underline">N</span>aam:</label>
            </td>
            <td>
                <input
                 accesskey ="n"
                 name="n"
                 id="n"
                 type="text"
                 value="<?php echo $naam;?>"/>

            </td>
        </tr>

        <tr>
            <td>
                <label for="orderid">
                <span style="text-decoration: underline">O</span>rderId:</label>
                
            </td>
            <td>
                <input
                     accesskey="orderid"
                     name="orderid"
                     id="orderid"
                     type="text"
                     value="<?php echo $OrderId;?>"/>
            </td>
        </tr>    
        <tr>
            <td>
                <label for="currency">
                <span style="text-decoration: underline">C</span>urrency:</label>
                
            </td>
            <td>
                <select
                     accesskey="currency"
                     name="currency"
                     id="currency"
<?php
foreach ($currency as $currencycode => $currencyname) {
        echo "<option ";
    if ($currencycode == $currencyname) {
        echo "selected ";
    }

    echo "value=\"".$currencycode."\">".$currencyname."</option>\n";
}

    
?>

                </select>                    
            </td>
        </tr>
                <tr>
            <td>
                <label for="amount">
                <span style="text-decoration: underline">A</span>mount:</label>
                
            </td>
            <td>
                <input
                     accesskey="amount"
                     name="amount"
                     id="amount
                     type="text"
                     value="<?php echo $amount;?>"/>
            </td>
        </tr>                
            <tr>
            <td>
                <label for="SHASign">
                <span style="text-decoration: underline">S</span>haSign:</label>
                
            </td>
            <td>
            
                <input
                     accesskey="SHASign"
                     name="SHASign"
                     id="SHASign"
                     type="text"
                     value="<?php echo $ShaSign;?>"/>
            </td>
        </tr>        
            <tr>
            <td>
                <label for="pt">
                <span style="text-decoration: underline">P</span>aymenttype:</label>
                
            </td>
            <td>
                <select
                     accesskey="pt"
                     name="pt"
                     id="pt"
                     type="text"/>
<?php
foreach ($payment as $paymentcode => $paymentname) {
        echo "<option ";
    if ($paymentcode == $paymentname) {
        echo "selected ";
    }

    echo "value=\"".$paymentcode."\">".$paymentname." </option>\n";
}


?>
                
                </select>
            </td>
            <tr>
            </tr>
            <td>
                &nbsp;
            </td>
            <td>
                <input type="hidden" name="PSPID" value="paulecommercest">
                <input type="submit" value="versturen" id="submit2" name="submit2">
            
            </td>
        </tr>    
    
    </table>
    
    </fieldset>
</form>

tevens heb ik nog 2 punten :
1 hoe krijg ik mijn veld OrderId automatisch geupdate dus OrderId begint bij 00001 en moet iedere keer met 1 verhoogd worden.
2 en hoe krijg ik de ShaSign op de correcte manier geupdate?

alvast bedankt voor de moeite en feedback
Gewijzigd op 01/01/1970 01:00:00 door Paul prive
 
PHP hulp

PHP hulp

28/11/2024 18:06:50
 
Kevichill

Kevichill

12/06/2007 11:10:00
Quote Anchor link
zet alles eens in code tags ...
 
Paul prive

paul prive

12/06/2007 11:15:00
Quote Anchor link
sorry had dit over het hoofd gezien
 
Wim Mari

Wim Mari

12/06/2007 11:16:00
Quote Anchor link
variabele buiten quotes is mss al de oplossing....

dus niet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
        $sql2
= "INSERT INTO `payments` (`paymentid`, `OrderId`, `naam`, `ShaSign`, `payment`,`currency`)";
        $sql2 .= "VALUES (";
        $sql2 .="'$paymentid','$OrderId','$amount','$ShaSign','$payment','$currency'";
        $sql2 .=");";
?>

maar
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
        $sql2
= "INSERT INTO `payments` (`paymentid`, `OrderId`, `naam`, `ShaSign`, `payment`,`currency`)";
        $sql2 .= "VALUES (";
        $sql2 .="'".$paymentid."','".$OrderId."','".$amount."','".$ShaSign."','".$payment."','".$currency."'";
        $sql2 .=");";
?>


Voor zon groot stuk code is pastebin.be oid mss wel handig...!


Geen idee of het mag of niet, maar je steekt je mysql verbinding in een variabele, en je selecteerd je db zonder deze op te geven:
$verbinding = mysql_connect(MYSQL_SERVER,MYSQL_GEBRUIKERSNAAM,MYSQL_WACHTWOORD) or die(mysql_error());
mysql_select_db("foto_galerij") or die (mysql_error());

mss werkt het zo als het bovenstaande geen effect heeft:
$verbinding = mysql_connect(MYSQL_SERVER,MYSQL_GEBRUIKERSNAAM,MYSQL_WACHTWOORD) or die(mysql_error());
mysql_select_db("foto_galerij", $verbinding) or die (mysql_error());
Gewijzigd op 01/01/1970 01:00:00 door Wim Mari
 
Paul prive

paul prive

12/06/2007 11:37:00
Quote Anchor link
Spijtig genoeg geen verandering weet niet wat ik verkeerd doe :-((
 
Jacco Engel

Jacco Engel

12/06/2007 11:39:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    ini_set("display_errors",true)     ;
    error_reporting(ER_ALL) ;
[
/code]

???????????
 
Paul prive

paul prive

12/06/2007 12:02:00
Quote Anchor link
@jacco waar kan ik dit het beste neerzetten?
 
Jacco Engel

Jacco Engel

12/06/2007 12:05:00
Quote Anchor link
Direct na je php open tag :)
 
Paul prive

paul prive

12/06/2007 12:10:00
Quote Anchor link
jacco
dat had ik in eerste instantie ook gedaan maar kreeg de volgende foutmelding
Notice: Use of undefined constant ER_ALL - assumed 'ER_ALL' in C:\Program Files\EasyPHP 2.0b1\www\gallery\form2.php on line 3

vandaar mijn vraag
 
Paul prive

paul prive

12/06/2007 14:18:00
Quote Anchor link
Jacco
er zat een kleine fout in jou syntax het moest zijn E_ALL maar dit terzijde.

als ik deze bovenstaande in mijn formulier zet heb ik geen foutmeldingen op mijn pagina.

zou het kunnen zijn dat ik dit formulier oproep wanneer de gebruiker is ingelogd ?
normaal gezien zou dit toch geen probleem mogen geven dacht ik.

heb dit nog even getest en het resultaat blijft hetzelfde...
 
Frank -

Frank -

12/06/2007 14:45:00
Quote Anchor link
Waarom controleer je niet of er wel iets in de database is weggeschreven? Dat de query niet keihard is mislukt wil niet zeggen dat er data is weggeschreven. Ga gestructureerd debuggen en je hebt in no-time de boosdoener te pakken.

Opmerking: Jouw queries zijn niet/nauwelijks leesbaar. Je hoeft echt niet op iedere regel opnieuw te beginnen met bv. $sql .= , gewoon in 1x uitschrijven is vele malen beter leesbaar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
$sql
= "
SELECT
  *
FROM
  tabelnaam
"
;
?>

4 regels SQL die eenvoudig te lezen zijn. De PHP-syntax staat daar helemaal los van.

En verder NOOIT EN TE NIMMER die gore backtics ` gebruiken, die maken je het leven nog lastiger.
 
Paul prive

paul prive

12/06/2007 14:55:00
Quote Anchor link
Frank
ik kan via mijn database zien dat er niks weggeschreven wordt en het tabel blijft gewoon leeg dit is ook de rede dat ik kijk of het OrderID al bestaat.
aangezien er geen reactie op komt en ik ook geen gegevens in de tabel zelf terug vindt.
 
Wim Mari

Wim Mari

12/06/2007 15:05:00
Quote Anchor link
<form method="post" action="https://secure.ogone.com/ncol/test/orderstandard.asp" id="form1" name="form1" >

klopt je action wel????

.asp, lijkt me een andere taaltje dan php! Het kan natuurlijk zijn dat je dat op je server aangepast hebt, maar dat lijkt me nogal onlogisch!
 
Bluecherry

bluecherry

12/06/2007 15:28:00
Quote Anchor link
Je form wordt inderdaad gepost naar de servers van ogone, je eigen script komt er nooit me in aanraking... Gezien de omvang van dit bedrijf ga ik ervan uit dat jij geen interne coder bent :).

Pas je form aan zodat je naar je eigen script post, controleer alles, sla het op in je db en haal dan pas de ogone pagina op.

In de praktijk ga je op het einde van je script (als alle checks succesvol waren) hetvolgende doen: (http://be2.php.net/manual/en/wrappers.http.php)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

// Gebruik dit als je het volledige formulier gewoon wil doorsturen
$postdata = http_build_query($_POST);

// OF gebruik dit waarbij je elke variabele expliciet opgeeft
$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);


$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);


$context  = stream_context_create($opts);

$result = file_get_contents('https://secure.ogone.com/ncol/test/orderstandard.asp', false, $context);

return $result;

?>


Hoewel er wrs wel betere oplossingen zijn...

Nadelen:
* bij trage connectie zal de socket naar ogone timeouten en een foutmelding geven
* de pagina https://secure.ogone.com/ncol/test/orderstandard.asp wordt opgehaald en dan weergegeven binnen de eigen pagina

Miss beter gewoon een nieuw form aanmaken met enkel hidden values nadat je het 1ste form geprocessed hebt en dit dan met javascript automatisch laten posten naar ogone...
Gewijzigd op 01/01/1970 01:00:00 door bluecherry
 
Paul prive

paul prive

12/06/2007 15:40:00
Quote Anchor link
het formulier werkt zonder problemen want die url heb ik nodig de gegevens van mijn formulier naar toe te sturen je kan het rustig eens proberen als je wilt. je kan als creditcard nummer 4111-1111-1111-1111 vervaldatum ergens in de toekomst cvc code eendert wat.
voor de sha signature ga je naar www.geocities.com/paulus4605/ecommercest
je ziet onderaan de pagina een string met de volgende gegevens :
200000EURpaulecommercesthash
verander alleen alles voor "EUR"
je voert een orderid in mijn formulier in bijv:00000002 gevolgd door het bedrag zijnde 500
dus je string gaat er in dit geval op de volgende manier uitzien:
00000002500URpaulecommercesthash vervolgens klik je op go en je krijgt op de volgende pagina de bovenvermelde string met de hashkey zijnde in ons voorbeeld
A1428C5A197D9141C22BC2047A46C0CD76344314 deze string voer je in het formulier achter shasign in en je drukt op submit.


******geen angst dit is een test account****** dus zelfs bij het gebruik van een echte creditcard gaat er geen geld van de rek af.
 
Paul prive

paul prive

12/06/2007 15:49:00
Quote Anchor link
@bluecherry
bedankt voor je geboden hulp,
je hebt het goed gezien dat ik geen interne programmeur ben, ik probeer zelf een wijs in het wereldje van php te worden.

nu je zegt dat ik naar het eigen script moet posten.
als ik de gevraagde hidden values op een nieuwe pagina post en deze doorstuur naar Ogone hoe gaat het er dan uitzien,
sorry dat ik zo lastig doe maar ik probeer het ook te leren :-))
bedankt nogmaals voor je hulp

Paul
 
Frank -

Frank -

12/06/2007 16:12:00
Quote Anchor link
paul schreef op 12.06.2007 14:55:
Frank
ik kan via mijn database zien dat er niks weggeschreven wordt en het tabel blijft gewoon leeg dit is ook de rede dat ik kijk of het OrderID al bestaat.
aangezien er geen reactie op komt en ik ook geen gegevens in de tabel zelf terug vindt.
Ja, en? Dat je nu zelf e.e.a. met handje gaat controleren, wil niet zeggen dat je deze controle niet in het script hoeft op te nemen. Een query kan namelijk op ieder ongewenst moment mislukken! Je hebt zelfs de garantie dat de query vroeg of laat zal mislukken... Wet van Murphy.

Kortom, ga controles in je script opnemen, dit maakt het debuggen ook een stuk eenvoudiger. Het wordt dan namelijk duidelijk op welk punt het script de fout in gaat.
 
Paul prive

paul prive

12/06/2007 18:51:00
Quote Anchor link
Frank
niet dat ik niet wil maar ik ben nog aan het leren vindt het van mezelf al een hele prestatie dat ik het formulier zoals het nu is werkend heb gekregen op het niveau van verzenden naar Ogone, nu als er een manier bestaat om op een bepaalde manier eenvoudig controle functies in te bouwen hou ik me altijd aanbevolen.

ik ben nog maar een leek en probeer wegwijs te raken in het hele php gebeuren
Paul
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.