Új hozzászólás Aktív témák
-
Zoltán
őstag
Szóval itt tartok:
<?php
$database=''db_ak48'';
$sqlhost=''localhost'';
$sqluser=''ak48'';
$sqlpass=''törölve'';
$kapcsolat=mysql_connect($sqlhost, $sqluser, $sqlpass);
if (! $kapcsolat) die (''Nem lehet csatlakozni'');
print ''Sikerült a kapcsolat!'';
mysql_select_db($database)
or die (''Nem lehet megnyitni az adatbázist:''.mysql_error() );
print ''Sikerült kiválasztani a $database adatbázist!'';
mysql_query(
CREATE TABLE elsotablam //ez lesz itt a tábla neve
(
azonosito INT NOT NULL AUTO_INCREMENT, //INT-egész szám
PRIMARY KEY (azonosito),
nev VARCHAR (8),
jelszo VARCHAR (10),
email VARCHAR (250),
datum VARCHAR (20),
ip VARCHAR (250));
)
);
mysql_close ($kapcsolat)
?>
Kedves Hozzáértők: Mondjátok el légyszi, hogy hogyan kellene helyesen használni a my_sql_query- t! Kökő!
[Szerkesztve] -
-
muad_dib
tag
Azért lehet, mert ugyan összerakod a $parancsot, de nem annyira futtatod le
jah, amúgy javaslat: ugyan nem kötelező de azért rakd csak ki a ;-t a mysql parancsok után...
okos php doksi
Bővebben: link
[Szerkesztve]Hogyan nősül a hálózati játék fanatikus? - Holtomiglan holtodiglan...
-
muad_dib
tag
-
muad_dib
tag
Hmmm...
erdekes.
Ha nem countot nezel meg akkor is vacak?
azaz
$result=mysql_query(''select nev, ip from probatabla;'');
while($retval=mysql_fetch_array($result){
echo($retval->nev.'' ''.$retval->ip);
}
ha ez se ad semmit akko nincs semmi a tabladba az fix...
lehet meg tranzakcio problema esetleg, mysql conf tol fugg...
jah, ha select * -ot irsz, akkor arra vigyazz, hogy a php egy helyen betumeret erzekeny, espedig az objektumoknal,,, azaz, ha a tablaban a mezo neve 'kutya'
akkor $retval->kutya, es nem $retval->Kutya
viszont, ha select akarmi as AkArMi, akkor meg $result->AkArMi ami neked kell....
probalkozz olyannal is, hogy a mysql_query utan nyomsz egy echo(mysql_error()); -t
ami jol megmondja ha esetleg vmit elszurtalHogyan nősül a hálózati játék fanatikus? - Holtomiglan holtodiglan...
-
muad_dib
tag
-
muad_dib
tag
aham... arra gyanakszom, hogy eleve a query hibat ad vissza - kvazi nem letezik a tabla, ezert a fetch elkuld a fenebe... szoval
if($result=mysql_query('select....;'){
while(....){
....
}
} else echo('lekerdezes nem faja');Hogyan nősül a hálózati játék fanatikus? - Holtomiglan holtodiglan...
-
muad_dib
tag
ahham.
bocsesz a kimaradasert, csak leleptem melobol... most meg menek sore
amit javaslok: a primary key az utolso legyen (marmint a prmary key 'szo') nem hiszem h ez a baj, de mar nem tudok mire gondolni. Kozvetlenul a create utan irass ki egy mysql errort, illetve vizsgald le a mysql query visszateresi erteket... az is lehet, h jogosultsag gubanc, de az errornak meg kell mondani... ha ez se megy, akkor:
mysql_query(''start transaction;'');
mysql_query(''tequeryd'');
mysql_query(''commit;'');
de ezt hagyd utoljara... valami furan lehet konfolva nalad vagy nemtomHogyan nősül a hálózati játék fanatikus? - Holtomiglan holtodiglan...
-
VladimirR
nagyúr
na, igy probald meg, ez nalam mukodik:
<?php
$database=''test'';
$sqlhost=''localhost'';
$sqluser=''root'';
$sqlpass='''';
$ujtabla = ''CREATE TABLE `probatabla` (''
. '' `id` INT(10) NOT NULL, ''
. '' `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 = ''Anna'';
$jelszo = ''bingo777'';
$email = ''annana@franconmail.hu'';
$datum = ''2004.11.27. - 17:20'';
$ip = ''555.666.777.888'';
$parancs = ''INSERT INTO `probatabla` ''
. ''(`id`, `nev`, `jelszo`, `email`, `datum`, `ip`) ''
. ''VALUES ''
. ''('$id', '$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>'';
mysql_query($ujtabla, $kapcsolat) or die(''Hiba a tabla letrehozasanal: ''.mysql_error().''<br>'');
print ''Sikerült letrehozni az uj tablat az adatbazisban<br>'';
mysql_query($parancs, $kapcsolat) or die(''Hiba a lekerdezes kozben: ''.mysql_error().''<br>'');
print ''Sikerült beilleszteni az adatokat az adatbazisba<br>'';
$sorlekerdez = mysql_query(''SELECT * FROM `probatabla`'') 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;
mysql_close($kapcsolat);
?>
[Szerkesztve] -
VladimirR
nagyúr
dupla aposztrofokat mindenutt lecserelted idezojelre?
itt a kod maga => Bővebben: link es igy tudod letolteni => Bővebben: link
jah es az nem not_null, hanem NOT NULL
[Szerkesztve] -
VladimirR
nagyúr
a dontott idezojel arra jo, hogy ha ''foglalt szot'' (pl mysql fuggvenynevek, parancsnevek, akarmik) szeretnel adni tabla-, vagy mezonevnek, akkor ilyenek koze kell irni
elhagyhato, ha nem ilyen foglalt kifejezest hasznalsz, de en igy szoktam meg, mert phpmyadminbol nezehgettem ki a php-s sql kodokat, s az mindenhova tesz
a hibat azert kapod, mert mar van 0 erteku key1 (sorban az elso, vagyis az id)
ezt ketfelekeppen kerulheted ki:
-lekerdezed, hogy mi az aktualis legnagyobb id, es attol egyel nagyobbat adsz meg
-autoincrementet hasznalsz, es a lekerdezesbol kiveszed az id-t, tehat ez lesz a beszurasod:
$parancs = ''INSERT INTO `probatabla` ''
. ''(`nev`, `jelszo`, `email`, `datum`, `ip`) ''
. ''VALUES ''
. ''('$nev', '$jelszo', '$email', '$datum', '$ip')'';
ekkor az id automatikusan fopg novekedni
beallitamni meg igy tudod:
ALTER TABLE `probatabla` CHANGE `id` `id` INT(10) NOT NULL AUTO_INCREMENT
az file-ok meg azert ne voltak elerhetoek, mert nem ment a gepem, igy nem volt elerheto a webszerverem, de most mar ujbol megy (ritka az olyan, hogy kikapcsolom a gepet, de ki kellett szednem a hdd-t ) -
VladimirR
nagyúr
igy probald:
$lekerdez = ''SELECT * FROM `probatabla` WHERE nev like '$nev' '''
$sorlekerdez = mysql_query($lekerdez) or die(''Hiba a lekerdezeskor: ''.mysql_error().''<br>'');
(a $nev mellet levo aposztrofot csereltem ki)
tipp: szedj le egy phpmyadmin-t (Bővebben: link) es azon keresztul tudod managel-ni az adatbazisod - valamint megmutatja a lekerdezesek sql es php kodjat is, igy tanulni is eleg jol lehet belole -
VladimirR
nagyúr
ez azert van, mert a mysql_query egy resqurce ertekkel ter vissza, amit eloszor fetch-elni kell, pl a mysql_fetch_assoc, vagy mysql_fetch_array fuggvennyel
majd utana ki tudod iratni
abbol a resource_id-bol nem sok mindent tudsz meg, inkabb valami ilyesmi kellene (mint Szalma is irta)
$ilyennincs=''ilyennincs'';
$lekeres2 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$ilyennincs' '');
if (mysql_num_rows($lekeres2) = 0) {
while ($row = $result->fetch_assoc()) {
print $row[''nev'';
}
else
print ''0'';
[Szerkesztve] -
L3zl13
nagyúr
Resource ID, amit a mysql_query visszaad, a select eredményeképp kapott resultset azonosítója. Akkor is létezik, ha nincs találat. Egyedül akkor nem lesz értéke, ha hibás volt a query. Ezért lehet ilyenkor or die(mysql_error())-t alkalmazni.
Természetesen ennek a resource ID-nek nincs semmi köze a táblák illetve a lekérdezés eredményében szereplő adatokhoz. SZóval resource id=9 nem a 9. sor, vagy a kilencedik ember vagy akármi. Hanem egyszerűen ezen az azonosítón keresztül lehet lekérni mondjuk PHP-ben az eredményt.Aki hülye, haljon meg!
-
Szalma
őstag
(''mysql_num_rows($lekeres2) = 0'' <- Ez itt szintaktikusan hibás. A forrás alapján szerintem így helyes ''mysql_num_rows($lekeres2) != 0''... A hiányzó ''}'' helyét pedig egy jó editor megmondja. Ha nem mond semmit, akkor ideje keresni egy jót... (vim))
Szeretettel:
Szalma
szerk.: És milyen lassan gépelek...
[Szerkesztve] -
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] -
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. -
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] -
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] -
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] -
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. -
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!
-
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
eloszor is:
a ket kodreszlet kozott az alapveto kulonbseg az, hogy mig az elsonel akkor lepsz be a feltetel igaza agaba, ha nem nulla a sorok szama, mig masodik esetben akkor, ha nulla
igy aztan egy 0 sorbol allo tomb sorain akarsz vegigmenni (ugye ez nem fog megtortenni, ezert nem lepsz be a ciklusba
egyebkent jobb lenni igy, mint azt mar faster is emlitette:
$lekeres2 = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$nev' '');
if (mysql_num_rows($lekeres2) != 0) // ha nem nulla a sorok szama, vagyis van ilyen felhasznalo
{
print ''Van már ilyen név, válassz másikat!'';
}
else
.........
$lekeres = mysql_query(''SELECT * FROM probatabla
WHERE nev= '$nev' and jelszo= '$jelszo' '');
if (mysql_num_rows($lekeres) == 0) // ha nulla a sorok szama, vagyis nincs ilyen felhasznalo
{
print ''Név/jelszó nem stimmel!'';
}
else
..... -
Új hozzászólás Aktív témák
- Panasonic Lumix G X VARIO 12-35mm f/2.8 II ASPH. Power O.I.S. (H-HSA12035)
- 2db Iceriver KS0 KASPA bányagép + 180W új tápegység 2 év garanciával.
- Panasonic Lumix DC-G9 (V-Log L kiegészítéssel, 4 akkuval)
- Commlite CM-EF-NEX Auto-Focus Adapter (Canon EF - Sony E)
- Üzletből, garanciával, legújabb Asus Vivobook 17" i7-1355U 10 mag 5GHz/16RAM/1TBSSD/17,3"FULLHD
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest