Hirdetés
- kraftxld: Diáklaptop - Dell Latitude 3140 - Királyunk ajándéka
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Magga: PLEX: multimédia az egész lakásban
- gban: Ingyen kellene, de tegnapra
- GoodSpeed: 3I/Atlas: Üstökös vagy idegen civilizáció űrhajója?
- sh4d0w: StarWars: Felismerés
- Gurulunk, WAZE?!
- Klaus Duran: Kerítésléc fail.
- Meggyi001: A kérdés...
- Luck Dragon: Asszociációs játék. :)
Új hozzászólás Aktív témák
-
-
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
..... -
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] -
L3zl13
nagyúr
-
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. -
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
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
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
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
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] -
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] -
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. -
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] -
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
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
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
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] -
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 nemtom -
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 elszurtal -
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] -
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]
Új hozzászólás Aktív témák
- Okos Otthon / Smart Home
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
- kraftxld: Diáklaptop - Dell Latitude 3140 - Királyunk ajándéka
- Kerékpárosok, bringások ide!
- Lexus, Toyota topik
- Mini-ITX
- Fotók, videók mobillal
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Formula-1
- Újra nekifeszül az asztali konzolok piacának a Valve
- További aktív témák...
- Dell USB-C, Thunderbolt 3, TB3, TB4 dokkolók (K20A) WD19TB/ WD19TBS/ WD22TB4, (K16A) TB16/ TB18DC
- Gitárerősítő Boss Katana 50
- HIBÁTLAN iPhone 14 Pro Max 128GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3523
- Törött Apple iMac 19.2 i5-8500 Radeon Pro 560X 4GB 16GB 256GB SSD 21.5" 4K Retina
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő
)
)

;
)

