[PHP] mysql_affected_rows() geeft altijd 0

Pagina: 1
Acties:
  • 132 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
De query is onderdeel van een nieuwsbriefsysteem, dit stukje code is voor het activeren van een adres.

PHP:
1
2
3
4
5
6
7
8
9
10
11
$query = "UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
mysql_query($query, $db);
echo mysql_affected_rows(); //test
if(mysql_affected_rows() > 0)
{
    $report = "goed";
}
else
{
    $report = "fout";
}


Alleen het vreemde is dat er telkens 0 rows teruggegeven wordt, terwijl ik in phpmyadmin zie dat de query uitgevoerd wordt. Als ik de query echo en uitvoer in phpmyadmin krijg ik 1 row terug.

Ik ben de query stukje voor stukje aan het aanpassen geweest.
Uiteindelijk werkte hier de onderste query wel:

PHP:
1
2
//      $query = "UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
          $query = "UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "'";


En hier gaat het blijkbaar fout:

PHP:
1
AND activatiecode='" . $activatiecode . "'


De datatypen van de kolommen emailadres en activatiecode zijn beide VARCHAR(30).
emailadres NOT NULL en UNIQUE en activatiecode NULL.

[ Voor 25% gewijzigd door marcovtwout op 03-01-2005 11:04 ]


Acties:
  • 0 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

http://nl.php.net/manual/en/function.mysql-affected-rows.php

de eerste note op die pagina... mayb dat dat er wat mee te maken heeft?
(als de update dezelfde waarde naar de record schrijft als wat er al in staat dattie dan geen affected rows waarde terug geeft?)

Iemand een Tina2 in de aanbieding?


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Nee alle cellen worden gewijzigd.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik kan een tweetal dingen bedenken, waar ik niet helemaal zeker weet of het klopt.
Het eerste is dat je voordat je de IF-constructie in gaat je een echo doet met mysql_affected_rows(). Is het niet zo dat als je de functie eenmaal aangeroepen hebt hij vervolgens niet meer (nogmaals) te gebruiken is?
Dus iets proberen als:

PHP:
1
2
3
4
echo $check = mysql_affected_rows(); // jouw test
if($check > 0) {
  // etc.
}


Als tweede suggestie stel ik voor dat je wél een resource link indentifier gebruikt. Zie de PHP manual.

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
OK, dit heb ik ervan gemaakt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$query = "UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
$result = mysql_query($query, $db);
echo $check = mysql_affected_rows($result);
if($check > 0)
{
    $report1 = "Goed";
}
else
{
    $report2 = "Fout";
}

echo $report1 . $report2;


En ik krijg dit terug:

Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in /usr/local/psa/home/vhosts/inkaconsult.nl/httpdocs/scripts/nb_openbaar.php on line 107

en $report2.

