byta passw etc

PHPportalen Forum Index » PHP Mjukstart
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Tomas59



Medlem i: 443 dagar

Status: Offline



#741836
Inlägg Skrivet: 2017-08-20 14:35      Ämne: byta passw etc Citera

har en liten script som jag delar till vissa vänner. har nu utvecklat den lite mer så de kan välja lite options.
min "config.cfg" ser ut så här som default.
MembeID|PassWord|ProfileColor|PicktureColor|option|Name|
99575381|||||Lolipop|
102667212|||||Shy_Heart|
100321174|||||Pitbull_Pup|
94824307|||||Summer|

Tanken är att de själva ska få välja PassWord, ProfileColor, PicktureColor och option.
Jag har läst
$line = fgets($data);
$cfgline = $line; /* tills vidare*/
$line = explode('|',$line);
$user = $line[0];
$password = $line[1];
$color1 = $line[2];
$color2 = $line[3];
$opt = $line[4];
$name = $line[5];

/*$passw ex:*/
$passw='1234'

Min fråga är nu. Vilket är det bästa sättet att ändra i cfg filen?

Jag va inne på
$file= fopen("config.cfg", "r");
$file=preg_replace('/'.$user."|".$password."|".'/', $user."|".$passw."|", $file);

men detta vill sig inte utan hag får $file att se ut så här
100321174|1234|R
100321174|1234|e
100321174|1234|s
100321174|1234|o
osv osv osv tills yttre raden säger Resource id #4

Någon som har en ide hur jag löser detta enklast?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4192 dagar
Från: Tavesta
Status: Offline



#741837
Inlägg Skrivet: 2017-08-20 15:09      Ämne: Citera

Din nuvarande lösning har en del problem som kan vara lite trixiga att lösa:
Om något av datat innehåller ett pipe-tecken (|) kommer skriptet som tolkar datat i filen spåra ur.
Lösenord som användare väljer själv måste hanteras med stor försiktighet.

Om inte konfigurationsfilen är jättestor hade jag nog föreslagit en lösning på det första problemet som bygger på någon färdig lösning att serialisera en datastruktur. Ofta är JSON en mycket bra lösning på det:
1) Läs in HELA filen med t.ex file_get_contents
2) Parsa datat med json_decode
3) ändra det data du vill ändra
4) Återskapa JSON med json_encode
5) spara tillbaka datat i filen med file_put_contents

Det andra problemet löser man genom att aldrig spara själva lösenordet, utan bara spara en checksum på det. Funktionen crypt kan användas både för att skapa en checksum och verifiera lösenordet.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 443 dagar

Status: Offline



#741838
Inlägg Skrivet: 2017-08-20 16:50      Ämne: Citera

Detta lyckades jag hitta och fungerar.
Så json fick ledigt Smile
Tittade lite på json verkade lite invecklat för mina hjärnceller just nu. Smile
Kanske tar en titt mer på det vit tillfälle om detta strular.

$data = file_get_contents("config.cfg");
$newdata = str_replace($user.'|'.$password, $user.'|'.$passw, $data);
$data= fopen("new.cfg", "w");
fwrite($data,$newdata);
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4192 dagar
Från: Tavesta
Status: Offline



#741840
Inlägg Skrivet: 2017-08-21 08:04      Ämne: Citera

Vad jag kan se så kommer din lösning strula så fort någon råkar välja fel lösenord.
Prova vad som händer om du väljer ett lösenord som innehåller pipe-tecken (|).
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 443 dagar

Status: Offline



#741843
Inlägg Skrivet: 2017-08-21 13:19      Ämne: Citera

hmmm nu satte du myror i huvudet på mig Smile
1. Antingen så skriver jag en text att detta tecken inte är tillåtet
och kommer skapa problem för dem själva. (risken finns att någon ska trotsa och prova iaf.)
2. som ovan och kollar samt plockar bort det.
men hur gör jag det enkelt?
3. Har du ett bättre förslag på hur jag ska göra om congfig.cfg
så det blir tillåtet?

