Új hozzászólás Aktív témák
-
faster
nagyúr
Ennek a htmlnek minimum így kéne kinéznie:
<form action=''ellenorzes.php'' target=''_blank'' method=''post''>
<tr><td align=''left'' valign=''top''>
<b>NÉV:</b><br>
<input type=''text'' name=''nev'' value='''' maxlenght=''8''> <br><br>
<b>JELSZÓ:</b><br>
<input type=''password'' name=''jelszo'' value='''' maxlenght=''8''>
<input type=''submit'' name=''kuld'' value=''OK''>
</td></tr>
</form>
Az egybecsúszást úgy értettem, hogy az action attribútumot elkezdted idézőjellel, de nem zártad le, a targetnél pont fordítva.
Kifejezetten nehéz hibáktól hemzsegő kódban megtalálni a valódi hibát.
Ez is fölöslegesen van elbonyolítva:
$ilyennincs=''$nev'';
$lekeres2 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$ilyennincs' '');
if (mysql_num_rows($lekeres2) != 0)
{
while ( $row = mysql_fetch_array( $lekeres2 ) )
{
print ''van már ilyen név'';
}
}
else //minden ezen az ágon fut tovább, ha nincs ilyen név még.
Kezdjük azzal, hogy
$ilyennincs = $nev; // tök fölösleges ide az idézőjel (már másoknál is megfigyeltem, hogy így csinálja ($ilyennincs=''$nev'';) , de fel nem tudom fogni, hogy miért)
elég ennyi is:
$lekeres2 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$nev' '');
if (mysql_num_rows($lekeres2) != 0)
{
print ''van már ilyen név'';
}
else //minden ezen az ágon fut tovább, ha nincs ilyen név még.
Szóval, beírsz a formon pl. egy g betűt, és az nem lesz jó. Kiírásnál csak egy g-t éátsz, az adatbázisban is van egy g nevű user, mégsem találja meg?Biztso csak egy g betű kerül a $nev nevű változóba? Egy ilyen:
echo strlen($nev);
1-et kell, hogy kiírjon (1 db karakter esetén), ez is stimmel?
[Szerkesztve] -
Zoltán
őstag
Az idézőjelet, mit fölöslegesnek írsz Én is annak tartom, nem is írtam eredetileg oda, de már mindenhogyan próbáltam. Ha egy darab ''g'' (vagy akármi más) nevet adok meg a fenti űrlapon, akkor jól ki is írja, hogy ''g'' és az echo strlen($nev); is ''1'' -et ír ki. Tehát biztos, hogy jó. A HTML űrlapot is kicseréltem az általad javasoltra. A php kódot is egyszerűsítettem, ahogy írtad. De továbbra is ugyanaz a helyzet: Tehát, ha megadom neki konkrétan, hogy ''g'' az amit ellenőrizni kell, hogy van-e, akkor jól megy, de ha ez a ''g'' a $nev változóban van, akkor úgy veszi ellenőrzés után, hogy nincs még ilyen és enged tovább az else ágon. Föl nem foghatom.
-
Zoltán
őstag
Itt egy táblázat, hogy jelenleg mi van az adatbázisban. Jól látszik, hogy van egy raklap ''g'' meg ''f'' nevű user. Bővebben: link
-
faster
nagyúr
Tehát, ha jól értem, így nem találja meg a rekordot:
$lekeres2 = mysql_query(''SELECT * FROM probatabla WHERE nev = '$nev' '');
és ez is igaz:
if($nev == ''g'') print ''Ebbe téllen gé van!'';
így viszont megtalálja:
$lekeres2 = mysql_query(''SELECT * FROM probatabla WHERE nev = 'g' '');
mert akkor ez voodoo mágia. -
Zoltán
őstag
Pontosan.
MOD: Várjunk csak! Most akkor sem találja meg, ha konkrétam megadom a ''g'' -t!!!! Eddig emlékszem, jól ment, ha csak az ellenőrzést futtattam le , és akkor konkrétam megadtam a ''g''-t. Tehát akkor még ezt az ellenorző részt nem raktam be az ellenorzes.php -ba, így ott magában, nem tudtam változóval kipróbálni. TEhát nem az a gond, hogy változóban van a ''g'', hanem az, hogy beillezstettem ebbe a teljes PHP kódba. Mert önmagában működött, fentebb magyaráztátok el, hogy hogyan kell és jó is volt. Aztán illesztettem be a teljes PHP kódba, tehát az ellenorzes.php -be.
[Szerkesztve] -
faster
nagyúr
Persze azt hozzátenném, hogy pl. ezt a programrészt:
$kapcsolat = mysql_connect($sqlhost, $sqluser, $sqlpass) or die(''Nem lehet csatlakozni: ''.mysql_error().''<br>'');
print ''Sikerült a kapcsolat letrehozasa<br>'';
mysql_select_db($database) or die(''Nem lehet megnyitni az adatbázist: ''.mysql_error().''<br>'');
print ''Sikerült kiválasztani a ''.$database.'' adatbázist<br>'';
átraktam a program elejére, mert nem csak a beszúrásnál kell kapcsolódni az adatbázishoz, hanem a kiolvasás-ellenőrzés előtt is.
[Szerkesztve] -
Zoltán
őstag
index3.php (ebben van a tábla) forrása: (ebben működik a $lekeres2 !!!!!!)
<?php
$database=''db_ak48'';
$sqlhost=''localhost'';
$sqluser=''ak48'';
$sqlpass=''37Ws8wHH2QdRg'';
$ujtabla = ''CREATE TABLE `probatabla` (''
. '' `id` INT(10) NOT NULL AUTO_INCREMENT, ''
. '' `nev` VARCHAR(8) NOT NULL, ''
. '' `jelszo` VARCHAR(10) NOT NULL, ''
. '' `email` VARCHAR(250) NOT NULL, ''
. '' `datum` VARCHAR(20) NOT NULL, ''
. '' `ip` VARCHAR(250) NOT NULL, ''
. '' PRIMARY KEY (`id`)''
. '' )'';
$nev = ''Belapapa'';
$jelszo = ''rugoka'';
$email = ''berugos@franconmail.hu'';
$datum = ''2004.11.27. - 18:10'';
$ip = ''111.222.333.444'';
$parancs = ''INSERT INTO `probatabla` ''
. ''(`nev`, `jelszo`, `email`, `datum`, `ip`) ''
. ''VALUES ''
. ''('$nev', '$jelszo', '$email', '$datum', '$ip')'';
$kapcsolat = mysql_connect($sqlhost, $sqluser, $sqlpass) or die(''Nem lehet csatlakozni: ''.mysql_error().''<br>'');
print ''Sikerült a kapcsolat letrehozasa<br>'';
mysql_select_db($database) or die(''Nem lehet megnyitni az adatbázist: ''.mysql_error().''<br>'');
print ''Sikerült kiválasztani a ''.$database.'' adatbázist<br>'';
$nev = ''Belapapa'';
$sorlekerdez = mysql_query(''SELECT * FROM `probatabla` WHERE nev like '$nev' '') or die(''Hiba a lekerdezeskor: ''.mysql_error().''<br>'');
print ''Sikerült lekerdezni az adatokat az adatbazisbol<br>'';
$sorok= mysql_num_rows($sorlekerdez) or die(''Itt a bibi, valami nem jo'');
print ''Sorok szama: ''.$sorok;
$email= ''aaa@fff.pl'';
$sorlekerdez2 = mysql_query(''SELECT * FROM `probatabla` WHERE email like '$email' '') or die(''Hiba a lekerdezeskor: ''.mysql_error().''<br>'');
print ''Sikerült lekerdezni az adatokat az adatbazisbol<br>'';
$sorok2= mysql_num_rows($sorlekerdez2) or die(''Itt a bibi, valami nem jo'');
print '' 'aaa@fff.pl' e-mailek szama: ''.$sorok2;
$ilyennincs=''g'';
$lekeres2 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$ilyennincs' '');
if (mysql_num_rows($lekeres2) != 0)
{
while ( $row = mysql_fetch_array( $lekeres2 ) )
{
print $row[''nev'';
}
}
else
{
print ''<br>nincs még ilyen név0'';
}
$lekeres = mysql_query( ''SELECT * FROM probatabla
ORDER BY id DESC LIMIT 0,100 '');
while ($egysor = mysql_fetch_array( $lekeres ) )
{
$id=$egysor[id];
$nev=$egysor[nev];
$jelszo=$egysor[jelszo];
$datum=$egysor[datum];
$email=$egysor[email];
$ip=$egysor[ip];
print (''<br><table width=750 cellpadding=4 cellspacing=0
border=1 bordercolor=#000000>
<tr>
<td align=left>'');
print (''
<b>$id</b></td>
<td align=center><b>$nev</td>
<td align=center>
<b>$datum</b></td>
<td align=center>$jelszo</td>
<td align=center>$email</td>
<td align=center>$ip</td>
</tr>'');
}
print ''</table>'';
$ilyennincs=''ilyennincs'';
$lekeres2 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$ilyennincs' '');
if ($lekeres2 ='''')
{
print (''bocs, ilyen nincs'');
}
mysql_close($kapcsolat);
?> -
faster
nagyúr
Szivesen. Akkor viszont a g-betűt a programba beírva se működhetett ez a programrész.
Egyébként fejlesztés idejére érdemes a mysql_query helyett egy saját függvénnyel dolgozni, ami kiírja az adatbázis hibákat pl.:
sql.php:
<?
function sql_query($query) {
$res = mysql_query($query);
if(mysql_errno()) {
echo mysql_error().''<br>'';
echo ''<strong>$query</strong>'';
}
else {
return $res;
}
}
?>
a programban pedig:
...
require_once(''sql.php'');
...
$lekerdezes = sql_query(''...'');
[Szerkesztve] -
Zoltán
őstag
válasz steveetm #114 üzenetére
Igen, mostmár megvan. CSak azért nem vettem ezt észre, mert eddig jól ment és mikor átraktam abba a progiba, ahol előtte nincs aadatbáziscsatlakozás, akkor egy más változtatás is volt (változó lett megadva konkrét érték helyett) és arra gyanakodtam. Illetve: mi a fenéért nem szól, hogy nem tud ellenőrizni, mert nincs kapcsolat az adatbázissal???!!!!??? Ehelyett miért kell azt csinálni, hogy úgytesz mintha ellenőrzött volna, és annak megfelelően fut tovább az egyik ágon. Ne fusson semerre, ha rossz!!
-
faster
nagyúr
No problem, én is lusta lennék minden egyes lekérdezéshez még egy plussz mysql_error-t rakni, aztán kiszedegetni. Én is elkövettem már ezeket a hibákat.
Csinálj egy inlcude fájlt a gyakran használt funkcióknak, ilyen pl. az adatbázis kapcsolódás, vagy ez az sql_query, és include-old be minden scripted elejére, akkor nem lesznek ilyen problémák, hogy oda nem raksz mysql_error-t, ahol hibát vétesz (általában senki nem tudja előre, hol fog hibát véteni )
include.php:
<?
sql_connect() {
$server = ''localhost'';
$username = ..
...
mysql_connect(...);
mysql_select_db();
}
sql_query() {
...
}
?>
prog.php:
<?
require_once(''include.php'');
sql_connect();
...
$lekerdezes = sql_query(...);
?>
Én így szoktam csinálni.
[Szerkesztve] -
Edguy
csendes tag
Mi itt a hiba :
<?php
include (''connect.php'');
CREATE TABLE tablaneve - itt van a gond
(
azonosito INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (azonosito),
nev VARCHAR (8),
jelszo VARCHAR (10),
email VARCHAR (250),
datum VARCHAR (20),
ip VARCHAR (250));
?>
Ezt az üzenetet kapom : Parse error: parse error, unexpected T_STRING -
VladimirR
nagyúr
az, hogy a create table nem php, hanem sql utasitas, s mint ilyet, csak a megfelelelo fuggvenyekkel tudod meghivni
<?php
$query = ''CREATE TABLE tablaneve ( ''
. ''azonosito INT NOT NULL AUTO_INCREMENT, ''
. ''PRIMARY KEY (azonosito), ''
. ''nev VARCHAR (8), ''
. ''jelszo VARCHAR (10), ''
. ''email VARCHAR (250), ''
. ''datum VARCHAR (20), ''
. ''ip VARCHAR (250) ''.
. ''); '';
mysql_query($query); // <-- ez fogja majd tenylegesen vegrehalytani a lekerdezest
?>
[Szerkesztve] -
VladimirR
nagyúr
-
VladimirR
nagyúr
<?php
$db = mysql_connect(''localhost'', ''root'', ''jelszo'') OR die (''Connection Error to Server''); // itt kapcsolodsz az adatbazis szerverhez, a localhost, az az, hogy a sajat gepeden van az adatbazis, a root, az a felhasznalo, a jelszo meg a root felhasznalohoz tartozo jelszo -- ezeket az ertekeket csereld le a Nalad hasznalatosokhoz
mysql_select_db(''adatbazis'') OR die(''Connection Error to Database''); // itt valasztod ki, hogy melyik adatbazist kivanod hasznalni
$query = ''CREATE TABLE tablaneve ( ''
. ''azonosito INT NOT NULL AUTO_INCREMENT, ''
. ''PRIMARY KEY (azonosito), ''
. ''nev VARCHAR (8), ''
. ''jelszo VARCHAR (10), ''
. ''email VARCHAR (250), ''
. ''datum VARCHAR (20), ''
. ''ip VARCHAR (250) ''
. ''); ''; // ez a lekerdezes maga, amit vegre kivansz hajtani
mysql_query($query, $db); // ez pedig a lekerdezes vegrehalytasa, a fenti kapcsolaton
?> -
faster
nagyúr
A php és a mysql két külön program. A mysql az adatbázis kezelő, a php az alkalmazás szerver része. Természetesen adattáblát az adatbáziskezelőben kell létrehozni, ezt kétféleképen lehet:
1. belépsz az adatbázis szerver konzoljára, és létrehozod a megfelelő sql utasításokkal a táblát
2. php-ből hozzákapcsolódsz az adatbázis szerverhez, és úgy adod ki a megfelelő sql parancsokat. Ez az eset lett kitárgyalva. -
Zoltán
őstag
A connect-áló függvényt értem, de a function sql_query($query) függvényt nem. Mondjuk mindegy, most nem sürgős. Jelenleg van egy ilyen connect.php filem:
<?php
$database=''db_ak48'';
$sqlhost=''localhost'';
$sqluser=''ak48'';
$sqlpass=''.....'';
$kapcsolat = mysql_connect($sqlhost, $sqluser, $sqlpass) or die(''Nem lehet csatlakozni: ''.mysql_error().''<br>'');
print ''Sikerült a kapcsolat letrehozasa<br>'';
mysql_select_db($database) or die(''Nem lehet megnyitni az adatbázist: ''.mysql_error().''<br>'');
print ''Sikerült kiválasztani a ''.$database.'' adatbázist<br>'';
?>
és ezt hívom be az akarmi.php file-ban, így:
include (''connect.php''); -
faster
nagyúr
Mi nem érthető az sql_query függvényen? végrehajt egy mysql_query-t, aztán pedig megvizsgálja, hogy történt-e hiba a query végrehajtásakor, és ha történt, akkor kiírja az outputra a hiba szövegét.
Magára az include-olásra pedig azt tudom mondani, hogy így is megoldható a kódújrafelhasználás, de csak akkor, ha csak egyetlen funkció van, amit több fájlban akarsz felhasználni. Ha már több ilyen van, akkor persz meg lehet oldani úgy is, hogy minden egyes kódrészletet külön fájba raksz, és aztán azt include-olod be, amelyikre szükséged van, de ez egy idő után sok fájlhoz vezet, nem is beszélve arról, hogy az egyik kódrészletben nehezen lehet felhasználni egy másik kódrészletet.
Ráadásul figyelni kell arra, hogy az include-olt kódban nehogy véletlenül egy olyan nevű változót használj valamire, ami az őt behívó programban már valami egész más funkcióra használsz. Sokkal célszerűbb a függvények (function) használata, mert ez megoldja ezt a problémát is. -
loszerafin
senior tag
Elvi hiba:
Mi a fenének akarsz php-ból táblát készíteni?
mysql konzollal sokkal egyszerűbb.
Vagy inkább egy szöveges fájlba írd be a táblakészítést, egy másikba a tábla törlést, egy harmadikba a véletlen adatokkal való feltöltést (sql parancsokkal).
Akkor már a php-re csak a látványos munka marad (pl. listázás, módosítás) -
L3zl13
nagyúr
válasz loszerafin #132 üzenetére
Szerencsére a PHPmyadmin készítői nem gondolkodtak ugyanígy...
Aki hülye, haljon meg!
-
Zoltán
őstag
Na, akkor (a fentieknek köszönhetően) van már egy szép kis regisztrációs oldalam. De most a beléptetéssel akadt problémám: Ellenőrzöm, hogy van-e az adatbázisban ilyen név, és azt is, hogy ilyen jelszó van-e, de azt nem tudom ellenőrizni, hogy ezek összetartoznak-e. Hogyan kell?
<?php
$jelszo= $_POST['jelszo';
$nev = $_POST['nev';
include (''connect.php'');
$lekeres1 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$nev' '');
if (mysql_num_rows($lekeres1) == 0)
{
while ( $row = mysql_fetch_array( $lekeres1 ) )
{
print ''Név/jelszó nem stimmel!'';
}
print ''Név/jelszó nem stimmel!'';
}
else
{
$lekeres2 = mysql_query(''SELECT * FROM probatabla
WHERE jelszo= '$jelszo' '');
if (mysql_num_rows($lekeres2) == 0)
{
while ( $row = mysql_fetch_array( $lekeres2 ) )
{
print ''Rossz a jelszó!'';
}
print ''Rossz a jelszó!'';
}
else
{
header ( ''Location:feltolto.php'' );
exit();
}
}
?>
Én arra gondoltam, hogy így, de nem tudom helyes-e:
$lekeres1 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$nev' AND jelszo = '$jelszo' '');
if (mysql_num_rows($lekeres1) == 0)
{.......
[Szerkesztve] -
L3zl13
nagyúr
A legszebb megoldás, ha egy lekérdezésben adod meg a két feltételt.
$lekeres1 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$nev' and jelszo= '$jelszo' '');
Így csak akkor lesz találat, ha a jelszó és a login is egyezik. Neked pedig pont erre van szükséged.Aki hülye, haljon meg!
-
Zoltán
őstag
Oké, a jelszó és felhasználói név birtokában a gyerkőc belépett az adott oldalra. De ugye aki csak egyszerűen begépeli az url-t, az is belépett oda... Egyébként úgy tapasztalom, hogy sok weboldalon nem figyelnek erre. Tehát csak becopypastézom az url-t és nem kell belépben. Ilyen pl. az az oldal is, ahonnan most tanulom a mysql. (Mondjuk itt talán többet tanulok, mint ott...)
-
faster
nagyúr
Hát ez előfordul, bár azért szvsz a legtöbb oldalon figyelnek erre. Egyébként többek közt erre való a session kezelés, hogy ne lehessen csak úgy belépni akármilyen URL-re. Amióta a PHP-ben beépítve van a session kezelés, viszonylag egyszerű ezt a problémát orvosolni.
[Szerkesztve] -
VladimirR
nagyúr
olyat lehet csinalni, hogy van egy datetime mezo, de lekerdezeskor csak a honapot es napot mutassa (pl.: 05-25), vagy ezt utolag kell megoldanom, a kapott adatok vagdosgatasaval?
koszonom -
faster
nagyúr
válasz loszerafin #146 üzenetére
Én is használtam már php-t DDL utasításokhoz, nincs mindenhol mysql konzol.
Új hozzászólás Aktív témák
- LG OLED55C19LA 1 ÉV GYÁRI GARANCIA
- Újszerű (AB) Macbook Pro 14" M1 Pro 512/ 16GB USA
- iPad 9th. 64GB Wifi/Mint Az Új/2025.03.02.Apple Gar./Akku 100%/p3389/
- BESZÁMÍTÁS! Lenovo Thinkcentre M720S i5 16GB 1TB SSD számítógép garanciával hibátlan működéssel
- BESZÁMÍTÁS! HP Omen 15 15 FHD Gamer notebook - i7 10750H 16GB RAM 1TB SSD RTX 2070 8GB WIN
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen