SQL Table met zelfde fields

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jeroen dj

Jeroen dj

02/03/2015 20:06:36
Quote Anchor link
Afbeelding
Zoals je hierboven ziet zo ziet het er nu uit.
Hier komen de logs van de ingelogde users.

Maar er kunnen niet 2 dezelfden in 'usern'
dus als peter 1x inlogt komt dit hier te staan
Maar als hij voor de 2e X inlogt komt dit er niet tussen, hoe is dit op te lossen?
 
PHP hulp

PHP hulp

16/11/2024 12:33:38
 
Pipo Clown

Pipo Clown

02/03/2015 20:14:08
Quote Anchor link
Met een UPDATE in plaats van met een INSERT ?
 
Jeroen dj

Jeroen dj

02/03/2015 20:14:38
Quote Anchor link
Pipo Clown op 02/03/2015 20:14:08:
Met een UPDATE in plaats van met een INSERT ?


Het lijkt me dat je dan peter zijn 1e inlog gegevens overschrijft?
 
Thomas van den Heuvel

Thomas van den Heuvel

02/03/2015 20:17:18
Quote Anchor link
Niet oplosbaar zonder de volgende informatie:

- geef relevante passages van bijbehorende code die deze tabel vult
- beschrijf wat je uiteindelijk probeert te bereiken

Refereer ook aan een gebruiker via een id, en niet de username...
 
Jeroen dj

Jeroen dj

02/03/2015 20:21:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
$fname = $_REQUEST['fname'];
$fname1 = $_REQUEST['fname1'];
$fname2 = $ip=$_SERVER['REMOTE_ADDR'];
$fname3 = $_GET['id'];
$fname4 = date('Y/m/d H:i:s');
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO USERS (usern, ip, id, date)
    VALUES ('$fname', '$fname2', '$fname3', '$fname4')";
    // use exec() because no results are returned
    $conn->exec($sql);


Dit doe ik om bij te houden wie er inlogt op mijn site
Het id is gekoppeld aan de username
Gewijzigd op 02/03/2015 20:21:39 door Jeroen dj
 
Thomas van den Heuvel

Thomas van den Heuvel

02/03/2015 20:25:59
Quote Anchor link
En waarom zou een tweede insert met dezelfde informatie maar een andere timestamp niet werken of niet mogen werken?

Wat als iemand in meerdere browsers de site wil bekijken? Maakt het uit dat iemand meerdere keren inlogt?
 
Randy vsf

Randy vsf

02/03/2015 21:17:55
Quote Anchor link
Staat er niet gewoon een kolom op uniek? Dan voegt die de 2e keer namelijk ook niets in.
Gewijzigd op 02/03/2015 21:19:00 door Randy vsf
 
Thomas van den Heuvel

Thomas van den Heuvel

02/03/2015 21:27:52
Quote Anchor link
Mja, dat zou ook mijn eerste ingeving zijn, maar dan zou ie toch een exception (of fatal error) moeten krijgen?
 
Pipo Clown

Pipo Clown

02/03/2015 22:56:31
Quote Anchor link
Jeroen dj op 02/03/2015 20:14:38:
Het lijkt me dat je dan peter zijn 1e inlog gegevens overschrijft?


Er staat in de openingspost nergens dat dit niet mag of niet de bedoeling is toch ?
Net zo min als dat er in staat wat unieke velden zijn of wat er wel exact verwacht wordt.

Eigenlijk wordt er in de openingspost weer van uit gegaan dat we hier allemaal een glazen bol hebben.
Wat ook wel blijkt uit de antwoorden want bij ieder antwoord wordt er wel een aanname gedaan.



Toevoeging op 02/03/2015 22:57:53:

Het lijkt me dat je dan peter zijn 1e inlog gegevens overschrijft?
[/quote]

Er staat in de openingspost nergens dat dit niet mag of niet de bedoeling is toch ?
Net zo min als dat er in staat wat unieke velden zijn of wat er wel exact verwacht wordt.

Eigenlijk wordt er in de openingspost weer van uit gegaan dat we hier allemaal een glazen bol hebben.
Wat ook wel blijkt uit de antwoorden want bij ieder antwoord wordt er wel een aanname gedaan.
 
Ivo P

Ivo P

03/03/2015 02:31:37
Quote Anchor link
Moeten die / op regel 5 geen - zijn?

Is er een speciale reden om alle var $fname te noemen? Niet heel handig als je script meer dan 10 regels beslaat.



Toevoeging op 03/03/2015 02:31:44:

Moeten die / op regel 5 geen - zijn?

Is er een speciale reden om alle var $fname te noemen? Niet heel handig als je script meer dan 10 regels beslaat.



Toevoeging op 03/03/2015 02:33:30:

Je vergeet ze trouwens te escapen
 
Jeroen dj

Jeroen dj

03/03/2015 10:53:17
Quote Anchor link
Ivo P op 03/03/2015 02:31:37:
Moeten die / op regel 5 geen - zijn?

Is er een speciale reden om alle var $fname te noemen? Niet heel handig als je script meer dan 10 regels beslaat.



Toevoeging op 03/03/2015 02:31:44:

Moeten die / op regel 5 geen - zijn?

Is er een speciale reden om alle var $fname te noemen? Niet heel handig als je script meer dan 10 regels beslaat.



Toevoeging op 03/03/2015 02:33:30:

Je vergeet ze trouwens te escapen


Nee dit heeft niet echt een bedoeling maar ik vind het gewoon gemakkelijker om met variablen te werken. Als iemand inlogt met een andere timestamp word zijn andere nogsteeds overschreven met een update wat niet mijn bedoeling is dus ik hoop dat het op een 1 of andere manier toch mogelijk is om alle logs erin te houden zonder dat iets word overschreven.


Toevoeging op 03/03/2015 10:55:47:

Randy Flujowa op 02/03/2015 21:17:55:
Staat er niet gewoon een kolom op uniek? Dan voegt die de 2e keer namelijk ook niets in.


Heb je een idee hoe ik dit zou kunnen checken?
Afbeelding
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2015 11:33:25
Quote Anchor link
Als je op het moment dat iemand inlogt de bovenstaande query uitvoert zou dit gewoon moeten werken mits de tabel geen speciale restricties heeft ten aanzien van kolomwaarden.

Ook moet je natuurlijk zorgen dat je de inlog-informatie op de goede plaats ophaalt, $_REQUEST is nogal algemeen.

Waarom heet deze tabel trouwens USERS en niet login_log ofzo?

Dit is toch niet een tabel voor de opslag van gegevens van bestaande users wel? Anders moet je je aanpak veranderen... Je zou dan een kolom laatste_ip en laatste_login_datum aan kunnen maken en deze informatie altijd bijwerken als iemand inlogt.

Je aanpak wordt bepaald door de betekenis van de tabel.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/03/2015 11:35:50
Quote Anchor link
Als usern de primary key is staat er een UNIQUE constraint op.
Als het de PK is dan is de naam onderstreept als je de tabel structuur bekijkt.

Je kan dit oplossen met ON DUPLICATE KEY UPDATE:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
INSERT INTO USERS (usern, ip, id, date)
VALUES('peter', '192.168.0.254', 22, NOW())
ON DUPLICATE KEY UPDATE
ip = VALUES(ip),
id = VALUES(id),
date = VALUES(date)
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2015 12:01:42
Quote Anchor link
Dat kan, maar dan voeg je toch twee compleet verschillende dingen samen?

Inloggen !== registreren

De topicstarter moet een aantal dingen voor ons (en mogelijk ook voor zichzelf) ontwarren.
 
Jeroen dj

Jeroen dj

03/03/2015 15:52:05
Quote Anchor link
Ger van Steenderen op 03/03/2015 11:35:50:
Als usern de primary key is staat er een UNIQUE constraint op.
Als het de PK is dan is de naam onderstreept als je de tabel structuur bekijkt.

Je kan dit oplossen met ON DUPLICATE KEY UPDATE:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
INSERT INTO USERS (usern, ip, id, date)
VALUES('peter', '192.168.0.254', 22, NOW())
ON DUPLICATE KEY UPDATE
ip = VALUES(ip),
id = VALUES(id),
date = VALUES(date)


Hallo,

