[php][sql] Probleem met sql update

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey,

Ik heb een tabel Ban_ip

Daarin wil ik updaten

namelijk de adressen die er al instaan + nog een ip.

Hiervoor heb ik de volgende code:
PHP:
1
 mysql_query("UPDATE ban_ip SET ip = ip + $user_ip WHERE account = '". $naam ."'");


Maar aangezien sql dan gaat rekenen werkt dit niet.

Is er dus een manier om ervoor te zorgen dat sql dit ziet als strings en niet als int?

Zodat het gewoon achter elkaar komt te staan?

Alvast bedankt

[ Voor 13% gewijzigd door Verwijderd op 11-03-2006 14:47 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:34
Heb je gewoon geen concat() functie ofzo waarmee je 2 strings aan elkaar kan plakken ?
Kijk eens in de manual van MySQL.

En, als ik het goed begrijp, dan zet jij meerdere ip adressen in één veld ? Kan je eens uitleggen waarom je dat zo doet ? Dat is geen goede aanpak.
Zeg bv nu eens hoe je een bepaald geband ip adres wil gaan unbannen ? Of zeg eens hoe je snel kan weten hoeveel gebannede ip adressen je nu hebt ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik ga er dalijk komma's tussen zetten. maar ik wil eerst dat het achter elkaar komt te staan. als dat werkt zet ik er komma;s tussen en kan ik d.m.v. explode de verschillende email adressen eruit halen.

Ik doe dit om de volgende reden:

Stel persoon x is gebanned,
persoon x logt in via een andere computer met een ander ip.

dan komt dat ip bij zijn naam te staan in die tabel.

en kan persoontje x ook vanaf die pc niet meer inloggen

om personen te unbannen staat er ook een gebruikersnaam in die tabel.

Als ik die eruit haal gaan ook gelijk alle gebande ip adressen van die gebruiker eruit. Dus zo is dan een persoontje unbanned.

Hoeveel mensen er gebanned zijn kan ik ook via die gebruikersnaam uitlezen. het gaat er alleen om dat die persoon dan vanaf geen een computer meer kan inloggen

[ Voor 30% gewijzigd door Verwijderd op 11-03-2006 14:49 ]


Acties:
  • 0 Henk 'm!

  • Mexicanos
  • Registratie: Juli 2001
  • Niet online
Je kunt volgens mij beter voor iedere ban een nieuw record aanmaken.
Dan kun je makkelijk een select uitvoeren per account om te zien of een bepaald IP gebanned is.
En dan hoeft SQL ook geen concats of andere trucjes uit te halen.

[ Voor 3% gewijzigd door Mexicanos op 11-03-2006 14:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nee maar dan word mijn tabel weer zo groot he.

Ik maak voor iedere user die gebanned word een aparte record aan, zoals ik al eerder zei.

Maar misschien gaat die user dan wel vanaf een andere computer zitten en dan werkt die ban niet.

Dus het ip van die computer moet dan bij die user in de database komen. maar dit lukt me niet.

Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 09:57

killercow

eth0

hoeveel mensen ga je in gods naam bannen dan?

voor jouw oplossing moet je concat gebruiken, + is inderdaad een mathematical operator. nogal logisch dat hij gaat rekenen.

Daarnaast, mysql kan echt veel sneller een query op een setje ip's resolven dan jij dat ooit in php zou kunnen (jij moet immers eerst op mysql wachten tot deze alle data van disk heeft geplukt, en daarna moet jij het nog eens knippen en testen enzo.)

je database wordt er maar marginaal groter van als je het gewoon netjes doet en de ip's + acount id in een losse tabel op slaat, misschien zelfs kleiner omdat het merendeel van je users waarschijnlijk een lege kolom hebben in jouw oplossing.

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:34
Als je er nu komma's tussen zet of niet, het is een slecht datamodel dat je gaat gebruiken.
Wat Mexicanos zegt, is waar. Je zet beter ieder adres in een nieuw record.

Voor meer informatie kan ik je enkel aanraden om eens een en ander te lezen over data-modellering en normaliseren.
Artikel over normalisatie

Wat versta je onder een grote tabel ? Een databank is gemaakt om met records te werken. Een tabel van 10.000, 100.000 of meer records, dat gaat allemaal niet traag gaan hoor (mits je de goede indexen maakt).

Een performante DB applicatie, staat of valt met z'n data-model. Als jij dit doet volgens de normalisatie-regels (dus, ieder ip adres in een apart record), dan zal jouw app. uiteindelijk veel sneller, onderhoudbaarder en flexibeler zijn, dan als je het doet zoals je aanvankelijk van plan was.
Verwijderd schreef op zaterdag 11 maart 2006 @ 15:03:
nee maar dan word mijn tabel weer zo groot he.

Ik maak voor iedere user die gebanned word een aparte record aan, zoals ik al eerder zei.

Maar misschien gaat die user dan wel vanaf een andere computer zitten en dan werkt die ban niet.

Dus het ip van die computer moet dan bij die user in de database komen. maar dit lukt me niet.
Dus, dan heb je een tabel 'banned_users', en een tabel die je daaraan koppelt met de Ip adressen per user.

[ Voor 65% gewijzigd door whoami op 11-03-2006 16:39 ]

https://fgheysels.github.io/

Pagina: 1