abonnement Unibet Coolblue Bitvavo
  maandag 21 augustus 2006 @ 11:06:04 #61
85514 ralfie
!Yvan eht nioj
pi_41023643
kijk ook eens naar de ingebouwde datum parser van php, strtotime
pi_41044630
Hallo daar! Ik ben weer bezig met de top 100 in PHP en ik kom er nog steeds niet uit. Ik heb de tabel opnieuw aangemaakt.
quote:
tabel 'top100' met volgende rows:

id (uniek)
userid
datum
artist
titel
weken
vorigeweek
type
label
Nu ben ik bezig met 100 rows aanmaken, met iedere keer andere 'id' (van 1 t/m 100). Ik wil via ons CMS heel gemakkelijk deze top 100 in een keer kunnen wijzigen. Dus 100 rijen onder elkaar met invulveldjes voor:

- Artist
- Titel
- Aantal weken
- Vorige week
- Platenlabel

En dat dus 100 keer onder elkaar, like:

1. [input voor artist met als value="" de huidige natuurlijk] [titel] [aantal weken] [type (stijger of daler)] [platenlabel]
2. [input voor artist met als value="" de huidige natuurlijk] [titel] [aantal weken] [type (stijger of daler)] [platenlabel]
3. [input voor artist met als value="" de huidige natuurlijk] [titel] [aantal weken] [type (stijger of daler)] [platenlabel]

Ik heb nu het volgende voor in het CMS, maar hoe fix ik het verder qua UPDATE via PHP in SQL, want ik kan normaal gesproken 100 keer een query hebben voor update, maar dat lijkt me niet zo okeger.
quote:
<?
$query = mysql_query("SELECT * FROM top100 ORDER BY 'id' ASC");
$result = mysql_num_rows($query);
if(!$result){
echo "<tr><td colspan='6'>Geen ingave.</td></tr>";
}
else {
$i = 0;
while($object = mysql_fetch_object($query)){
$i++;
?>
<tr>
<td><? echo $i ?></td><input type="hidden" name="id<? echo $i ?>" value="<? echo $object->id ?>">
<td><input type="text" name="artist<? echo $object->id ?>" value="<? echo $object->artist ?>" size="10"></td>
<td><input type="text" name="titel<? echo $object->id ?>" value="<? echo $object->titel ?>" size="10"></td>
<td><input type="text" name="weken<? echo $object->id ?>" value="<? echo $object->weken ?>" size="2"></td>
<td>
<select name="type<? echo $object->id ?>">
<option value=""></option>
<option value="stijger" <? if($object->type == "stijger"){ ?> selected="selected" <? } ?>>stijger</option>
<option value="daler" <? if($object->type == "daler"){ ?> selected="selected" <? } ?>>daler</option>
</select>
</td>
<td><input type="text" name="label<? echo $object->id ?>" value="<? echo $object->label ?>" size="5"></td>
</tr>
<?
}
}
?>
dit
is
mijn
signature.
pi_41045504
quote:
Op maandag 21 augustus 2006 22:29 schreef RiderXXX het volgende:
[...veel regels...]
Zou het niet veel mooier zijn om het zo te doen:
- laat alle regels zien, maar read-only
- op elke regel een edit knop.
- de edit knop verandert m.b.v. javascript de regel in edit veldjes.
- de wijzigingen van die regel kan je m.b.v. ajax opslaan.
Dan voorkom je ook dat iemand 100 regels voor niets heeft zitten invoeren als er iets fout gaat.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_41045639
quote:
Op maandag 21 augustus 2006 23:00 schreef SuperRembo het volgende:

[..]