En annan fråga till.
Jag har gjort en sida info.html med en <form> där de får skriva in user ID
som sen går över till info.php.
den börjar med
if(isset($_POST['MemberID'])) {
$userId = $_POST['MemberID'];
$userId = trim($userId); /* ifall något mellanslag*/
}
if(isset($_POST['password'])) {
$passw = $_POST['password'];
$userId= $_GET['uid'];
}

i denna scrip upptäkts ifall password = ''

Men frågan är kan jag göra detta på något bättre sätt och kan fortsätta med info.pp så folk kan
forsätta att ändra. Jag tänkte mig iså fall att |ProfileColor|PicktureColor|option| skulle bli på samma sida.
Kan man isåfall kalla på en funktion typ if $?? call funktion?
För tillfället så kollar den bara efter tomt password sen får de tillgång till en html kod som de kan använda till sin profil.

hoppas någon förstod detta ...
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4192 dagar
Från: Tavesta
Status: Offline



#741844
Inlägg Skrivet: 2017-08-22 13:08      Ämne: Citera

Mitt förslag för config.cfg är fortfarande att du använder JSON. Det är antagligen betydligt enklare än din nuvarande lösning.

Inledningsvis kan config.cfg se ut så här:
KOD:
1:
{
2:
    "members": {
3:
        "99575381": {
4:
            "name": "Lolipop"
5:
        },
6:
        "102667212": {
7:
            "name": "Shy_Heart"
8:
        },
9:
        "100321174": {
10:
            "name": "Pitbull_Pup"
11:
        },
12:
        "94824307": {
13:
            "name": "Summer"
14:
        }
15:
    }
16:
}


Vill du ändra data i konfigurationsfilen kan du göra så här:
PHP:
1:
 
2:
//Läs in konfigurationsfilen
3:
$cfg json_decode(file_get_contents('config.cfg'), true);
4:
 
5:
//Sätt profileColor på medlem 99575381 till "red":
6:
$cfg['members'][99575381]['profileColor'] = "red";
7:
 
8:
//Spara konfigurationsfilen
9:
file_put_contents('config.cfg'json_encode($cfgJSON_PRETTY_PRINT)); 


Din andra fråga förstod jag nog inte riktigt.
Vad är det meningen att info.html och info.php skall användas till?

Vad jag kan bedömma så finns det mycket stora risker ifall du sparar lösenord i klartext i konfigurationsfilen. Det kan hända betydligt värre saker än att ett konto hackas, ifall det är användaren själv som väljer lösenord. Tror du att du får till en lösning där lösenorden krypteras? I annat fall är det bättre att administratören eller slumpen får sätta lösenord.
Vad jag kan se så finns det en överhängande risk att man bara behöver känna till namnet på konfigurationsfilen för att kunna läsa av datat där.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 443 dagar

Status: Offline



#741846
Inlägg Skrivet: 2017-08-23 23:11      Ämne: Citera

Med lite eftertanke så har du rätt med password, den biten verkar inte så avancerad så den fixar jag.
Blir förmodligen bin2hex då jag bara har php 5.0 för tillfället.
får hitta på någon klurig lösning till det.

Jag gillar detta upplägg av .cfg filen
men så röriga exempel i php manualen för mig.

Har försk att klura ur hur man ska läsa av .cfg filen och få
name till $name

Men har inte riktigt förstått detta.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4192 dagar
Från: Tavesta
Status: Offline



#741847
Inlägg Skrivet: 2017-08-24 13:44      Ämne: Citera

Om du använder den JSON-lösning jag föreslog läser du av name för medlem med id 99575381 med
$name = $cfg['members'][99575381]['name'];

Php 5.0 är visserligen mycket gammal i nuläget, men det finns bättre lösningar än bin2hex. Nackdelen med bin2hex är att det är mycket enkelt att avkryptera lösenordet. Har man stor vana med hexadecimal kod så kan man kanske till och med läsa av lösenordet helt manuellt.
Funktionen crypt skall fungera i php 5.0.
Om du tycker det blir för avancerat så kan du använda någon checksumfunktion, som t.ex md5, men det blir inte lika säkert, eftersom det där inte finns någon inbyggd funktion för hantering av krypteringssalt.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 443 dagar

