Autor Zpráva
Hogo
Profil
Ahoj, potřebuju udělat metodou GET nějaké uživatelské stránky (tzn, jakože uživatel může navštívit stránku jiného uživatele), ale zasekl jsem se u toho, jak udělat v GET, aby se po zadání jména uživatele dostala ta uživatelská stránka. Aktuálně mám tento kód:
index.php
<form action="user.php" method="GET">
    <table>
        <tr><td>Přezdívka:</td><td><input type="text" id="username" name="username" class="textarea"></td></tr>
        <tr><td></td><td><button type="sumbit" id="sumbit" name="sumbit" value="Sumbit" class="uzivatele doprava">Hledat</button></td></tr>
    </table>
</form>
user.php
<?php 
session_start();
if (isset($_GET['username'])) {
    $username = $_GET['username'];
    mysqli_connect('localhost', 'root', '…') or die ("Nedaří se připojit k databázi.");
    mysqli_select_db('…');
    $userquery = mysqli_query("SELECT * from users WHERE username='$username'");
    if (mysqli_now_rows($userquery) != 1) {
        die ('Tuto přezdívku jsem bohužel nenašel.');
    }
    while ($row = mysqli_fetch_array($userquery, MYSQLi_ASSOC)) {
        $prezdivka = $_SESSION['username'];
        $content = $_SESSION['content'];
        
    }
  

    

?>
<h2><?php echo $prezdivka; ?> – Jeho účet</h2>
<table>
    <tr><td>Přezdívka:</td> <td><?php echo $prezdivka; ?></td></tr>
    <tr><td>O co se chce podělit:</td><td><?php echo $content; ?></td></tr>
</table>
<?php 
} else die ('Prosím, zadejte přezdívku do vyhledávače.');
?>



Respektive profil uživatele… nenapadlo mě vhodné označení. :D
anonym_
Profil *
Hogo:
Tak je tam sql injection, ten while je tam pro jeden radek zbytečný, je tam syntaktická chyba (mysql_query očekává dva parametry - což bys snadno zjistil, kdyby sis vypsal chyby nebo otevřel error log). Jinak by to mělo asi snad fungovat...


Pak tam je ještě asi preklep submit vs. sumbit.
Hogo
Profil
anonym:
Aha! Takže za každou věc musím napsat or die ('……') a nebo tam hodit error? Oki, nenapsal jsem to tam, protože jsem to považoval za trochu zbytečný, to byla ta chyba! :D
anonym_
Profil *
Hogo:
Takže za každou věc musím napsat or die ('……') a nebo tam hodit error?
To je tvoje interpretace něčeho, co jsem nenapsal.

S tou mojí odpovědí bych na tvém místě naložil tak, že otevřu Google a zeptám se ho, co je "error log", nebo jak "vypsat chyby v PHP". Plus ještě třetí (první) možnost, kterou jsou v PHP výjimky.
Hogo
Profil
Počkej, co? Tak jsem tam hodil error log, asi nějak takhle:
  
    $userquery = mysqli_query("SELECT * from users WHERE username='$username'") {
    error_log('Nastala chyba, ujistěte se, že vámi hledaný uživatel opravdu existuje.')
    };
 
No, stejně to nefunguje, potřebuju nějakej podrobnější návod. :D
anonym_
Profil *
Hogo:
Tak ona funkce error_log nedělá asi to, co si myslíš, ze děla. Přečti si o ni v dokumentaci, zjistíš, ze je asi zbytečná a vystačis si s defaultnimi chybovymi hláškami. Navíc já psal o error logu (což je soubor), nikoliv o funkci error_log.

Pak exstiuje druhá možnost, a sice vypsat chybové hlášení do webu (pouze na vývojovém prostředí samozřejmě). To byly ty druhé uvozovky, co mas hledat (napovím, funkce error_reporting).

V dokumentaci si pak nalistuj i ty mysqli_* funkce, ať víš, jak je používat správně. A jako bonus si přečti o sql injection, kterou ta tvoje aplikace také trpí.
Hogo
Profil
Anonym:
Takže zase mám předělat error log na chybový hlášky… oki, no.

Tak ochranu proti sql injection udělám, zatím je to jen betaverze a nikdo jinej kromě mě k ní nemá přístup.
mckay
Profil
Hogo:
Tak ochranu proti sql injection udělám, zatím je to jen betaverze a nikdo jinej kromě mě k ní nemá přístup.
Dobrej zvyk při implementaci systémů je nemyslet na bezpečnost až před výdáním, ale už od začátku celého toho snažení. Jeden z dobrých důvodů je třeba ten, že tě bude oprava těch chyb potom stát menší úsilí (v reálných projektech se to překládá na méně peněz).

Až se k tomu dostaneš, běž prosím cestou prepared statements, místo pokusů o ruční sanitizace toho, co uživatel smí zadávat.
anonym_
Profil *
Hogo:
To, co píše mckay podepisuji a tímto mu děkuji za doplnění toho, co jsem psal.

Takže zase mám předělat error log na chybový hlášky… oki, no.
Zpracování chyb na webu má několik úrovní, které jsi nepochopil.

1. na serveru je error.log, kam se chyby odchytávají defaultně
2. výpis těchto chyb do stránky na DEV prostředí (funkce error_reporting)
3. zpracování výjimek (try-catch)

Pak jsou možné pro začátečníka ty die konstrukce, které se ale v reálném provozu nepoužívají (po nasazení na produkční server tam nemají co dělat a zároveň je není snadné z kódu vyhodit před nasazením do produkce).

Nastuduj si prosím něco o zpracování chyb, materiálů je dost. Ať už Základní kurz 5: Hledání a oprava chyb ve skriptu, nebo oficiální dokumentace, na Google ti po zadání dotazu "PHP error reporting/processing/etc." vyjede bambilion výsledků.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0