Zou het niet veel mooier zijn om het zo te doen:
- laat alle regels zien, maar read-only
- op elke regel een edit knop.
- de edit knop verandert m.b.v. javascript de regel in edit veldjes.
- de wijzigingen van die regel kan je m.b.v. ajax opslaan.
Dan voorkom je ook dat iemand 100 regels voor niets heeft zitten invoeren als er iets fout gaat.
haha wel een goeie ja, maar dan doet diegene het maar mooi opnieuw, aangezien dan alles gewoon wel opgeslagen is.. het is UPDATE en in die tekstveldjes is er een value="" met de huidige invoer wat in de DB staat opgeslagen.. dus erg veel moeite kost het niet..
dit
is
mijn
signature.
pi_41057857
klein vraagje:
wat is een goede manier om een username + password te controleren maar op zo'n manier dat je ook nog kan aangeven waar het fout gaat
ik zat zelf aan het volgende te denken:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$user
= addslashes(strip_tags($_POST['Username']));
$pass = md5($_POST['Password']);

$Ucheck = mysql_query("SELECT * FROM `users` WHERE `Username` = '".$user."'");
if(
mysql_num_rows($Ucheck) == 1)
{
$check = mysql_query("SELECT * FROM `users` WHERE `Username` = '".$user."' AND `Password` = '".$pass."'");
ifif(mysql_num_rows($check) == 1)
{
...
}
}
?>


dit lijkt me eigenlijk niet echt efficent aangezien ik eigenlijk net zo goed alleen de 2de query hoef uit te voeren,

iemand?
  dinsdag 22 augustus 2006 @ 13:07:27 #66
75555 t-x-m
. : : T-X-M : : . .
pi_41059132
1
2
3
4
5
6
7
<?php
$user
= mysql_real_escape_string(trim($_POST['Username']));
$pass = md5(trim($_POST['Password']));
$check = mysql_query("SELECT * FROM `users` WHERE `Username` = '".$user."' AND `Password` = '".$pass."'");
if(
mysql_num_rows($check) == 1)  print "succesvol ingelogd!";
   else print
"Gebruikersnaam of wachtwoord incorrect!";
?>

Mysql_real_escape_string werkt prima tegen sql-injecties. Verder werk ik altijd even de (perongeluk) ingetypede spaties weg dmv trim
Blijf van mn UserIcon af Admins :@
pi_41060559
quote:
Op dinsdag 22 augustus 2006 13:07 schreef t-x-m het volgende:

[ code verwijderd ]

Mysql_real_escape_string werkt prima tegen sql-injecties. Verder werk ik altijd even de (perongeluk) ingetypede spaties weg dmv trim
zo ver was ik nog niet, en echt bang voor injections ben ik niet
maar jij controleert in 1x de gebruikers naam + wachtwoord, dit wil ik dus gescheiden hebben zodat ik als bijvoorbeeld de gebruikers naam verkeerd is ik dit kan aangeven op het aanmeld formulier

wat mij ook een mogelijke oplossing leek is eerst een query met een check op de username en vervolgens die resultaten nog een keer checken maar dan op wachtwoord..

[ Bericht 11% gewijzigd door mschol op 22-08-2006 14:01:19 ]
pi_41062033
quote:
Op dinsdag 22 augustus 2006 13:54 schreef mschol het volgende:

[..]

zo ver was ik nog niet, en echt bang voor injections ben ik niet
Effe on a side note, SQL injection is de term voor (vaak kwaadaardige) truukjes waarmee je query beïnvloed kan worden. Stel je hebt een veld waar je een gebruikersnaam moet invullen in een formulier, als je dit formulier submit dan wordt er door middel van een MySQL query gekeken of die gebruikersnaam voorkomt in een database. Als je deze query niet beveiligt tegen SQL injection dan kan iemand door middel van dat simpele invoerveldje je hele database beïnvloeden, of erger, deleten. En dat gebeurt op Internet hoor.

Kijk ook eens op http://nl2.php.net/manual(...)al-escape-string.php , en dan vooral bij voorbeeldje 3. Zo'n soortgelijke functie (als dat quote_smart() in het voorbeeld) gebruik ik bij elke PHP applicatie waar ook maar iets van MySQL queries in zit.

En om effe op je vraag terug te komen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
function quote_smart($value)
{
   // Stripslashes
   if (get_magic_quotes_gpc()) {
       $value = stripslashes($value);
   }
   // Quote if not a number or a numeric string
   if (!is_numeric($value)) {
       $value = "'" . mysql_real_escape_string($value) . "'";
   }
   return $value;
}

if($_POST['action']=='login'){

 if( mysql_result(mysql_query(" SELECT count(*) FROM gebruikers WHERE gebruikersnaam='".quote_smart($_POST['gebruikersnaam'])."' AND wachtwoord='".quote_smart($_POST['wachtwoord'])."' "),0,0) ) {
 echo 'ingelogd';
 }else{
 echo 'foutieve combinatie gebruikersnaam/wachtwoord';
 }

}
?>
  dinsdag 22 augustus 2006 @ 14:49:31 #69
85514 ralfie
!Yvan eht nioj
pi_41062290
maak gewoon een query voor de username en trek daar het wachtwoord uit. dat wachtwoord kun je dan in php controleren, en als de username fout is failed de query.


Je kunt natuurlijk ook meteen alle data eruit trekken die je wilt gebruiken, en aan de hand van het wel of niet kloppen van het wachtwoord dit gebruiken of niet (mits de hoeveelheid data niet teveel is).

[ Bericht 55% gewijzigd door ralfie op 22-08-2006 15:01:29 ]
pi_41062371
quote:
Op dinsdag 22 augustus 2006 14:49 schreef ralfie het volgende:

[..]

maak gewoon een query voor de username en trek daar het wachtwoord uit. dat wachtwoord kun je dan in php controleren, en als de username fout is failed de query.

dat ik daar niet eerder op gekomen ben

thnx in iedereval voor dit heldere licht
en ik weet wat SQL injectens zijn
en ik ben niet echt bang dat me dat overkomt simpel weg door het feit dat je maar eerst eens de url moet gaan proberen te raden (as in: Succes, lukt je nooit)
En ik trek toch niet veel volk naar me site
  dinsdag 22 augustus 2006 @ 15:01:13 #71
85514 ralfie
!Yvan eht nioj
pi_41062553
btw: weet iemand een makkelijke manier om in mysql het aantal hits in een tabel van elke rij bij te houden? zijn hier alternatieven voor behalve met elke hit-query van de geraakte rijen een kolom 'hits' met 1 op te hogen?

Ik wil namelijk een tabel met plaatjes maken, en dan van elk plaatje bijhouden hoe vaak deze opgevraagd wordt zodat ik later kan bepalen welke plaatjes ik weg kan doen omdat niemand ze aanklikt. Het lijkt me dat er toch wel standaard iets in mysql ingebouwd zit hiervoor?

[ Bericht 97% gewijzigd door ralfie op 22-08-2006 15:12:14 ]
pi_41063472
Je kunt in MySQL queries een paar ingebouwde functies gebruiken. sum() is bijvoorbeeld voor het totaal van alle kolommen op te tellen, en je hebt ook avg() voor bijvoorbeeld het gemiddelde van alle kolommen in een tabel te berekenen. Op http://www.tizag.com/mysqlTutorial/ staan deze functies vrij goed uitgelegd.

Dus in jouw voorbeeld, als je van een hele tabel van alle records het aantal hits wil optellen, doe je gewoon het volgende:

SELECT sum(hits) FROM jouwtabel
pi_41064029
quote:
Op dinsdag 22 augustus 2006 12:27 schreef mschol het volgende:
klein vraagje:
wat is een goede manier om een username + password te controleren maar op zo'n manier dat je ook nog kan aangeven waar het fout gaat
ik zat zelf aan het volgende te denken:
[ code verwijderd ]

dit lijkt me eigenlijk niet echt efficent aangezien ik eigenlijk net zo goed alleen de 2de query hoef uit te voeren,

iemand?
Heel simpel: niet doen. Hoe meer informatie je terug geeft, hoe makkelijker is om te hacken. Als je eerst een melding krijgt dat de gebruiker niet bestaat, en dan na een tijdje random usernames proberen krijg je de melding dat het wachtwoord niet bestaat, dan weet je dus dat de username klopt. Dan hoef je daarna alleen nog het wachtwoord te raden. Het is veiliger om alleen de melding te geven dat de gebruikersnaam of het wachtwoord niet correct is.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_41064679
quote:
Op dinsdag 22 augustus 2006 15:52 schreef SuperRembo het volgende:

[..]

Heel simpel: niet doen. Hoe meer informatie je terug geeft, hoe makkelijker is om te hacken. Als je eerst een melding krijgt dat de gebruiker niet bestaat, en dan na een tijdje random usernames proberen krijg je de melding dat het wachtwoord niet bestaat, dan weet je dus dat de username klopt. Dan hoef je daarna alleen nog het wachtwoord te raden. Het is veiliger om alleen de melding te geven dat de gebruikersnaam of het wachtwoord niet correct is.
dat ben ik wel met je eens (maar ja aangezien niemand er zomaar gaat komen, en de info die er staat niet echt leuk is om te bewerken mogen ze van mij best proberen..
in een publiekelijk toegangkelijk systeem zal ik idd niet username en pass apart checken
pi_41064759
quote:
Op dinsdag 22 augustus 2006 13:07 schreef t-x-m het volgende:
Verder werk ik altijd even de (perongeluk) ingetypede spaties weg dmv trim
Dus een spatie op het begin of eind van mijn wachtwoord is geen geldig teken?
  dinsdag 22 augustus 2006 @ 16:24:01 #76
75555 t-x-m
. : : T-X-M : : . .
pi_41064901
quote:
Op dinsdag 22 augustus 2006 14:54 schreef mschol het volgende:

[..]


dat ik daar niet eerder op gekomen ben

thnx in iedereval voor dit heldere licht
en ik weet wat SQL injectens zijn
en ik ben niet echt bang dat me dat overkomt simpel weg door het feit dat je maar eerst eens de url moet gaan proberen te raden (as in: Succes, lukt je nooit)
En ik trek toch niet veel volk naar me site
En wat als een of andere grappenmaker nou in 1x bij gebruikersnaam het volgende invoerd:
1gebruikersna'; DELETE * FROM users;
Daar hoeftie geen url voor te raden, verder, een beetje sql-injector kan jouw url wel vinden hoor!
Blijf van mn UserIcon af Admins :@
  dinsdag 22 augustus 2006 @ 16:25:03 #77
75555 t-x-m
. : : T-X-M : : . .
pi_41064937
quote:
Op dinsdag 22 augustus 2006 16:19 schreef JeRa het volgende:

[..]

Dus een spatie op het begin of eind van mijn wachtwoord is geen geldig teken?
Lijkt me niet praktisch/logisch nee, maar je hebt gelijk--> bij wachtwoord hoeft het niet
Blijf van mn UserIcon af Admins :@
pi_41065029
quote:
Op dinsdag 22 augustus 2006 16:24 schreef t-x-m het volgende:

[..]

En wat als een of andere grappenmaker nou in 1x bij gebruikersnaam het volgende invoerd:
[ code verwijderd ]

Daar hoeftie geen url voor te raden, verder, een beetje sql-injector kan jouw url wel vinden hoor!
Die methode werkt niet meer
As a rule, I never touch anything more sophisticated and delicate than myself.
pi_41065528
quote:
Op dinsdag 22 augustus 2006 16:24 schreef t-x-m het volgende:

[..]

En wat als een of andere grappenmaker nou in 1x bij gebruikersnaam het volgende invoerd:
[ code verwijderd ]

Daar hoeftie geen url voor te raden, verder, een beetje sql-injector kan jouw url wel vinden hoor!
uhh waar wil hij/zij dat invoeren..
dan moettie de url naar me login form weten, suc6
  dinsdag 22 augustus 2006 @ 16:46:25 #80
85514 ralfie
!Yvan eht nioj
pi_41065557
quote:
Op dinsdag 22 augustus 2006 15:30 schreef Tuvai.net het volgende:
Je kunt in MySQL queries een paar ingebouwde functies gebruiken. sum() is bijvoorbeeld voor het totaal van alle kolommen op te tellen, en je hebt ook avg() voor bijvoorbeeld het gemiddelde van alle kolommen in een tabel te berekenen. Op http://www.tizag.com/mysqlTutorial/ staan deze functies vrij goed uitgelegd.

Dus in jouw voorbeeld, als je van een hele tabel van alle records het aantal hits wil optellen, doe je gewoon het volgende:

SELECT sum(hits) FROM jouwtabel
nee, dat bedoel ik niet. wat ik wel bedoel is, ik heb dit

1
2
3
4
5
6
---------------------------------
image_id (int) |  image(blob)
---------------------------------
    0           |     [image]
    1           |     [image]
---------------------------------
Stel iemand wil plaatje 0 bekijken, dat wordt deze uit de tabel getrokken met

SELECT image from images where image_id=0

Ik snap dat als ik wil weten hoevaak image 0 is opgehaald ik een kolom met hits kan toevoegen en deze met elke successvolle query kan verhogen

UPDATE images WHERE image_id=0 SET hits=hits+1;

Natuurlijk kan ik deze samenvoegen tot

$querry="SELECT image from images where image_id=0;UPDATE images WHERE image_id=0 SET hits=hits+1"

maar ik vroeg me af of dit makkelijker kan, het is toch vrij veel werk voor iets eenvoudigs. Ik hoopte er eigenlijk op dat mysql intern de hits bijhoudt/kan houden?
pi_41065893
quote:
Op dinsdag 22 augustus 2006 16:45 schreef mschol het volgende:

[..]

uhh waar wil hij/zij dat invoeren..
dan moettie de url naar me login form weten, suc6
En jij gelooft echt dat niemand de webpagina in kwestie kan vinden, die wel gewoon voor iedereen toegankelijk is en op het Internet staat?

Hier is een tip: d'r zijn meer methodes voor het vinden van webpagina's, wachtwoorden, e.d. dan raden.
pi_41066015
quote:
Op dinsdag 22 augustus 2006 16:55 schreef Tuvai.net het volgende:

[..]

En jij gelooft echt dat niemand de webpagina in kwestie kan vinden, die wel gewoon voor iedereen toegankelijk is en op het Internet staat?

Hier is een tip: d'r zijn meer methodes voor het vinden van webpagina's, wachtwoorden, e.d. dan raden.
Het is een combinatie van weten waar de pagina staat, kwaad willen doen, weten hoe je kwaad moet doen, en weten welke tabelnamen er zijn, wil je uberhaubt ergens kunnen komen. Voor sommige dingen kan je dat risico maaaakkkelijk nemen.
As a rule, I never touch anything more sophisticated and delicate than myself.
pi_41066314
Iemand die wat degelijke ervaring heeft met bijvoorbeeld PHP + MySQL zal genoeg methodes weten om met een login form dat op PHP i.c.m. MySQL draait te knoeien. Als je dan toevallig een form hebt wat notabene slecht beveiligd is, omdat de programmeur toch zoiets nonchalants heeft van "Mwahaha niemand vind deze pagina!", dan kun je met zo'n dergelijk persoon met slechte bedoelingen toch al behoorlijk op de koffie komen.

En trouwens, tegen SQL injection is nog LANG niet overal op het web beveiligd hoor.

Ten slotte vind ik dat je als programmeur toch op z'n minst dat kleine beetje moeite kunt doen om strings en variabelen te filteren, al is het voor je eigen veiligheid. Functies als mysql_real_escape_string() en intval() zijn d'r niet voor niks. Ik spreek trouwens uit ervaring, heb in het begin op mijn website/forum vaak genoeg ettertjes gehad die toch via een of ander simpel variabel wat ik dacht dat het onschuldig was, toch in m'n database hebben zitten rommelen.
pi_41066617
quote:
Op dinsdag 22 augustus 2006 16:55 schreef Tuvai.net het volgende:

[..]

En jij gelooft echt dat niemand de webpagina in kwestie kan vinden, die wel gewoon voor iedereen toegankelijk is en op het Internet staat?

Hier is een tip: d'r zijn meer methodes voor het vinden van webpagina's, wachtwoorden, e.d. dan raden.
google is your friend ??

ook dat is te beveiligen
dan kan ik net zo goed een htaccess erin zetten maar lege index.html + goeie robots.txt + een vage bestandsnaam voor je login form doen ook wonderen
en ik vind het niet zo'n mega ramp als ze op de pagina komen hoor
maar mijn punt is dus dat ik het niet wil beveiligen maar wel weet dat ik het eigenlijk moet beveiligen..
(dat was inmiddels toch wel duidelijk??? )
pi_41095270
Kan iemand me vertertellen waarom dit niet op mijn server werkt??
1
2
3
4
<?php
echo date("D d M Y H:i:s", strtotime("Mon, 21 Aug 2006 01:00:08 -0400e"));
// ik krijg dus: Thu 01 Jan 1970 00:59:59
?>

Die server draait op php4, thuis op php5 werkt het prima. Volgens php.net zou het ook prima moeten werken op php4

Kan iemand me dit uitleggen?

[ Bericht 51% gewijzigd door Mr_Zoidberg op 23-08-2006 15:28:38 ]
  woensdag 23 augustus 2006 @ 15:09:25 #86
85514 ralfie
!Yvan eht nioj
pi_41095415
quote:
Op woensdag 23 augustus 2006 15:04 schreef Mr_Zoidberg het volgende:
Kan iemand me vertertellen waarom dit niet op mijn server werkt??
<?php
echo date("D d M Y H:i:s", strtotime("Mon, 21 Aug 2006 01:00:08 -0400e"));
// ik krijg dus: Thu 01 Jan 1970 00:59:59
?>
Die server draait op php4, thuis op php5 werkt het prima. Volgens php.net zou het ook prima moeten werken op php4

Kan iemand me dit uitleggen?
de e op het eind erachter weghalen, doet ie het wel (bij mij dan, php4 thuis)

php5 behandeld tijdzones op een totaal andere manier als php4, je zult dus wat aan moeten passen

[ Bericht 7% gewijzigd door ralfie op 23-08-2006 15:16:52 ]
pi_41096132
quote:
Op woensdag 23 augustus 2006 15:09 schreef ralfie het volgende:

[..]

de e op het eind erachter weghalen, doet ie het wel (bij mij dan, php4 thuis)

php5 behandeld tijdzones op een totaal andere manier als php4, je zult dus wat aan moeten passen
Als ik de "e" weg laat, dan geeft ie idd een datum, maar die is niet goed. Het goede antwoord is namelijk: Sun 20 Aug 2006 22:00:08.

Ik ga weer ff verder zoeken. Als jullie nog tips hebben hoor ik het graag

edit:
Ik heb het nu erg brakjes opgelost. Omdat het toch altijd om de tijdzone -0400 heb ik dat gedeelte weggelaten en 60*60*4 van de timestamp afgehaald. Niet echt hoe het zou moeten, maar het werkt

[ Bericht 17% gewijzigd door Mr_Zoidberg op 23-08-2006 16:24:20 ]
  woensdag 23 augustus 2006 @ 17:03:42 #88
62215 qu63
..de tijd drinkt..
pi_41098953
<style>
.main
{
position: absolute;
left: 10%;
right: 10%;
top: 10%;
bottom: 10%;
overflow: auto;
text-align: right;
}
</style>

waarom werkt dit wel in FF en niet in IE?

IE maakt er gewoon een lange pagina van terwijl FF er een soort iframe-achtig iets van maakt. iemand een idee hoe ik dit in IE kan oplossen?
It's Time To Shine
[i]What would life be like without rhethorical questions?[/i]
  woensdag 23 augustus 2006 @ 17:05:10 #89
62215 qu63
..de tijd drinkt..
pi_41098994
een voorbeeld is hier te vinden
It's Time To Shine
[i]What would life be like without rhethorical questions?[/i]
pi_41103916
quote:
Op woensdag 23 augustus 2006 17:03 schreef qu63 het volgende:

waarom werkt dit wel in FF en niet in IE?
[CSS] voor dummies - Deel 5


[edit] oh, daar heb je ookal gepost
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')