Email címek összehasonlítása
Sziasztok!
Feliratkozó panelt készítek az a feliratkozott email címeket MySQL adatbázisban tárolom. Azt szeretném, hogy ha valaki már feliratkozott egy email címmel akkor azt ne tudja megtenni még egyszer. A gondom az, hogy eltárolom változóban az éppen aktuális email címet és az adatbázisból kinyert email címet. De ahogy megfigyeltem az adatbázisból kinyert változó nem kap értéket így az összehasonlítás nem működik.
Előre is köszönöm a segítségeteket és a válaszaitokat!utóirat: Nem vagyok még igazán profi a témában, csak tanulom a nyelvet :-).
■ Feliratkozó panelt készítek az a feliratkozott email címeket MySQL adatbázisban tárolom. Azt szeretném, hogy ha valaki már feliratkozott egy email címmel akkor azt ne tudja megtenni még egyszer. A gondom az, hogy eltárolom változóban az éppen aktuális email címet és az adatbázisból kinyert email címet. De ahogy megfigyeltem az adatbázisból kinyert változó nem kap értéket így az összehasonlítás nem működik.
Előre is köszönöm a segítségeteket és a válaszaitokat!
<?php
session_start();
header("Content-Type: text/html; charset=utf-8");
if (isset($_POST["subscribe"])){
if (strtolower($_POST["captcha_code"]) !== $_SESSION["captcha"]){
echo "Sajnáljuk de, hibás biztonsági kódot adtál meg, így a feliratkozásod nem sikerült. " . "<br>\n" . "Visszairányítunk a Főoldalra...";
header("HTTP/1.1 301 Moved Permanently");
header("refresh: 5; url = ../fooldal.php#subscriptionRequest");
exit; //Captcha ellenőrzés.
} else {
echo "Helyes biztonsági kód!" . "<br>\n";
$databaseHost = 'localhost'; //A tárhelyen nem ezek az adatok vannak!!!
$databaseUser = 'root';
$databasePass = 'stereo92';
$databaseName = 'nargaron';
$connection = mysqli_connect($databaseHost, $databaseUser, $databasePass, $databaseName)or die
('...nem sikerült, mert nem tudtunk csatlakozni az adatbázishoz.' . "<br>\n" . 'Megkérünk, hogy írj egy hibajelentést a Webmesterünknek a Kontakt oldalon.' . "<br>\n" . 'Átirányítunk a Főoldalra...');
$connection->query('SET NAMES utf8');
$mail_to = $_POST['email'];
$sql = "SELECT email FROM subscription WHERE email='" . $mail_to . "'";
$query = $connection->query($sql);
$result = $query->fetch_assoc();
/*echo $result;
echo $mail_to;*/
if ($result == $mail_to) {
echo "Úgytűnik ezzel az email címmel (" . "<strong>" . $mail_to . "</strong>" . ") már regisztráltak. Nem te voltál :-)? Ha nem, akkor megkérünk, hogy írj egy hibajelentést a Webmesterünknek." . "<br>\n" . "Visszairányítunk a Főoldalra...";
header("HTTP/1.1 301 Moved Permanently");
header("refresh: 5; url = ../fooldal.php#subscriptionRequest");
$connection->close();
exit;
} else {
$connection->close();
$subject = 'Närgaron - Feliratkozás visszaigazolása' . "\n";
$body_message = 'Feladó neve: Närgaron Webmester' . "\n";
$body_message .= 'Feladó email címe: noreply##kukac##nargaron.hu' . "\n";
$body_message .= 'Üzenet: ' . "<br>\n" .
'Kedves Feliratkozó!' . "<br>\n"
. "\n" .
'Ezúton is szeretnénk megköszönni a feliratkozásodat. Reméljük, hogy tartalmas hírekkel tudunk szólgálni. Ám még nem vagyunk készen. Ha mégsem szeretnél feliratkozni zenekarunk hírlevelére akkor ezt a levelet, hagyd figyelmen kívül. Azonban ha valóban szeretnél feliratkozni akkor az alábbi linkre kell kattintanod.' . "<br>\n" . "<br>\n" .
'http://www.nargaron.hu/hu/backend/feliratkozas.php' . "\n" . "<br>\n" .
'Köszönettel,' . "\n" .
'Närgaron webmestere';
$mail = mail($mail_to, $subject, $body_message);
}
if ($mail) {
echo "A megadott email címedre küldtünk egy visszaigazoló emailt! Köszönjük!" . "<br>\n" . "Visszairányítunk a Főoldalra...";
header("HTTP/1.1 301 Moved Permanently");
header("refresh: 8; url = ../fooldal.php#subscriptionRequest");
exit;
} else {
echo "A feliratkozás nem sikerült!" . "<br>\n" . " Ha ez a hiba nem szűnik meg, kérlek írj egy hibajelentést a Kontakt oldalunkon. Köszönjük!" . "<br>\n" . "Visszairányítunk a Főoldalra...";
;
header("HTTP/1.1 301 Moved Permanently");
header("refresh: 8; url = ../fooldal.php#subscriptionRequest");
exit;
exit;
}}
?>
array mysqli_result::fetch_assoc ( void )
Ennek a függvénynek az eredménye nem egy darab string, hanem egy asszociatív tömb.
Köszi! Beillesztettem a
Beillesztettem a kódot, amit írtál 's most NULL értéket adott vissza... ez mitől lehet?
Most így néz ki a kódom:
if (!is_null(...
És ennek megfelelően alakítsd a feltételt.
(az előző hozzászólásomban belinkelt oldalon a mintapéldák is sokat segítenek ám:)
Ha új email címet adok meg
debugolás...
Beillesztettem az általad írt
$sql kiírás esetén:
Helyes biztonsági kód!
SELECT email FROM subscription WHERE email='info##kukac##nargaron.hu'array(1) { ["email"]=> string(16) "info##kukac##nargaron.hu" } A megadott email címedre küldtünk egy visszaigazoló emailt! Köszönjük!
Visszairányítunk a Főoldalra...
$query kiírás esetén:
Helyes biztonsági kód!
Catchable fatal error: Object of class mysqli_result could not be converted to string in D:\Programs\XAMPP\htdocs\Nargaron-weblap-(PHP)\hu\backend\kuld-feliratkozas.php on line 56
Itt a program nem is futott tovább. Ha jól veszem ki nem tudja átalakítani a tömböt Stringgé. Vagy tévedek?
null ? tömb
Ha nem ismétlődő email
Egy olyat megpróbáltam, hogy a $query-t var_dumpoltam és azt hasonlítottam össze a $mail_to-val. A program lefutott, de nem hibásan.
Hasonló email cím esetén:
Helyes biztonsági kód!
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } A megadott email címedre küldtünk egy visszaigazoló emailt! Köszönjük!
Visszairányítunk a Főoldalra...
Másik email cím esetén:
Helyes biztonsági kód!
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } A megadott email címedre küldtünk egy visszaigazoló emailt! Köszönjük!
Visszairányítunk a Főoldalra...
Ezeket már nem igazán tudom értelmezni. Nekem úgy tűnik, mintha semminek nem lenne értéke...
találatok száma
0
találatot adott vissza, ezért ha lekérdezed az első sort a találatok közül, akkornull
-t kapsz.Itt a num_rows értékéből
num_rows
értékéből látszik, hogy az egyik esetben van egyező sor, míg a másikban nincs. Ebből is látszik, hogy ha megadod a lekérdezésben az email-címet, akkor felesleges erre még egyszer tesztelni php oldalon is, hanem elegendő lehet amysqli_result
objektumnum_rows
mezőjét megnézni, ami ha nagyobb mint nulla, akkor van találat, ellenkező esetben meg még nem szerepel az adott cím az adatbázisban.Sikerült, köszönöm szépen a
Végül ez lett a megoldás:
Új problémával kerültem
Notice: Trying to get property of non-object in /home/nargnhu1/public_html/hu/backend/kuld-feliratkozas.php on line 59
Így néz ki az érintett forráskódom:
Előre is köszi a segítségeteket!
Jó kérdés
A hibaüzi azt jelenti, hogy a
$query
erőforrás nem objektum. Hogy miért, az jó kérdés, kéne vadászni egy SQL error-t is (pl.echo(mysqli_error($connection));
), biztos van valami hiba a lekérdezésben, emiatt a$query = null
, tehát nem objektum.Hogy otthon miért műxik, kérdezd az otthoni szervert... Ilyenkor érdemes az összes beállításbeli különbséget végigbogarászni. Az SQL szerver verzió legalább azonos?
Viszont ha valódiak, akkor
Jogosultságok
Köszi a segítséget! Egyébként voltam olyan hülye és sajnos valódi adatok voltak, nem figyeltem őket. De már megváltoztattam! :)
Még egyszer köszi a segítséget!
A lényeg, hogy meg van a hiba,
Szóval jelszóval vigyázz legközelebb, de szerintem most megtanultad egy életre... :)
Örülök, hogy csak beállítási gond volt, igyekszem is megjegyezni, mert közvetlenül erre is gondolhattam volna. Ezért jó, ha a megoldást is kiírod, köszi én is.
Nincs mit :)!