Php - Dubbele update query mislukt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: 1 2 volgende »

Thijs anoniem

Thijs anoniem

26/10/2012 17:31:52
Quote Anchor link
Hallo iedereen ;)

Waarschijnlijk heb ik een domme fout gemaakt in mijn code. Hopelijk kan iemand mij helpen.

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
<?php
date_default_timezone_set('UTC+1');

if (isset($_POST['formsubmitted'])) {
$lastloggedin = NOW();
        
$query_insert_loggedins = "UPDATE members SET Timesloggedin = Timesloggedin+1 WHERE (email='$email')";
$query_insert_loggedins .= "UPDATE members SET Lastloggedin = $lastloggedin WHERE (email='$email')";
        
$result_insert_loggedins = mysqli_query($dbc, $query_insert_loggedins);
if (!$result_insert_loggedins) {
    echo 'Query mislukt';
}


if (mysqli_affected_rows($dbc) == 1) { //Succes.
}

?>


Mvg,
Thijs
Gewijzigd op 26/10/2012 17:34:20 door Thijs anoniem
 
PHP hulp

PHP hulp

23/12/2024 03:12:30
 
- SanThe -

- SanThe -

26/10/2012 17:58:31
Quote Anchor link
Je kan er gewoon één query van maken.
 
Thijs anoniem

Thijs anoniem

26/10/2012 18:00:02
Quote Anchor link
- SanThe - op 26/10/2012 17:58:31:
Je kan er gewoon één query van maken.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$query_insert_loggedins
= "UPDATE members SET Timesloggedin = Timesloggedin+1, $lastloggedin WHERE (e-mail='$email')";

?>


Zo?
 
Jaron T

Jaron T

26/10/2012 18:05:24
Quote Anchor link
waarom gebruik je () in je WHERE statement
 
Thijs anoniem

Thijs anoniem

26/10/2012 18:08:08
Quote Anchor link
Jaron T op 26/10/2012 18:05:24:
waarom gebruik je () in je WHERE statement


Dat had ik eerder ook al gebruikt voor een query met dubbele "SELECT".
 
- SanThe -

- SanThe -

26/10/2012 18:11:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$query_insert_loggedins
= "UPDATE members
                           SET Timesloggedin = Timesloggedin+1,
                               Lastloggedin = '"
. $lastloggedin . "'
                           WHERE email = '"
. $email . "'";
?>
Gewijzigd op 26/10/2012 18:12:47 door - SanThe -
 
Thijs anoniem

Thijs anoniem

26/10/2012 18:16:29
Quote Anchor link
- SanThe - op 26/10/2012 18:11:40:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$query_insert_loggedins
= "UPDATE members
                           SET Timesloggedin = Timesloggedin+1,
                               Lastloggedin = '"
. $lastloggedin . "'
                           WHERE email = '"
. $email . "'";
?>


Bedankt voor je voortdurende support, maar helaas werkt het nog niet.

Is er misschien een manier waardoor ik kan controleren waar de fout inzit?
 
- SanThe -

- SanThe -

26/10/2012 18:23:54
Quote Anchor link
Je krijgt géén error?
Dan zal er geen record zijn gevonden lijkt mij.

Toevoeging op 26/10/2012 18:24:27:

Echo de query eens.
 
Thijs anoniem

Thijs anoniem

26/10/2012 18:24:58
Quote Anchor link
Ik krijg géén error, maar ik zie dat er niks in de database wordt gezet (database connection werkt wél).
 
- SanThe -

- SanThe -

26/10/2012 18:26:55
Quote Anchor link
- SanThe - op 26/10/2012 18:23:54:
Echo de query eens.
 
Willem vp

Willem vp

27/10/2012 01:18:16
Quote Anchor link
Thijs anoniem op 26/10/2012 17:31:52:
Waarschijnlijk heb ik een domme fout gemaakt in mijn code. Hopelijk kan iemand mij helpen.

Aangezien de oorspronkelijke vraag nog niet is beantwoord:

mysqli_query() kan slechts 1 query tegelijk uitvoeren. Als je toch twee queries wilt uitvoeren, zul je iets anders moeten doen:

1) mysqli_query() twee keer aanroepen.
2) mysqli_multi_query() gebruiken. Let op dat er dan wel een puntkomma tussen de queries moet staan, anders wordt de string als 1 query naar mysql gestuurd en dat is een garantie voor foutmeldingen.

Neemt niet weg dat ik het in dit geval ook beter vind om de twee queries samen te voegen tot 1 query.

Overigens is het ook nog van belang of Lastloggedin een integer (epoch) is of een string-datatype. In het laatste geval zullen er '' om de waarde van $lastloggedin moeten staan.

Toevoeging op 27/10/2012 01:23:12:

Thijs anoniem op 26/10/2012 18:24:58:
Ik krijg géén error, maar ik zie dat er niks in de database wordt gezet (database connection werkt wél).

Even voor de volledigheid: het update-statement werkt alleen op records die al bestaan. Als een record nog niet bestaat in de database (en dat zou kunnen worden gesuggereerd door bovenstaande quote) dan zul je eerst een insert moeten doen.
Gewijzigd op 27/10/2012 01:20:37 door Willem vp
 
- Roland -

- Roland -

27/10/2012 10:57:50
Quote Anchor link
Met regel 5:
$lastloggedin = NOW();

gaat het nooit werken. NOW() is onbekend in php ( is sql )