Ik heb dit geprobeert maar hierbij bleef de pagina wit.
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
$fname = $_REQUEST['fname'];
$fname1 = $_REQUEST['fname1'];
$fname2 = $ip=$_SERVER['REMOTE_ADDR'];
$fname3 = $_GET['id'];
$fname4 = date('Y/m/d H:i:s');
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO USERS (usern, ip, id, date)
    VALUES ('$fname', '$fname2', '$fname3', '$fname4')";
    ON DUPLICATE KEY INSERT
    UPDATE ip = $_REQUEST['fname2'];
    UPDATE id = $_REQUEST['fname3'];
    UPDATE date = $_REQUEST['fname4'];

    $conn->exec($sql);
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/03/2015 16:59:00
Quote Anchor link
Jeroen dj op 03/03/2015 15:52:05:
Hallo,

Ik heb dit geprobeert maar hierbij bleef de pagina wit.


Staat error_reporting uit?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/03/2015 19:26:58
Quote Anchor link
ON DUPLICATE .... hoort bij de insert query, je kan dit letterlijk overnemen uit mijn voorbeeld, je moet alleen de waardes voor de kolommen, vervangen door jouw PHP variabelen.
Voor de volledigheid:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sql
= "INSERT INTO USERS (usern, ip, id, date)
    VALUES('$fname', '$fname2', '$fname3', NOW())
    ON DUPLICATE KEY UPDATE
    ip = VALUES(ip),
    id = VALUES(id),
    date = VALUES(date)"
;
?>
 
Jeroen dj

Jeroen dj

04/03/2015 21:18:47
Quote Anchor link
Ger van Steenderen op 03/03/2015 19:26:58:
ON DUPLICATE .... hoort bij de insert query, je kan dit letterlijk overnemen uit mijn voorbeeld, je moet alleen de waardes voor de kolommen, vervangen door jouw PHP variabelen.
Voor de volledigheid:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sql
= "INSERT INTO USERS (usern, ip, id, date)
    VALUES('$fname', '$fname2', '$fname3', NOW())
    ON DUPLICATE KEY UPDATE
    ip = VALUES(ip),
    id = VALUES(id),
    date = VALUES(date)"
;
?>


Bedankt, maar dit werkt niet
Ik krijg nu geen error maar hij update de datum etc niet.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO USERS (usern, ip, id, date)
    VALUES('$fname', '$fname1', '$fname3', '$fname4')
    ON DUPLICATE KEY UPDATE
    ip = VALUES(ip),
    id = VALUES(id),
    date = VALUES(date)";
 
Thomas van den Heuvel

Thomas van den Heuvel

04/03/2015 22:18:12
Quote Anchor link
Date is een gereserveerd woord, wellicht helpt het als je deze tussen `backticks` zet.

Persoonlijk zou ik niet voor deze aanpak gaan eigenlijk.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/03/2015 22:45:35
Quote Anchor link
Date is geen gereserveerd woord, raar maar waar.

Even buiten wel of niet deze aanpak, ON DUPLICATE KEY UPDATE werkt alleen als een waarde wordt ingevoerd die al bestaat in de tabel voor een kolom met een unieke index.

Blijkbaar is dan usern niet de primary key, het lijkt er zelfs op dat er helemaal geen PK in de tabel aanwezig is, wat natuurlijk wel moet.
 
Thomas van den Heuvel

Thomas van den Heuvel

05/03/2015 00:27:55
Quote Anchor link
Huh, you are right. I stand corrected :].

Maar goed, de vraag is een beetje: wil (moet) je deze twee verschillende dingen (willen) combineren.

Ik ben toch een beetje voor een doorzichtige werking, hier hang je met deze tabelcreatie extra betekenis aan bepaalde kolommen die gaan over de data die bepaalt wat een INSERT-query doet. Misschien is het handig om dit soort zaken toch te programmeren? Bij een nieuwe registratie zul je ook iets moeten als een gebruikersnaam al bestaat. Een registratie laat je niet "kapot" gaan enkel door de unique restrictie lijkt mij?

Daarnaast, als je het IP gebruikt om (in combinatie met andere informatie) logins te onthouden dan heb je misschien een flexibelere aanpak nodig dan het enkel onthouden van de laatste entry.

Het doel lijkt ook "logging" wat mogelijk het bestaansrecht van een aparte tabel rechtvaardigt.
 

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.