abonnement Unibet Coolblue
pi_119074470
quote:
0s.gif Op zondag 11 november 2012 00:38 schreef Pakspul het volgende:

[..]

Je URL is nu wel ineens anders. index.php staat er nu ineens tussen.
Klopt. Ik gebruik CodeIgniter trouwens, ben ik vergeten te vermelden.
pi_119074513
quote:
0s.gif Op zondag 11 november 2012 00:39 schreef pascal08 het volgende:

[..]

Klopt. Ik gebruik CodeIgniter trouwens, ben ik vergeten te vermelden.
ok, ben ik niet bekend mee, maar als de URL goed is dan kun je verder gaan om de if statement uit te zoeken waarom die de keuze maakt om toch een foutmelding af te drukken. Variabelen weergeven helpt hierbij om te kijken wat er in zit.
pi_119074580
Toen ik dit las keek ik zo: :'). Ik ben helemaal vergeten om mod_rewrite in de .htaccess file te zetten. |:( |:( |:(

pi_119074745
Goedemorgen :P
pi_119074783
quote:
0s.gif Op zondag 11 november 2012 00:49 schreef Pakspul het volgende:
Goedemorgen :P
Arggggh, zo vervelend is dat hè. Ik ben gewoon niet geschikt voor dit soort dingen, veel te slordig en ik maak er heel vaak een puinhoop van. :')

Het gekke is wel, dat als ik mijn probleem hier post, ik vaak zelf het antwoord vind. 8)7
pi_119078012
Ik heb eindelijk eens tijd kunnen maken om te kunnen spelen met PDO. Om PDO gemakkelijk te kunnen toevoegen aan huidige projecten heb ik een wrapper / class geschreven die ik normaal ook gebruik om queries uit te voeren. Echter zit ik met een probleem als het gaat om LIMIT.

Een stukje code:
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
<?php
function q($query$data = array())
{
    
/* run query with data */
    
$this->query = array('query' => $query
                         
'data'  => $data);
    try
    {
        
$this->prep $this->dbConnection->prepare($query);
        
        foreach (
$data AS $key => $val)
        {
            if (
is_int($val))
            {
                
$this->prep->bindParam($key, (int)$valPDO::PARAM_INT); // regel 43
            
}
            else
            {
                
$this->prep->bindParam($key$val);
            }
        }
                    
        
$this->prep->execute();
        
        
$this->prep->setFetchMode(PDO::FETCH_ASSOC);
        
        return 
$this->prep// can return false
    
}
    catch (
Exception $e
    {
        
$this->pdoException($e->getMessage());
        exit;
    }
}
?>

Zo voer ik deze code uit:
1
2
3
4
5
6
7
8
9
10
<?php
    $tst
->q("SELECT * 
             FROM `fish` 
             WHERE `user_id` > :id 
             LIMIT :startCnt, 
                   :numberCnt"
,
            array(
":id"        => 0
                  
":startCnt"  => 1
                  
":numberCnt" => 5));
?>

echter als ik de query zonder LIMIT uitvoer krijg ik geen foutmelding maar data, maar als ik limit toevoeg wel, nu las ik overal op het net dat ik dan moet zorgen dat de gegevens gebonden worden als INT, dus heb ik een stukje code toegevoegd om INT's als INT toe te voegen maar op een of andere manier blijf ik foutmeldingen krijgen.

foutmelding:
1Fatal error: Cannot pass parameter 2 by reference in D:\EasyPHP-12.1\www\pdoclass.php on line 43

$data bevat volgens de foutmelding dit:
1
2
3
4
array (size=3)
  ':id' => int 0
  ':startCnt' => int 1
  ':numberCnt' => int 5

help!? :D

-edit-

1
2
$val = (int)$val;
$this->prep->bindParam($key, $val, PDO::PARAM_INT);

nadat ik (int)$val als extra variabel heb aangemaakt en deze doorgeef aan bindparam krijg ik de volgende foutmelding:

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
array (size=4)
  'error' => string 'PDO-SQL-ERROR' (length=13)
  'PDO_error' => string 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''5', 
                   '5'' at line 4' (length=231)
  'SQL' => 
    array (size=2)
      'query' => string 'SELECT * 
             FROM `fish` 
             WHERE `user_id` > :id 
             LIMIT :startCnt, 
                   :numberCnt' (length=136)
      'data' => 
        array (size=3)
          ':id' => int 0
          ':startCnt' => int 1
          ':numberCnt' => int 5
  'debug_backtrace' => 
    array (size=2)
      0 => 
        array (size=7)
          'file' => string 'D:\***\pdoclass.php' (length=32)
          'line' => int 60
          'function' => string 'pdoException' (length=12)
          'class' => string 'pdoWrapper' (length=10)
          'object' => 
            object(pdoWrapper)[1]
              ...
          'type' => string '->' (length=2)
          'args' => 
            array (size=1)
              ...
      1 => 
        array (size=7)
          'file' => string 'D:\***\pdoclass.php' (length=32)
          'line' => int 145
          'function' => string 'q' (length=1)
          'class' => string 'pdoWrapper' (length=10)
          'object' => 
            object(pdoWrapper)[1]
              ...
          'type' => string '->' (length=2)
          'args' => 
            array (size=2)
              ...
Just say hi!
pi_119078163
quote:
0s.gif Op zondag 11 november 2012 00:51 schreef pascal08 het volgende:

[..]

Arggggh, zo vervelend is dat hè. Ik ben gewoon niet geschikt voor dit soort dingen, veel te slordig en ik maak er heel vaak een puinhoop van. :')

Het gekke is wel, dat als ik mijn probleem hier post, ik vaak zelf het antwoord vind. 8)7
Dat heet het "teddybeer-effect". Doordat je je probleem aan iemand moet uitleggen wordt het voor jezelf ook duidelijker en doordat je extra houvast hebt aan dit topic / je collega / je teddybeer zie je de oplossing opeens zelf.
  zondag 11 november 2012 @ 10:54:14 #33
84244 Scorpie
Abject en infaam!
pi_119078230
quote:
7s.gif Op zondag 11 november 2012 10:48 schreef Farenji het volgende:

[..]

Dat heet het "teddybeer-effect". Doordat je je probleem aan iemand moet uitleggen wordt het voor jezelf ook duidelijker en doordat je extra houvast hebt aan dit topic / je collega / je teddybeer zie je de oplossing opeens zelf.
Rubber ducking.
Op dinsdag 13 augustus schreef Xa1pt:
Neuh, fraude mag best aangepakt worden. Maar dat het de maatschappij meer oplevert of beter is voor de samenleving, is nog maar de vraag.
Op donderdag 25 juni 2015 schreef KoosVogels:
Klopt. Ik ben een racist.
pi_119092620
Problem solved! :)

Geen bindParam maar bindValue aangezien bindParam er vanuit gaat dat de value kan veranderen en bindValue verbind de gegeven 'value' aan de parameter! :D

jeej

Wat vinden jullie trouwens van mijn pdoWrapper?

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
<?php
class pdoWrapper
{
    private 
$dbConnection;
    private 
$lastQuery 0;
    private 
$prep;

    public 
$queries = array();

    private function 
mtime_float()
    {
        list(
$usec$sec) = explode(" "microtime());
        return ((float)
$usec + (float)$sec);
    }    

    function 
__construct($hostname$username$password$database)
    {
        
/* open the connection to the database server and database */
        
$this->queries['connection'] = array('hostname'  => $hostname
                                             
'username'  => $username,
                                             
'database'  => $database,
                                             
'startTime' => $this->mtime_float());
        try
        {
            
$con "mysql:dbname=" $database ";host=" $hostname;
            
$this->dbConnection = new PDO($con
                                          
$username
                                          
$password);
        } 
        catch(
Exception $e
        {
            
$this->pdoException($e->getMessage());
            exit;
        }
        
        
$this->dbConnection->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

        
$this->queries['connection']['endTime']     = $this->mtime_float();
        
$this->queries['connection']['totalTime']   = round($this->queries['connection']['endTime'] - $this->queries['connection']['startTime'], 
                                                          
6);
        
$this->queries['connection']['connectTime'] = $this->queries['connection']['totalTime'];
        
        
$this->queries['connection']['queries']          = 0;
        
$this->queries['connection']['longestQueryTime'] = 0;
        
$this->queries['connection']['longestQuery']     = 0;
        
    }

    function 
q($query$data = array())
    {
        
/* run query with data */
        
$this->lastQuery++;
        
        
// start logging
        
$this->queries[$this->lastQuery] = array('query'     => $query
                                                 
'data'      => $data,
                                                 
'rows'      => -1,
                                                 
'startTime' => $this->mtime_float());
        try
        {
            
$this->prep $this->dbConnection->prepare($query);
            
            
// loop elements and bind to there requested value
            
foreach ($data AS $bindValue => $replaceValue)
            {
                
// int, add PDO::PARAM_INT for processing as REAL int -d
                
if (is_int($replaceValue))
                {
                    
$val intval($replaceValue);
                    
$this->prep->bindValue($bindValue$replaceValuePDO::PARAM_INT);
                }
                else
                {
                    
$this->prep->bindValue($bindValue$replaceValuePDO::PARAM_STR);
                }
            }
                        
            
$this->prep->execute();
            
        }
        catch (
Exception $e
        {
            
$this->pdoException($e->getMessage());
        }

        
$this->queries[$this->lastQuery]['rows'] = $this->prep->rowCount();
            
        
$this->prep->setFetchMode(PDO::FETCH_ASSOC);
        
        
// end the logging
        
$this->queries[$this->lastQuery]['endTime']   = $this->mtime_float();
        
$this->queries[$this->lastQuery]['totalTime'] = round($this->queries[$this->lastQuery]['endTime'] - $this->queries[$this->lastQuery]['startTime'],
                                                              
6);

        
// update the database total connection time.
        
$this->queries['connection']['endTime']   = $this->mtime_float();
        
$this->queries['connection']['totalTime'] = round($this->queries['connection']['endTime'] - $this->queries['connection']['startTime'], 
                                                        
6);
        
$this->queries['connection']['queries']++;

        if (
$this->queries[$this->lastQuery]['totalTime'] > $this->queries['connection']['longestQueryTime'])
        {
            
$this->queries['connection']['longestQueryTime'] = $this->queries[$this->lastQuery]['totalTime'];
            
$this->queries['connection']['longestQuery']     = $this->queries[$this->lastQuery];
        }
        
        return 
$this->prep// can return false
    
}

    function 
fetch()
    {
        
/* fetch all data */
        
return $this->prep->fetchAll();
    }

    function 
rows()
    {
        
/* retrieve number of found rows */
        
return $this->queries[$this->lastQuery]['rows'];
    }

    function 
result()
    {
        
/* result for used more then 0 yes or no */
        
        
return ( $this->queries[$this->lastQuery]['rows'] > 0) ? false true;
    }

    function 
insert_id()
    {
        
/* return last insert id */
        
$this->queries[$this->lastQuery]['insert_id'] = $this->dbConnection->lastInsertId();
        
        return 
$this->queries[$this->lastQuery]['insert_id'];
    }

    function 
affected()
    {
        
/* return number affected rows alternative */
        
        
return  $this->queries[$this->lastQuery]['rows'];
    }
    
    function 
pdoException($message
    {
        
$this->queries['connection']['errorQueries'][$this->lastQuery] = $message;
        
$this->queries[$this->lastQuery]['error'] = array('error'           => 'PDO-SQL-ERROR',
                                                          
'PDO_error'       => $message,
                                                          
'debug_backtrace' => debug_backtrace());
        
    }    
}
?>


[ Bericht 98% gewijzigd door Chandler op 12-11-2012 10:43:57 ]
Just say hi!
pi_119119724
Waar laat ik mijn PHP-code in JSFiddle?
pi_119119783
quote:
0s.gif Op maandag 12 november 2012 12:05 schreef pascal08 het volgende:
Waar laat ik mijn PHP-code in JSFiddle?
Eh.
Heet het PHPFiddle?
pi_119119932
quote:
15s.gif Op maandag 12 november 2012 12:06 schreef KomtTijd... het volgende:

[..]

Eh.
Heet het PHPFiddle?
Nee... toch? :P

Maarja, ik heb dus het volgende probleem. Ik heb met Bootstrap een typeahead veld gemaakt en ik heb de JS code onder aan m'n HTML pagina geschreven. Als ik dit doe werkt het wel:



..., maar zodra ik een query laat uitvoeren vanuit een ander PHP-bestand, dan gaat er iets niet goed. Het PHP-bestand stand-alone draaien werkt wel.



SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
pi_119120088
...een javascript probleem dus. Wat moet dat in het PHP-topic?
pi_119120156
quote:
2s.gif Op maandag 12 november 2012 12:14 schreef KomtTijd... het volgende:
...een javascript probleem dus. Wat moet dat in het PHP-topic?
Ik post toch ook een JS-code én een PHP-bestand.
pi_119120176
...je zegt net dat het php-script gewoon werkt? :?
pi_119120224
quote:
14s.gif Op maandag 12 november 2012 12:17 schreef KomtTijd... het volgende:
...je zegt net dat het php-script gewoon werkt? :?
Stand-alone ja, maar misschien moet het PHP-script wel aangepast worden om het op deze manier te laten werken, weet ik veel. :?
  maandag 12 november 2012 @ 12:21:18 #42
75592 GlowMouse
l'état, c'est moi
pi_119120296
Ik denk dat de fout niet in het php-script zit. Misschien kom je verder met de developer-console in je browser.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_119120356
quote:
0s.gif Op maandag 12 november 2012 12:21 schreef GlowMouse het volgende:
Ik denk dat de fout niet in het php-script zit. Misschien kom je verder met de developer-console in je browser.
Ik heb 'm al in het JS-topic gepost. ;) Waar moet ik precies naar kijken in de developer-console van Chrome?
  maandag 12 november 2012 @ 13:40:21 #44
118585 Crutch
Filantroop || Taalzwengel
pi_119122887
Heb je ook gekeken wat er terugkomt in die datavariabele?
In de PHP-log gekeken?
Misschien is ?query= wel leeg?
Je moeder is een hamster
pi_119151699
quote:
0s.gif Op maandag 12 november 2012 12:10 schreef pascal08 het volgende:

[..]

Nee... toch? :P

Maarja, ik heb dus het volgende probleem. Ik heb met Bootstrap een typeahead veld gemaakt en ik heb de JS code onder aan m'n HTML pagina geschreven. Als ik dit doe werkt het wel:

[ afbeelding ]

..., maar zodra ik een query laat uitvoeren vanuit een ander PHP-bestand, dan gaat er iets niet goed. Het PHP-bestand stand-alone draaien werkt wel.

[ afbeelding ]

SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Kwestie van search.php testen. .ajax wil niet zeggen dat hij een $_POST verstuurd controleer eerst of hij dit uberhaupt doet. Door een variable terug te krijgen van PHP script. dus dat je een visuele output ergens maakt. Je PHP file is leuk gemaakt, maar voor test willen we eerst zien of hij dat stukje code bereikt.

Controleer met behulp van Firebug (firefox addon)in de console of er een output richting de server gaat en of je daar iets van terug krijgt maak daarvoor bvb:
1
2
3
4
5
6
<?php 
if(isset($_POST['Een_bestaande_variabele']))
{
  echo 
"het werkt!";
}
?>
van en ga dan vervolgens kijken of je dat terug krijgt in de console.
Mocht dit niet het geval zijn dan weet je dat je Javascript niet werkt. Desnoods stop je eronder iets wat een kleurtje oranje maakt op de site met behulp van JQuery om te testen of het script werkt of niet.

Mocht het Javascript werken dan kan hij mogelijk "search.php" niet vinden. en zul je dit anders moeten benaderen.
Redacted
pi_119152027
quote:
0s.gif Op maandag 12 november 2012 13:40 schreef Crutch het volgende:
Heb je ook gekeken wat er terugkomt in die datavariabele?
In de PHP-log gekeken?
Misschien is ?query= wel leeg?
quote:
0s.gif Op dinsdag 13 november 2012 00:10 schreef cablegunmaster het volgende:

[..]

Kwestie van search.php testen. .ajax wil niet zeggen dat hij een $_POST verstuurd controleer eerst of hij dit uberhaupt doet. Door een variable terug te krijgen van PHP script. dus dat je een visuele output ergens maakt. Je PHP file is leuk gemaakt, maar voor test willen we eerst zien of hij dat stukje code bereikt.

Controleer met behulp van Firebug (firefox addon)in de console of er een output richting de server gaat en of je daar iets van terug krijgt maak daarvoor bvb:
[ code verwijderd ]

van en ga dan vervolgens kijken of je dat terug krijgt in de console.
Mocht dit niet het geval zijn dan weet je dat je Javascript niet werkt. Desnoods stop je eronder iets wat een kleurtje oranje maakt op de site met behulp van JQuery om te testen of het script werkt of niet.

Mocht het Javascript werken dan kan hij mogelijk "search.php" niet vinden. en zul je dit anders moeten benaderen.
Bedankt voor het meedenken, maar het probleem was al vrij snel opgelost in het JS topic. Ik ben in ieder geval vandaag heel veel wijzer geworden over debuggen, dus dat voorkomt een hoop onnodige posts in de toekomst.
pi_119156803
Jammer dat niemand een reactie wil geven op mijn pdoWrapper maar goed, boeiend, maar nu een andere inzichts vraag.

Stel ik heb een string met de volgende gegevens.
/x/y/z/a/b

nu wil ik van deze string het laatste lettertje uitlezen, dus dacht ik, ach simpel dat doen we gewoon zo

1
2
3
4
5
<?php
$string 
"/x/y/z/a/b";
$e explode("/"$string);
echo 
end($e);
?>

dat werkt, maar natuurlijk!. Dus dacht ik, het moet toch ook simpeler kunnen? dus dacht ik dat dit ook wel moest werken

1
2
3
4
<?php
$string 
"/x/y/z/a/b";
echo 
end(explode("/"$string));
?>

maar dat mag niet? Strict standards: Only variables should be passed by reference in

dus mijn vraag, zit ik nu vast aan mijn 2 regels? of kan het nog korter?
Just say hi!
  dinsdag 13 november 2012 @ 10:48:27 #48
12221 Tijn
Powered by MS Paint
pi_119157083
Dat laatste voorbeeld werkt bij mij gewoon, hoor.
  dinsdag 13 november 2012 @ 10:51:52 #49
118585 Crutch
Filantroop || Taalzwengel
pi_119157162
quote:
5s.gif Op dinsdag 13 november 2012 10:48 schreef Tijn het volgende:
Dat laatste voorbeeld werkt bij mij gewoon, hoor.
Hier ook.
Je moeder is een hamster
pi_119157166
quote:
5s.gif Op dinsdag 13 november 2012 10:48 schreef Tijn het volgende:
Dat laatste voorbeeld werkt bij mij gewoon, hoor.
Hier niet :(

1
2
3
4
<?php
$string 
'/a/b/c/d/e/f';
echo 
end(explode("/"$string));
?>

Krijg deze foutmelding.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Strict standards: Only variables should be passed by reference in D:\EasyPHP-12.1\home\codesource.php on line 3
Call Stack
#    Time    Memory    Function    Location
1    0.0008    138544    {main}( )    ..\codetester.php:0
2    0.0076    176864    include( 'D:\EasyPHP-12.1\home\codesource.php' )    ..\codetester.php:43
Dump $_SERVER
$_SERVER['REMOTE_ADDR'] =
string '127.0.0.1' (length=9)
$_SERVER['REQUEST_METHOD'] =
string 'POST' (length=4)
$_SERVER['REQUEST_URI'] =
string '/home/codetester.php' (length=20)
Variables in local scope (#2)
$string =
string '/a/b/c/d/e/f' (length=12)

server info
APACHE 2.4.2 MYSQL 5.5.27 PHP 5.4.6
Just say hi!
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')