tussen quotes, maar ze t maar (zonder quotes) gelijk in query !
Wordt dan zelfs wat leesbaarder

$query_insert_loggedins = "UPDATE members
SET Timesloggedin = Timesloggedin+1,
Lastloggedin = NOW()
WHERE email = '" . $email . "'";

Edit/toevoeg:

Omdat NOW sql FUNCTIE is (en geen value) moet het dus zonder quotes
Gewijzigd op 27/10/2012 11:00:32 door - Roland -
 
Thijs anoniem

Thijs anoniem

27/10/2012 11:21:40
Quote Anchor link
@Willem: De records in de database zijn al aangemaakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if (isset($_POST['formsubmitted'])) {
$query1 = "UPDATE members SET Timesloggedin = Timesloggedin + 1,  WHERE e-mail ='$Email'";
$query2 = "UPDATE members SET Lastloggedin = NOW() WHERE e-mail ='$Email'";
                          
mysqli_multi_query($query1, $query2);
?>


Is dit de beste oplossing? Je zegt <quote>puntkomma</quote> Maar het moet toch gewoon een komma zijn? Ik heb het in beide gevallen geprobeerd, maar er is nog niks in de db veranderd.
 
- Roland -

- Roland -

27/10/2012 11:47:27
Quote Anchor link
Ik zou het met 1 query doen ....

Maar maakt niet uit. Begin eerst eens jezelf te controleren:

echo $query

In 90% van gevallen ZIE je dan waar het fout gaat ......
 
Thijs anoniem

Thijs anoniem

27/10/2012 12:42:07
Quote Anchor link
Hier de output bij echo $query1 . $query2;

Warning: mysqli_multi_query() expects parameter 1 to be mysqli, string given in /home/a9598527/public_html/login.php on line 13


UPDATE members SET Timesloggedin = Timesloggedin + 1, WHERE e-mail =''UPDATE members SET Lastloggedin = NOW() WHERE e-mail =''

Waarschijnlijk pakt die de e-mail niet. Ik weet alleen niet wat de bovenste regel exact betekent.

Toevoeging op 27/10/2012 12:46:38:

Ik heb de eerste regel opgelost door de volgende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
mysqli_query($dbc, $query1);
mysqli_query($dbc, $query2);
?>
 
- Roland -

- Roland -

27/10/2012 12:54:18
Quote Anchor link
Ja,

en waarschijnlijk mag je weg laten. Je ZIET nu dat hij geen email value heeft !!

En ik zie ook niet waar die vandaan zou moeten komen. $email !!??

misschien bedoel je iets met $_POST['email']
 
Thijs anoniem

Thijs anoniem

27/10/2012 12:57:31
Quote Anchor link
- Roland - op 27/10/2012 12:54:18:

En ik zie ook niet waar die vandaan zou moeten komen. $email !!??


Ik heb de queries nu helemaal op het einde gezet.
Bij echo krijg ik nu wél mijn e-mailadres, maar ik zie in de database niet de UPDATE!

UPDATE members SET Timesloggedin = Timesloggedin + 1, WHERE e-mail ='MIJNEMAIL'UPDATE members SET Lastloggedin = NOW() WHERE e-mail ='MIJNEMAIL'

Toevoeging op 27/10/2012 12:59:42:

Hier is mijn dbstructure:

Timesloggedin varchar(100) latin1_swedish_ci
Lastloggedin varchar(100) latin1_swedish_ci

Is dit goed?
 
Obelix Idefix

Obelix Idefix

27/10/2012 13:19:49
Quote Anchor link
Timesloggedin is een getal --> waarom dan varchar (en geen int)?
Lastloggedin is een datum (?!) --> waarom dan varchar (en geen date)?

Je wilt in 1 tabel twee velden muteren. Maak dan van je beide query's 1. Dat is naar mijn idee veel logischer / overzichtelijker.
 
Thijs anoniem

Thijs anoniem

27/10/2012 13:34:03
Quote Anchor link
Obelix en Idefix op 27/10/2012 13:19:49:
Timesloggedin is een getal --> waarom dan varchar (en geen int)?


Done!

Obelix en Idefix op 27/10/2012 13:19:49:
Lastloggedin is een datum (?!) --> waarom dan varchar (en geen date)?

Inderdaad. Het is een date ;)

Obelix en Idefix op 27/10/2012 13:19:49:
Je wilt in 1 tabel twee velden muteren. Maak dan van je beide query's 1. Dat is naar mijn idee veel logischer / overzichtelijker.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php mysqli_multi_query($dbc, $query1, $query2); ?>


Ik heb je raad dus opgevolgd, maar zonder resultaat. :(

Hier is mijn volledige php code voor de login pagina.
http://pastebin.com/0WuLxr2h
 
Obelix Idefix

Obelix Idefix

27/10/2012 13:41:18
Quote Anchor link
Je hebt nog steeds meerdere query's.
1 query:
UPDATE table_name
SET column1=value1, column2=value2,...
WHERE some_column=some_value
 
Thijs anoniem

Thijs anoniem

27/10/2012 15:09:37
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$query1
= "UPDATE members SET Timesloggedin = Timesloggedin + 1, Lastloggedin = NOW() WHERE e-mail ='$Email'";
                          
mysqli_query($dbc, $query1);
?>


Dit werkt niet.

Kun je me helpen via teamview? Dan is het waarschijnlijk wel sneller geregeld.
 

Pagina: 1 2 volgende »



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.