Her får du hjelp til å lage hjemmeside med video. Alle verktøy og programmer vi bruker til å lage webside er gratis.
Bytte passord og glemt passord-funksjon
Har gjort ett forsøk på å sette opp ett bytte passord script her. Men får opp denne feilmeldingen: Wrong parameter count for mysql_query() - on line 13.
<?php
if (empty($_POST['old_pw']) || empty($_POST['new_pw'])) {
header("Location:/ekemember/din-profil/no-input.php");
} elseif (($_POST['old_pw']) != ($_POST['new_pw'])) {
header("Location:/ekemember/din-profil/not-same.php");
} else {
require ('/path/to/access-db-file.php');
if(!$eke_connection) { die('Beklager - En feil har oppstått - Prøv igjen senere eller ta kontakt: ' . mysql_error()); }
mysql_query('
UPDATE member_info
SET member_pw = \'%s\'
WHERE member_id = \'%d\'',
mysql_real_escape_string($_POST['new_pw']),
mysql_real_escape_string($data['member_id'])); -> (line 13)
mysql_close($eke_connection);
}
?>Hva er det som ikke stemmer?
Må først si at jeg skjønner litt hvorfor du har problemer med å lese din egen kode. Si meg, er du redd for luft i scriptene dine? :P Uansett, jeg omformaterte dem litt, slik at de skal være enklere å lese.
I det første innlegget ditt bruker du ikke sprintf(), slik du skal gjøre. Fiks det, se evt. til andre velfungerende spørringer du har for å sjekke hvordan syntax er. Regner også med at det er deg som har lagt til "-> (line 13)" i scriptet selv.
Ja, bruk brukerID (fra session) og (det gamle) passordet for å se om vedkommende har skrevet inn korrekt gammelt passord.
Lag et skript som kun kjører mail-funksjonen til din epost, type;
<?php
## Set variables
$to = 'blabla@mail.com';
## Send mail
mail($to, $subject, $message, $headers);
?>Sett opp scriptet så det sender en epost til deg selv og kjør det fra webserveren. Sjekk så om du mottar mailen (husk å sjekke i spamfolder).
Prøv også å hente $to (altså mailen) fra queryen, på den måten er ikke mailen satt med mysql_real_escape_string().
Først og fremst, du bruker sprintf()-funksjonen feil... Syntax er som jeg har vist tidligere slik;
<?php
$str = sprintf('SELECT * FROM foo WHERE bar = \'%s\'',
$bar);
?>Jo, det synes jeg du skal på alle queryer med usikrede variabler. Det er ett av mange viktige sikkerhetstiltak mot SQL-injections.
Jo, så absolutt, det er også et sikkerhetstiltak for å unngå SQL-injeksjoner.
Du skal ikke trenge å sette opp noe mail for å sende epost med PHP. Du kan sende fra obama@usa.gov om du vil. E-post er en gammel og dårlig teknologi, og derfor går det.
Jeg modifiserte scriptet ditt litt og kjørte det på mitt webhotell, da mot min GMail-adresse og det fungerte ypperlig. Sjekket du spamfolderen på Hotmailadressen etter du kjørte scriptet?
Her er min modifisering. Prøv det og se om du får epost slik du skal. Husk å sjekke spamfolder!
<?php
error_reporting(E_ALL);
// Variables
$to = 'EPOST@TIL.NOEN';
$subject = 'Tester';
$message = 'Kjører en test - test nr. 1';
$headers = 'From: Thomas Kile <thomas.kile@ekbedriften.no>' . "\r\n" .
'Reply-To: thomas.kile@ekbedriften.no' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
// send mail
if(mail($to, $subject, $message, $headers)) {
print 'Successfully sent';
} else {
print 'Some error occured, no mail was sent.';
}
?>Husk å legge inn din adresse som mottaker da.
Og du! Tusen hjertlig takk for donasjonen, Thomas. Satt veldig pris på den altså! (Pengene skal gå til PowerSupply).
Du hadde satt opp gale headers, og det var derfor mailen kom fra den adressen. Prøv mitt script, så ser du at din egen ekbbedriften-epost blir avsenderen din. :)
Ja, den generøse donasjonen fra deg kommer veldig godt med. Skal se om jeg kan finne en PSU på ebay til uka. :) Next up da blir noen disker i tilfellet diskhavari.
Jeg kjører samme script og det fungerer glimrende. Det er ikke noen tidligere mailer som er sendt med det gamle scriptet som siger gjennom da?
Skriv inn en ny $message i mitt script, slik at du ser forskjell på mailer sendt med ditt og mitt script. Si så ifra om den fortsatt sender med ekbedrif@box691.bluehost.com som avsender.
Kjør akkurat dette scriptet da:
<?php
error_reporting(E_ALL);
// Variables
$to = 'mr.henrik@gmail.com';
$subject = 'Sender en epost';
$message = 'Dette er en test fra ThomasK.';
$headers = 'From: Thomas Kile <thomas.kile@ekbedriften.no>' . "\r\n" .
'Reply-To: thomas.kile@ekbedriften.no' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
// send mail
if(mail($to, $subject, $message, $headers)) {
print 'Successfully sent';
} else {
print 'Some error occured, no mail was sent.';
}
?>Det skal sende meg en mail fra din mail, så får vi sjå.
Har nå mottatt epost fra deg, den kom slik du sier:

Jeg synes dette er ekstremt rart, for når jeg kjører eksakt samme script fra mitt webhotell hos Bluehost, så får jeg;