Status: Offline



#741848
Inlägg Skrivet: 2017-08-25 00:41      Ämne: Citera

Tack återkommer med min andra fråga senare .
en annan fråga angående

ex: $userid = '99575381';

$name = $cfg['members'] $userid]['name'];

Hur vet jag smidigast om $userid existerar i .cfg filen?

iofs så funkar

if (!$name == '') {echo $userId.' '.$name.' exist <br>';}

Jag vill hellre vilja ha

if ($userid == $cfguserid) {echo $userId.' '.$name.' exist <br>';}

Som lösning på det.
md5 verkar vara en simpel och hyfsat bra lösning åxå, ev komplitera med bin2hex åxå.
den som vill åt sådana uppgifter gör förmodligen det förr eller senare iaf. Men kan man kryptera det så tar det lite längre tid bara.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4192 dagar
Från: Tavesta
Status: Offline



#741849
Inlägg Skrivet: 2017-08-25 11:45      Ämne: Citera

PHP:
1:
 $userid '99575381';
2:
if(isset($cfg['members'][$userid])) {
3:
    //userid 9957381 finns i konfigurationsfilen
4:
}
5:
else {
6:
    //userid 9957381 saknas
7:
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 443 dagar

Status: Offline



#741850
Inlägg Skrivet: 2017-08-26 12:13      Ämne: Citera

Ett stort tack. Nu har jag en fungerande användarlista.

Angående den andra frågan.

Jag har en sida där det är tänkt att användarna ska kunna ändra
ProfileColor
PictureColor
och option till 1 eller 2
senare även font

Jag har gjort en sida info.html med en <form> där de får skriva in user ID
som sen går över till info.php.
KOD:
1:
 
2:
<form action="info.php" method="post" enctype="multipart/form-data">
3:
<center>
4:
<label for="login">MemberId:<br /> </label>
5:
<input type="text" name="MemberID" placeholder="RLC MemberId" required/><br/><br/>
6:
 
7:
<input type="submit" class="Ale-button" value="Check ->"/>
8:
</center>
9:
 

använderen skriver in sitt userid då de klikar på Check, Om de då saknar ett passw så får dom
en ruta där de ska fylla i ett passw.
I info.php fångar MemberID med $userId = $_POST['MemberID'];

Så långt är allt ok men sen för att gå vidare utan att behöva göra flera filer,
så funderar jag på om det går att göra så att den sparar passw och sen
läsa om .cfg filen och forsätta i info.php?
Om användaren har gjort någon ändring i sina settings och klickar på fortsätt så ska de få fråga om att fylla i passw
för att göra ändrigen.
lite invecklat kanske.. Men helst skulle jag önska att alt skulle funka i en och samma typ i info.html
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4192 dagar
Från: Tavesta
Status: Offline



#741851
Inlägg Skrivet: 2017-08-26 13:36      Ämne: Citera

Jag har fortfarande lite svårt att få grepp om vad det här är för problem.

Om jag föreslår den mycket enkla lösningen, att du har inmatningsruta för precis allt i samma formulär: AnvändarID, ProfileColor, PictureColor, option, font och lösenord.
Det kunde faktiskt vara samma ruta för lösenord, oavsett om man anger nytt lösenord när inget finns, eller skall ange det man redan valt. Ingen jättebra lösning kanske, men ganska enkel.

Sedan finns det ett problem med att filen med formuläret heter info.html. Så länge som det inte finns något förifyllt data så kan det säkert fungera bra, men så fort du vill ha ett fält förifyllt så blir det mycket enklare om du har ett php-skript även där. Och om man vill bygga ett formulär som fylls i i flera steg så kommer man sällan ifrån att en del data måste bli förifyllt.

Känner du förresten till den enkla lösningen för formulär som bara använder en enda fil? Första delen av skriptet läser av eventuellt postat data, och den andra delen ritar upp formuläret, med eventuellt redan postat data förifyllt och felmeddelanden ifall något saknas eller blivit fel angivet.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 443 dagar

Status: Offline



#741852
Inlägg Skrivet: 2017-08-27 18:53      Ämne: Citera

Jag är litle inne på om det går att skicka en vaiabel
så man fångar den med $_POST istället för $_GET.
Känner bara till att skicka med viriabel typ next.php&uid=$userid. nackdelen är då att man ser $userid i
url rutan.

en fråga till om .cfg filen
om expvis detta fall. $color1 skulle vara sat men utan värde
KOD:
1:
$color1 = $cfg['MemberID'][$userId]['ProfileColor'];


har du förlag till bättre lösning än min?
KOD:
1:
if (strlen($color1 ) < '1') {}
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4192 dagar
Från: Tavesta
Status: Offline



#741853
Inlägg Skrivet: 2017-08-28 22:07      Ämne: Citera

I samband med att du postar formulär går det alltid att ha data i $_POST istället för i $_GET (förutsatt att det inte är ett method=GET -formulär).
Till det använder man <input type="hidden">, ifall det inte är meningen att användaren skall behöva se eller enkelt kunna ändra datat.
Man måste dock vara medveten om att händiga användare alltid kan både se och ändra allt som skickas fram och tillbaka till webbklienten.

Ett alternativ du kanske borde sätta dig in i är $_SESSION. Då sparas datat på webbservern istället, trots att det är data som hör i hop med ett visst specifikt besök.
Data som lagras i $_SESSION kan besökaren inte se alls. Och inte heller ändra, såvida man inte lyckats hacka webbsidan riktigt ordentligt.
Man måste dock tänka på att om man använder $_SESSION så kommer det sparas en kaka i besökarens webbläsare. Då är man skyldig att informera besökaren om detta, och begära ett aktivt godkännande.

För att använda $_SESSION så anropar du funktionen session_start(); i början av ditt script, innan du börjat skriva ut något som skickas till webbläsaren. Sedan är det bara att läsa av och skriva data till $_SESSION på samma sätt som du läser av $_POST, $_GET och $cfg.



Det enklaste och smidigaste sättet att kolla om en sträng innehåller någon text är:
PHP:
1:
 if(strlen($variabel)) {
2:
  //Strängen innehåller data
3:
}
4:
else {
5:
  //Strängen är tom
6:


I ditt exempel borde du inte haft apostrofer runt siffran 1. När du sätter apostrofer gör du om talet till en sträng, och skall du göra räkneoperationer på ett sådant tal så måste datorn först göra om det till ett tal igen. Detta tar onödig kraft och det finns en liten risk att beteendet inte blir exakt det du förutsett när sådan konvertering sker.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Tomas59



Medlem i: 443 dagar

Status: Offline



#741854
Inlägg Skrivet: 2017-09-02 18:14      Ämne: Citera

Stort tack för all hjälp.
Ingen aning varför det blev med apostrofer. Det fick jag lära mig
en gång i tiden att när man har med siffror att göra så behövs det inte. Har iaf nu fått ihop en fungerande sida för till mitt projekt. Ska ta mig en titt på $_SESSION när mer tid finns.
Finns en del saker i projektet att putsa till lite. Ett exempel när jag fick frispel med html, java och php
Då jag hade $color = '121, 255, 185' och ville ha den med i föjande bit där value: skulle ha ett rgb(värde)
Inte det snyggaste men fungerar Smile

KOD:
1:
echo '<form action=tracker.php?choise='.$choise.' method="post" enctype="multipart/form-data">'; ?>
2:
<script src="../java/jscolor.js"></script>
3:
<input name="color1" id="color_value1" value="FF1493" type="hidden">
4:
<button
5:
    style="width:150px; height:60px; border:2px color:#ffe6f0" class="jscolor {valueElement:null,value:<?php echo "'rgb(".$color1.")'"?>,
6:
    insetColor:'#cc0052 #ff4d94 #ff4d94 #cc0052',
7:
    backgroundColor:'#702A52',
8:
    borderColor:'#ff4d94 #666 #666 #ff4d94',
9:
    position:'right',
10:
    closable:true,
11:
    closeText: 'Close',
12:
    valueElement: 'color_value1'}">
13:
    Click on me to<br>choose color on<br> WELCOME text
14:
</button></p>
15:
<?php
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP Mjukstart
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic