ugrás a tartalomhoz

MySQL limit kulcsszó használata PHP-vel

Anonymous · 2005. Aug. 15. (H), 12.22
Sziasztok
próbáltam készíteni egy limites oldal darabolos
lekérdezést.
de nem tudom mi lehet a gond.
Ime a kód:

<?php
$connect=mysql_connect("host", "user", "pass");
if(!$connect)
die("can't connect server".mysql_error());
print"<br>ok";
mysql_select_db("forum") or die("can't open
database".mysql_error());
print "<br>database sucessfull connect";
if(!isset($from))
$from=0;
$result=mysql_query("select * from message limit"
.$from. ", 10");
$rows=mysql_num_rows($result);
print "<table>";
while($array=mysql_fetch_array($result))
{
print "<tr>";
print
"<td>".$array["id"]."</td><td>".$array["name"]."</td>"
."<td>".$array["email"]."</td><td>".$array["message"]."</td>";
print "</tr>";}
print "</table>";
if($from>0)
print" <a
href=\"10.php?from=".($from-10)."\>prev</a>";
print" <a
href=\"10.php?from=".($from+10)."\>next</a>";
/*print $rows;
print $result;*/
mysql_close($connect);
?>
Warning: mysql_num_rows(): supplied argument is not a
valid MySQL result resource in D:\Apache
Group\Apache\Apache2\htdocs\10.php on line 11

Warning: mysql_fetch_array(): supplied argument is not
a valid MySQL result resource in D:\Apache
Group\Apache\Apache2\htdocs\10.php on line 13


ezt a két hiba üzenetett kapom.
Másik kérdésem hogyan leket kiegészíteni úgya kodót,
hogy necsak elóző és következo hanem oldal számok
is legyenek?
Köszömöm
Tamás
 
1

$from leellenőrzés

fberci · 2005. Aug. 15. (H), 12.33
Leellenőrizted, hogy a $from szám-e?
2

Re: Limit használata php-val

kmm · 2005. Aug. 15. (H), 12.57
a limit után tegyél szóközt
--
üdv: kmm... ( http://kmm.hu )
3

átírtam, biztonság, SQL parancs

Hojtsy Gábor · 2005. Aug. 15. (H), 13.31
Általános tanács a Weblaborra: használd a colorer és code bbcode jelölőket, a témád tartalmát ezekkel javítottam.

Ha nem érted miért nem megy egy SQL parancs, irasd ki a hibaüzenetet a mysql_query() után. Ha nem jó a visszatérési érték, akkor a mysql_error() megmondja a hibát. Különben echo()-val kiirathatod az SQL parancsot végrehajtás előtt, és megnézheted, mi látszik hibásnak, mit nem úgy írnál egy SQL parancssorban. Végül pedig nem szabad űrlapból (vagy más külső forrásból) jövő értékeket automatikusan SQL parancsba tenni. Ez SQL injection hibákat nyit a szervereden, eléggé veszélyes műfaj. Lásd erről is szóló cikkünket.
4

picit off

Anonymous · 2005. Aug. 15. (H), 14.29
Default beállításként már mindenhol "magic_quotes_gpc = 1", miért kell mégis mindig az sql injectiontől rettegni?
Egy "select * from users where name='$_POST[name]' and pass='$_POST[pass]'" milyen veszélyt rejt "magic_quotes_gpc = 1" mellett?

üdv.: Zsolt
5

már nem mindenhol (szerencsére :)

Hojtsy Gábor · 2005. Aug. 15. (H), 14.37
Az magic_quote_gpc már nem mindenhol van bekapcsolva, így helyesebb! Az aktuális PHP-kben már nem javasolják a bekapcsolását. Egyrészt ezért kell aggódni, másrészt azért, mert a magic_quotes csak bizonyos adatbázisokra megoldás, a MySQL-re sem teljes egészében. Lásd mysql_escape_string() és mysql_real_escape_string().

Mivel ez nem picit off, hanem nagyonis, ezért további tárgyalása új témában lenne alkalmas, nem itt.
6

kiíratam a hibát

Anonymous · 2005. Aug. 15. (H), 16.23
kiíratam a hibát de így se értem miért nem jó mert olyat írt amit én nem írtam oda.
ime:
You have an error in your SQL syntax near '\\, 10' at line 1

két per jelet honna vette?
7

szerinted honnan?

Hojtsy Gábor · 2005. Aug. 15. (H), 19.45
Először is javasoltam az elküldés előtt összeálló teljes SQL parancs kiiratását (változóba téve), másrészt honann máshonnan venné, mint a $from-ból?
8

megtettem

Anonymous · 2005. Aug. 15. (H), 21.40
kiírattam változóba mégse értem el semmit egyszerűen nem akar működni.
Hiba üzenetem mindig meg marad. és nem megy tovább csak warning-ol.
Most éppen ezt írja:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Apache Group\Apache\Apache2\htdocs\10.php on line 14
1You have an error in your SQL syntax near ' 0, 10 ' at line 1

sql paracs változóba téve ezt adja ami szerintem jó mondjuk azért lehet benne hiba
select * from message LIMIT 0, 10
9

<Nincs cím>

Anonymous · 2005. Aug. 15. (H), 23.13
most már megoldodot félig a gondom igaz hogy nincs hiba üzenetem de üres üresa böngészö. Nem listázza a táblát. :(
10

Oldalszámok

DevNULL · 2005. Aug. 16. (K), 10.50
Ez volt az első adatbázisból adatokat tördelve megjelenítő kis kódom. Biztos van, rövidebb, szebb, jobb. De kezdetnek talán megteszi.

<?php
if (!$page) {$aktualis_oldal = 1;}
else {$aktualis_oldal = $page;}
$dbperoldal= 10;			// hány sort jelentessen meg egy oldalon
db_connect($host, $user, $pass);

$sql_1 = 'SELECT * FROM tabla';
$sorok_szama = msql_num_rows($sql_1);

if ($sorok_szama == 0) die("Nincs adat a táblában!!!");
	
$maradek = $sorok_szama%$dbperoldal;
if ($maradek == 0) {
	$oldalak_szama = $sorok_szama/$dbperoldal;
}
if ($maradek != 0) {
	$oldalak_szama = $sorok_szama/$dbperoldal;
	$oldalak_szama = $oldalak_szama+1;
}

$kezdoertek = ($page-1)*$dbperoldal;
$sql_2 = 'SELECT * FROM tabla LIMIT '.$kezdoertek.', '.$dbperoldal;
$eredmeny = mysql_query($sql_2);

if ($oldalak_szama != 1) {
	if ($aktualis_oldal > 1) {
		$oldal1 = $aktualis_oldal-1;
		echo "<a href=\"".$PHP_SELF."?page=".$oldal1."\"><--Előző oldal</a>&nbsp";
	}
	for ($szamlalo = 1;$szamlalo <= $oldalak_szama; $szamlalo++) {
		echo "&nbsp<a href=\"".$PHP_SELF."?&page=".$szamlalo."\">";
		if ($szamlalo == $aktualis_oldal) {
			echo "<b>[".$szamlalo."]</b>";
		} else {
			echo "[".$szamlalo."]";
		}
		echo "</a>&nbsp";
	}
	if ($aktualis_oldal < $oldalak_szama) {
		$oldal2 = $aktualis_oldal+1;
		echo "&nbsp<a href=\"".$PHP_SELF."&page=".$oldal2."\">Következő oldal--></a>";
	}
}

echo "<br><br><table border=\"0\" cellpadding=\"2\" cellspacing=\"2\" align=\"center\">";
while ($sor = mysql_fetch_array($eredmeny)) {
	echo "<tr>";
	echo "<td>".$sor["mezo_1"]."</td>";
	echo "<td>".$sor["mezo_2"]."</td>";
	echo "<td>".$sor["mezo_3"]."</td>";
	echo "<td>".$sor["mezo_X"]."</td>";
	echo "</tr>";
}
</table>
?>
11

nem indul

Anonymous · 2005. Aug. 17. (Sze), 22.30
első meghívásnál miért nem ad eredményt csak a lapozást és a page re miért mondja, hogy nem definialt?
12

ehelyett

Anonymous · 2005. Aug. 17. (Sze), 23.42
Ez a kód lekérdezi az egész tábla összes adatát, holott csak arra vagyunk kivácsiak, hogy hány rekord van a táblában:
$sql_1 = 'SELECT * FROM tabla';
$sorok_szama = mysql_num_rows($sql_1);

De egyébként szerintem hibás is, helyette:
$sorok_szama = mysql_num_rows(mysql_query($sql_1));

Helyette tanácsosabb, és gyorsabb a COUNT()-ot használni:
"SELECT COUNT(id) FROM tabla"

Igy csak egy számot kapsz vissza, ami megmondja, hány rekordod van.

Gyulus
13

Igazad van...

DevNULL · 2005. Aug. 18. (Cs), 00.08
Kösz a javítást Gyulus.