Prøv å endre avsenderadresse til noe annet enn domenet ditt, f.eks. "mannen@totito.no". Kanskje det går ann å sette din epost fra mitt webhotell, siden jeg sender fra mitt domene og ikke ditt.
Det kan hende Bluehost har lagt inn noe sikkerhet her, jeg er usikker. Prøv å se om du får en annen avsender når du definerer en epost som ikke hører til det domenet du kjører scriptet fra.
Det var et wild guess fra min side, og et rimelig patetisk forsøk på å sikre autentisk epost fra Bluehost sin side, synes jeg.
Vet ikke sikkert, men dette kan ha sammenheng med at domenet ditt har DNS hos Domeneshop og kun er pekt til Bluehost.
Var jeg deg ville jeg byttet DNS til Bluehost (bla deg ned til "Endre navnetjenere hos Domeneshop"), slik at de tar seg av alt. (Mao, ikke bare peke domenet, slik jeg vet at du gjør nå). Nå betaler du vel kr. 90 per år for at Domeneshop skal ta seg av mailen din, dette gjør Bluehost gratis for deg.
Gjør dette, vent på at DNS er oppdatert og prøv igjen. PS: Endring av DNS kan ta sin tid. Løs andre problemer i mellomtiden.
Nestegang du får faktura fra domeneshop på mail, så sier du at du ikke skal ha mailtjenesten lenger. Da sender de deg en ny invoice hvor du kun faktureres for domenet.
Tidligere når du har gått inn på domenet ditt, så har en forespørsel blitt sendt til Domeneshop sine DNS. Disse har sagt at domen.com og www.domene.com er pekt mot den delte IP-adressen du bruker hos Bluehost.
Nå blir det slik at de som går inn på domenet ditt spør DNS hos Bluehost, ikke Domeneshop.
Det gir deg enklere tilgang selvsfølgelig, siden ting kun trenger å endres hos 1 host, f.eks. hvis du skal sette opp subdomener som blogg.domene.com el.l. I tillegg vil ting gå litt fortere siden alt gjøres hos Bluehost.
Si ifra om denne endringen gjorde at mailen gikk gjennom da. Si også ifra om den fortsatt havner i spam eller ei. (Dette kan ha med rDNS å gjøre), men mer om det når alt er oppdatert.
Det kan ta en god stund med no-domener. Har hørt opplevd timer og et par dager. Mener du får epost fra NORID (til mailen du skrev inn da du kjøpte domenet) når de har foretatt endringene, så du slipper å sitte å refreshe, hehe.
Som jeg sa; løs heller noen andre problemer i mellomtiden. :)
Snakker du da om hvilken nettleser du bruker når du caller scriptet, eller når du sjekker mailen hos Hotmail?
Bruk av nettleser skal, såvidt meg bekjent, ikke ha betydning for hvordan mail håndteres av mailserver på webhotell eller tredjeparts mailservere (i dette tilfellet Hotmails servere).
Mail merkes som spam pga rDNS
Det som gjerne er problemet er såkalt rDNS. Nå har ikke jeg sjekket headerne på mailene i sin helhet, men den vanligste grunnen til at mail havner i spam er fordi rDNS ikke er konfigurert riktig. Ikke tenk så mye på det enda, det første som må til her er at du får sendt med din egen epost som avsender.
Si du hadde satt opp en mailserver hjemme da. Så bruker du denne til å sende en epost til en eller annen hotmail adresse.
Det som skjer da er at mailserveren din sier "Jeg sender mail fra domenet mail.domene.com". Hotmail sin server ser denne beskjeden, samt. IPen hvor mailserveren står. Deretter slår Hotmail opp IPen din, og ser at den ikke peker til "mail.domene.com" slik mailserveren din hevder. I et sånt tilfelle vil Hotmail kjapt merke eposten som spam.
Det er ikke deg som styrer hva rDNS skal være. Det er det "eieren" av IPen som bestemmer. F.eks. er hosten til din IP noe sånt som "customer14-2933-telenor.no" elns, ikke mail.domene.com.
Men uansett - ikke heng deg opp i dette nå. Løs én ting av gangen og vent til DNS er i orden først. Sjekket nettopp nameserverne dine, og de er ikke oppdatert enda. Du kan sjekke dette hos NORID med en enkel ZoneCheck på dittdomene.no.
Ok, prøv å opprette en epost som er identisk til den du sender fra da, mulig det vil fungere.
Når du har laget epostadressen sender du først en mail fra hotmail til mailadressen og fra mailadressen til hotmail. På den måten ser du om eposten både sender og mottar epost.
Hvis det fungerer så kjører du igjen scriptet ditt for å se hvorvidt det fungerer.
Fikk du sendt fra mail fra PHP med din epost etter du opprettet en epostkonto for den aktuelle e-postadressen?
Greit å vite for egen del, og eventuelt dersom andre møter samme problemstilling.


Ville bare legge til at dette fungerer helt flott da...
<?phpif (empty($_POST['old_pw']) || empty($_POST['new_pw'])) {
header("Location:/ekemember/din-profil/no-input.php");
} elseif (($_POST['old_pw']) != ($_POST['new_pw'])) {
header("Location:/ekemember/din-profil/not-same.php");
} else {
require ('/path/to/access-db-file.php');
if(!$eke_connection) {
die('Beklager - En feil har oppstått - Prøv igjen senere eller ta kontakt: ' . mysql_error());
}
mysql_query("
UPDATE member_info
SET member_pw = '$_POST[new_pw]'
WHERE member_id = '$data[member_id]'");
mysql_close($eke_connection);
}
?>
Vil også legge til at jeg glemte hovedintensjonen min.
Jeg ville at brukeren skulle legge inn gammelt passord for validering/godkjenning av endring. Men endte opp med å sjekke att begge feltene hadde likt innhold.
Skal se om jeg får den på plass også.
EDIT: Fikk ikke det til helt. har på følelsen av at jeg må lage en spørring til databasen om gammelt passord og sjekke om de stemmer overens med inputten til brukeren.
med hilsen
Thomas Kile