[ Voor 12% gewijzigd door marcovtwout op 04-01-2005 13:17 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Wat is de query die je uitvoerd?

Volgens mij heb je een error in je query

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Staan er geen vreemde tekens in de actievatiecode? Of misschien zelfs in het emailadres? Je fout heeft in ieder geval niets te maken met mysql_affected_rows(), je query gaat nu blijkbaar al mis.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

probeer eens "or die(mysql_error())" achter de query te zetten, dan krijg je de foutmelding bij de query terug en weet je ongeveer waar de fout in de query zit. Dus:
PHP:
1
$result = mysql_query($query, $db) or die(mysql_error());


En echo de query ook 'ns, even kijken of alles doorkomt enzo..

Acties:
  • 0 Henk 'm!

  • snoopy
  • Registratie: December 2000
  • Laatst online: 17-08 08:27
marcovtwout schreef op dinsdag 04 januari 2005 @ 13:15:
OK, dit heb ik ervan gemaakt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$query = "UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
$result = mysql_query($query, $db);
echo $check = mysql_affected_rows($result);
if($check > 0)
{
    $report1 = "Goed";
}
else
{
    $report2 = "Fout";
}

echo $report1 . $report2;


En ik krijg dit terug:

Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in /usr/local/psa/home/vhosts/inkaconsult.nl/httpdocs/scripts/nb_openbaar.php on line 107

en $report2.
Ja dat kan kloppen, je moet nl. aan mysql_affected_rows() de database-link-identifier ($db) meegeven en niet je resultaat ($result).

Zie http://nl.php.net/mysql_affected_rows

[ Voor 10% gewijzigd door snoopy op 04-01-2005 13:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

snoopy schreef op dinsdag 04 januari 2005 @ 13:25:
[...]

Ja dat kan kloppen, je moet nl. aan mysql_affected_rows() de database-link-identifier ($db) meegeven en niet je resultaat ($result).

Zie http://nl.php.net/mysql_affected_rows
Had ik overeen gelezen maar is idd ook zo, alleen eigenlijk zou het sowieso niet hoeven :? :
mysql_affected_rows() returns the number of rows affected by the last INSERT, UPDATE or DELETE query associated with link_identifier. If the link identifier isn't specified, the last link opened by mysql_connect() is assumed.

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Ik heb er nu dit van gemaakt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$query = "UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
echo $query; //test
$result = mysql_query($query, $db) or die(mysql_error());
echo $check = mysql_affected_rows($db); //test
if($check > 0)
{
    $report1 = "goed";
}
else
{
    $report2 = "fout";
}
echo $report1 . $report2;


De output:

query: UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='213.10.98.21' WHERE emailadres='marcovtwout@hetnet.nl' AND activatiecode='FFLZorjdqm1TvUR9uVu7FZ6Dr62KOG'

mysql_affected_rows: 0

Maar de query wordt weldegelijk uitgevoerd.

[ Voor 23% gewijzigd door marcovtwout op 05-01-2005 11:17 ]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Afbeeldingslocatie: http://crew.tweakers.net/SmartDoDo/gotverkiezing2004/kick.gif

[ Voor 95% gewijzigd door marcovtwout op 05-01-2005 17:52 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Doe eens;
code:
1
2
3
SELECT * 
FROM nb_klanten 
WHERE emailadres='marcovtwout@hetnet.nl' AND activatiecode='FFLZorjdqm1TvUR9uVu7FZ6Dr62KOG'


Geeft die ook een 0 terug, wat haast wel moet, dan zul je wel in de verkeerde db zitten te wroeten ;)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Gebruik dit eens:
PHP:
1
2
3
<?PHP
$db= mysql_connect("localhost", "user", "pass", false, 2);
?>
Verder vraag ik me af waar die variablen vandaan komen, zijn dat geen POST vars ofzo?

[ Voor 47% gewijzigd door djluc op 06-01-2005 10:42 ]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
PHP:
1
2
$db = mysql_connect($host,$user,$pass) or die('Kan geen verbinding maken.');
mysql_select_db($database,$db) or die('Kan geen verbinding maken.');


gebruik ik om verbinding te maken
de variabelen zijn GET omdat de pagina via een link in een emailbericht wordt aangeroepen.
en ik zit niet in de verkeerde db te wroeten omdat de query uitgevoerd wordt

[ Voor 19% gewijzigd door marcovtwout op 07-01-2005 11:42 ]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Afbeeldingslocatie: http://crew.tweakers.net/SmartDoDo/gotverkiezing2004/kick.gif

alternatieve manieren dan?

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op nieuw selecten en kijken of de variablen zijn veranderd?
:?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
OK ik ben er weer aanbegonnen en ben de wanhoop nabij.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        $emailadres = htmlspecialchars(strip_tags($_GET['emailadres']), ENT_QUOTES);
        $activatiecode = htmlspecialchars(strip_tags($_GET['activatiecode']), ENT_QUOTES);
        echo $query = "SELECT * FROM nb_klanten WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
        $result = mysql_query($query, $db);
        echo $test = mysql_num_rows($result);
        if($test)
        {
            $check = '1';
            $report = "Aangemeld"
        }
        else
        {
            $report = "Reeds geactiveerd".
        }
        if($check == '1')
        {
            echo mysql_query("UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "'", $db);
        }


Ik krijg 'reeds geactiveerd' terug en toch voert ie die !@%#$ query uit. :(

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Toen probeerde ik dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        $emailadres = htmlspecialchars(strip_tags($_GET['emailadres']), ENT_QUOTES);
        $activatiecode = htmlspecialchars(strip_tags($_GET['activatiecode']), ENT_QUOTES);
        $result = mysql_query("SELECT naam,datum_aangemeld,IP_aangemeld FROM nb_klanten WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'", $db);
        if(mysql_num_rows($result))
        {
            $naam = mysql_result($result,0,0);
            $datum_aangemeld = mysql_result($result,0,1);
            $IP_aangemeld = mysql_result($result,0,2);
            echo $query = "DELETE FROM nb_klanten WHERE emailadres='" . $emailadres . "'";
            mysql_query($query, $db);
            echo $query = "INSERT INTO nb_klanten (naam,emailadres,activatiecode,datum_aangemeld,IP_aangemeld,datum_geactiveerd,IP_geactiveerd) VALUES ('" . $naam . "','" . $emailadres . "',NULL,'" . $IP_aangemeld . "','" . $datum_aangemeld . "',NOW(),'" . $_SERVER['REMOTE_ADDR'] . "'";
            mysql_query($query, $db);
            $report = "<b>" . $emailadres . "</b> is succesvol aangemeld. Vanaf nu ontvangt u ieder kwartaal onze nieuwsbrief.";
        }
        else
        {
            $report = "Dit adres is mogelijk reeds geactiveerd of de activatiecode is onjuist, neem eventueel <A HREF=\"mailto:webmaster@inkaconsult.nl\" TITLE=\"contact op met de Webmaster\" ONMOUSEOUT=\"(window.status=''); return true;\" ONMOUSEOVER=\"(window.status='contact op met de Webmaster'); return true;\">contact op met de Webmaster</A>.";
        }


Alleen de delete query wordt uitgevoerd en weer de verkeerde report :(

[ Voor 15% gewijzigd door marcovtwout op 05-02-2005 18:05 ]


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Volgens mij heb je niks van error reporting oid aanstaan - iig zal die "INSERT INTO" query niet kunnen werken omdat je volgens mij een sluitend haakje vergeet? :)

Als ik je 'INSERT INTO' statement er even uitwerk krijg je ongeveer dit:
INSERT INTO nb_klanten (naam,emailadres,activatiecode,datum_aangemeld,IP_aangemeld,datum_geactiveerd,IP_geactiveerd) VALUES ('naam','mail',NULL, 'ipaddr', 'datum' ,NOW(), 'remote_addr'";
zoals je zelf ook kan zien moet je je "VALUES" reeks nog sluiten met een ) - en dan gaat het niet werken.

Waarom begin je niet even met www.php.net/error_reporting door te lezen, en je zelf er van te verzekeren dat je alle errors e.d. krijgt, daarnaast zou je (terwijl je aan je algemene error-reporting werkt), misschien je: mysql_query() statements beter iets als:

PHP:
1
2
3
4
if( !mysql_query($query, $db))
{
   die( mysql_error() );
}


- hiermee krijg je dan wat zinvollere errors :)

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Het probleem is niet de query, het probleem is dat ie hoewel if true is, de verkeerde $report geeft.

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

PHP:
1
 $result = mysql_query("SELECT naam,datum_aangemeld,IP_aangemeld FROM nb_klanten WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'", $db);


Post na deze regel eens een:

PHP:
1
2
3
4
5
var_dump( mysql_fetch_assoc( $result ) );
echo '<hr>';
var_dump( mysql_num_rows( $result ) );
echo '<hr>';
var_dump( (bool) mysql_num_rows( $result ) ); // <- weet niet zeker ofdat dat werkt


om zeker te weten dat je wat je terug krijgt ook is wat je er van verwacht :)
Verder geef je aan dat enkel je 'INSERT' uitgevoerd wordt en niet je delete- daar reageerde ik dus op ;)

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
OK ik heb de code weer teruggebracht naar waar het om draait, delete en insert is toch ranzig.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    //ACTIVEREN
    elseif($actie == 'activeren')
    {
        error_reporting(E_ALL);

        $emailadres = htmlspecialchars(strip_tags($_GET['emailadres']), ENT_QUOTES);
        $activatiecode = htmlspecialchars(strip_tags($_GET['activatiecode']), ENT_QUOTES);
        $query = "SELECT * FROM nb_klanten WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
        $result = mysql_query($query, $db);
        echo $numrows = mysql_num_rows($result); //test
        if($numrows > 0)
        {
            mysql_query("UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "'", $db);
            $report = "<b>" . $emailadres . "</b> is succesvol aangemeld. Vanaf nu ontvangt u ieder kwartaal onze nieuwsbrief.";
        }
        else
        {
            $report = "Dit adres is mogelijk reeds geactiveerd of de activatiecode is onjuist, neem eventueel <A HREF=\"mailto:webmaster@inkaconsult.nl\" TITLE=\"contact op met de Webmaster\" ONMOUSEOUT=\"(window.status=''); return true;\" ONMOUSEOVER=\"(window.status='contact op met de Webmaster'); return true;\">contact op met de Webmaster</A>.";
        }
    }

$numrows geeft 0 terug, hoewel die 1 zou moeten geven
de UPDATE query wordt uitgevoerd, met de resterende code binnen het TRUE deel van if() wordt niks gedaan
$report wordt 'Dit adres is mogelijk...'

Ik snap er niks meer van.. :?


*met jouw stukje code erbij komt er:
bool(false)
int(0)
bool(false) 0

[ Voor 38% gewijzigd door marcovtwout op 05-02-2005 18:50 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

zou je om regel 3 t/m 18 niet ook nog accolades moeten zetten?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Ja sorry, cp foutje, de accolades zijn er wel ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik doe het altijd zo en het werkt perfect:

maak een database connectie

PHP:
1
2
3
4
5
6
7
8
9
$result = mysql_query("update tabel set vel='".$variabele."'");
if(!$result)
{
     echo("niet geupdate");
}
else
{
     echo("wel geupdate");
}

[ Voor 18% gewijzigd door Verwijderd op 05-02-2005 19:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Probeer eens op deze manier de aangepaste records te grijpen:

PHP:
1
2
3
4
  if( $ConnectionID )
    $result = mysql_affected_rows( $ConnectionID );
  else
    die('Geen connectie met db!');


$ConnectionID is de return waarde van mysql_connect() of mysql_pconnect()

je kunt ook ff kijken naar het voorbeeldje hier :
http://nl3.php.net/manual...n.mysql-affected-rows.php

[ Voor 21% gewijzigd door Verwijderd op 05-02-2005 19:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

marcovtwout schreef op zaterdag 05 februari 2005 @ 18:29:
$numrows geeft 0 terug, hoewel die 1 zou moeten geven
de UPDATE query wordt uitgevoerd, met de resterende code binnen het TRUE deel van if() wordt niks gedaan
$report wordt 'Dit adres is mogelijk...'
Dit lijkt me wel erg onwaarschijnlijk dat de rest van de if niet uitgevoerd wordt.
Probeer is dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
if($numrows > 0)
        {
            mysql_query("UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "'", $db);
             $report = "<b>" . $emailadres . "</b> is succesvol aangemeld. Vanaf nu ontvangt u ieder kwartaal onze nieuwsbrief.";
        echo 'Gelukt';
        }
        else
        {
            $report = "Dit adres is mogelijk reeds geactiveerd of de activatiecode is onjuist, neem eventueel <A HREF=\"mailto:webmaster@inkaconsult.nl\" TITLE=\"contact op met de Webmaster\" ONMOUSEOUT=\"(window.status=''); return true;\" ONMOUSEOVER=\"(window.status='contact op met de Webmaster'); return true;\">contact op met de Webmaster</A>.";
        echo 'mislukt';
        }

Weet je in ieder geval welk deel uitgevoerd wordt. ;)
En wordt $report niet ergens nog een keer overschreven ofzo, je zal niet de eerste zijn die zich daarin vergist. :)
[edit] Zat niet op te letten 8)7

[ Voor 12% gewijzigd door Verwijderd op 05-02-2005 19:20 ]


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

marcovtwout schreef op zaterdag 05 februari 2005 @ 18:29:
*met jouw stukje code erbij komt er:
bool(false)
int(0)
bool(false) 0
Dan levert jouw "SELECT" query gewoon 0 rows op ... :)

Echo je query eens, en voer die eens direct in 'mysql' of bv. phpMyAdmin in, dan zal je zien dat die ook met geen resultaten terug komt.

Dit zijn zaken die je toch ook zelf kan testen? :)

Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Ja had ik al geprobeerd, krijg ik 1 rij terug zoals het hoort.
Als ik de UPDATE query weglaat geeft ie de goeie report en werkt het wel goed.
Hoe verklaar je trouwens dat de UPDATE query uitgevoerd wordt ook al geeft numrows 1?
En mysql_affected_rows deed ook gaar, staat stukje terug in dit topic.

[ Voor 49% gewijzigd door marcovtwout op 05-02-2005 19:50 ]


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Je liet toenet accolades weg, dus dat betekent dat je ergens midden in de code zit te copy pasten - weet je zeker dat je niet een verkeerd stuk code zit te copy pasten, of is het gene wat jij hier paste 100% het gene wat jij ook uitvoert?

Als het dat niet is - haal heel je code dan eens naar een klein, apart scriptje wat enkel dit stuk code uitvoert, en ga daarin je probleem eens debuggen.
marcovtwout schreef op zaterdag 05 februari 2005 @ 19:47:
Ja had ik al geprobeerd, krijg ik 1 rij terug zoals het hoort.
En vraag direct na die query uitgevoerd te hebben dan eens mysql_error() op en echo die eens? :)
Hoe verklaar je trouwens dat de UPDATE query uitgevoerd wordt ook al geeft numrows 1?
code:
1
2
3
if($numrows > 0)
        {
            mysql_query("UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "'", $db);

zegt toch ook dat die update uitgevoerd moet worden als $numrows 1 is ? :)

Acties:
  • 0 Henk 'm!

  • Knorrend_varken
  • Registratie: Juni 2000
  • Laatst online: 14:23
Ik moet als ik vanuit C(++) met de mysql client library connect met een database (mysql_real_connect) daar de vlag CLIENT_FOUND_ROWS meegeven om het aantal geupdate records terug te krijgen bij update en insert querys, geen idee of dat ook in PHP zo is, maar mischien heb je er iets aan.

[ Voor 6% gewijzigd door Knorrend_varken op 05-02-2005 19:59 ]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
elevator schreef op zaterdag 05 februari 2005 @ 19:56:
Je liet toenet accolades weg, dus dat betekent dat je ergens midden in de code zit te copy pasten - weet je zeker dat je niet een verkeerd stuk code zit te copy pasten, of is het gene wat jij hier paste 100% het gene wat jij ook uitvoert?
Nee het stukje klopt.
Als het dat niet is - haal heel je code dan eens naar een klein, apart scriptje wat enkel dit stuk code uitvoert, en ga daarin je probleem eens debuggen.
Ok, ik heb nu deze code apart gezet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
error_reporting(E_ALL);

$emailadres = htmlspecialchars(strip_tags($_GET['emailadres']), ENT_QUOTES);
$activatiecode = htmlspecialchars(strip_tags($_GET['activatiecode']), ENT_QUOTES);
$query = "SELECT * FROM nb_klanten WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
mysql_error();
$result = mysql_query($query, $db);
echo $numrows = mysql_num_rows($result); //test
if($numrows > 0)
{
    mysql_query("UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "'", $db);
    echo "goed";
}
else
{
    echo "fout";
}
?>

Hoe kan nou de UPDATE query uitgevoerd worden EN $numrows niet 1 zijn?

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Je hebt geen database connectie dus die code kan nooit werken - je mysql_error() hoort overigens na de mysql_query() :)

[ Voor 31% gewijzigd door elevator op 05-02-2005 20:08 ]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
PHP:
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
//DATABASETOEGANG
$database = 'inkaconsult';
$host = 'localhost';
$user = 'inkaconsult';
$pass = ***********

//VERBINDING MAKEN
$db = mysql_connect($host,$user,$pass) or die('Kan geen verbinding maken.');
mysql_select_db($database,$db) or die('Kan geen verbinding maken.');

//ACTIVEREN
error_reporting(E_ALL);

$emailadres = htmlspecialchars(strip_tags($_GET['emailadres']), ENT_QUOTES);
$activatiecode = htmlspecialchars(strip_tags($_GET['activatiecode']), ENT_QUOTES);
$query = "SELECT * FROM nb_klanten WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
$result = mysql_query($query, $db);
mysql_error();
echo $numrows = mysql_num_rows($result); //test
if($numrows > 0)
{
    mysql_query("UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "'", $db);
    echo "goed";
}
else
{
    echo "fout";
}

Zo beter, was ff connected vergeten.

*Ja nu krijg ik de verwachte actie, '1goed' of '0fout';
Eens kijken waar het aan ligt.

**gelijk maar op zn efficientst, kijken of dit werkt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//DATABASETOEGANG
$database = 'inkaconsult';
$host = 'localhost';
$user = 'inkaconsult';
$pass = xxxxxxxx

//VERBINDING MAKEN
$db = mysql_connect($host,$user,$pass) or die('Kan geen verbinding maken.');
mysql_select_db($database,$db) or die('Kan geen verbinding maken.');

//ACTIVEREN
$emailadres = htmlspecialchars(strip_tags($_GET['emailadres']), ENT_QUOTES);
$activatiecode = htmlspecialchars(strip_tags($_GET['activatiecode']), ENT_QUOTES);
$query = "UPDATE nb_klanten SET activatiecode=NULL,datum_geactiveerd=NOW(),IP_geactiveerd='" . $_SERVER['REMOTE_ADDR'] . "' WHERE emailadres='" . $emailadres . "' AND activatiecode='" . $activatiecode . "'";
$result = mysql_query($query, $db);
if(mysql_affected_rows() > 0)
{
    echo "goed";
}
else
{
    echo "fout";
}


***werkt ook :)

****met $report werkt het nu ook.. het moet dus echt aan de omliggende code liggen, eens goed naar kijken dan maar

*****nou, het zit niet in mijn nb_openbaar.php, dus moet het in main.php zitten waar het bestand wordt included. trouwens, meld je ff aan op www.inkaconsult.nl. Ik maak voor die mensen een nieuwsbriefsysteem, maar er hebben zich maar 4 mensen aangemeld sinds 1 januari en het zijn allemaal familieleden. :P

[ Voor 114% gewijzigd door marcovtwout op 05-02-2005 20:46 ]


Acties:
  • 0 Henk 'm!

  • marcovtwout
  • Registratie: Juli 2004
  • Laatst online: 05-08 08:55
Nou helemaal gedebugd en de fout blijkt ws in mijn 'topframe' systeem te zitten.
Een hoop blabla maar ik heb iets simpels gemaakt zodat een pagina die buiten de frameset geladen wordt (via zoekmachines bv), binnen de frameset geladen wordt.
Hier zijn stukjes code, misschien ziet iemand een fout erin zitten:

PHP:
1
2
3
4
5
6
7
8
9
10
11
//dit zit in bijna alle paginas, de variabelen achter php? worden eruit gehaald en 'opgeslagen'
//alle & worden geconverteerd naar AAA, zodat het 1 string wordt
" <SCRIPT LANGUAGE=\"javascript\" TYPE=\"text/javascript\">\n <!--\n"
    ." if(parent.location.href == self.location.href)\n"
    ." {\n"
    ."  url = self.location.href;\n"
    ."  url = url.split('.php?');\n"
    ."  url = url[1].replace(/\&/g,'AAA');\n"
    ."  top.location.href = 'index.php?url=' + url;\n"
    ." }\n"
    ." // -->\n </SCRIPT>\n";

PHP:
1
2
3
4
5
6
7
8
9
//dit zit in index.php, hier wordt de url opgevraagd
//AAA wordt teruggeconverteerd naar &

$url = htmlspecialchars(strip_tags(trim($_GET['url'])), ENT_QUOTES);
$url = str_replace("AAA","&",$url);

[]

<FRAME SRC=\"main.php?" . $url . "\"...


Ik weet het is een baggeroplossing en ws zou ik niet eens met frames moeten werken maar gewoon echt css gaan leren.
Hoe dan ook het werkt uiteindelijk dus nog niet :/

[ Voor 29% gewijzigd door marcovtwout op 05-02-2005 23:24 ]

Pagina: 1