Diskuze: Smyčka v přesměrování

PHP PHP Smyčka v přesměrování American English version English version

Aktivity (1)
Avatar
mat.masar
Člen
Avatar
mat.masar:27.2.2015 19:00

Ahojte, řeknete mi prosím vás, co s tím mám udělat, aby tam nebyla smyčka v přesměrování?

 if (isset($_GET['poznamka']))
        $url = $_GET['poznamka'];
        else
        $url = 'uvod';

$poznamka = mysql_query(' SELECT * FROM poznamky WHERE url=?', $url);
$vysledek= mysql_fetch_array($poznamka);

if (!$poznamka)
{
        if ($url != 'chyba')
        {
                header('Location: zobrazenipoznamky.php?poznamka=' .htmlspecialchars($url));
                exit();
        }
        else
                die('Nebyla nalezena chybova poznamka');
}
 ?>
 
Odpovědět 27.2.2015 19:00
Avatar
Nahoru Odpovědět  -1 27.2.2015 19:03
Svoboda tvé pěsti končí na špičce mého nosu
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:27.2.2015 19:07

Ty bereš nějakou poznámku. Tu si poté ukládáš. Pokud tam není chyba, přesměrováváš. Takhle se vytvoří smyčka, protože furt přesměrováváš na to samé. Místo přesměrování vypiš si tu poznámku. :)

Nahoru Odpovědět 27.2.2015 19:07
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
mat.masar
Člen
Avatar
mat.masar:27.2.2015 19:10

Aha, a mám to teda dělat takhle?
Připadá mi to nějaké divné

 if (isset($_GET['poznamka']))
        $url = $_GET['poznamka'];
        else
        $url = 'uvod';

$poznamka = mysql_query(' SELECT * FROM poznamky WHERE url=?', $url);
$vysledek= mysql_fetch_array($poznamka);

if (!$poznamka)
{
        if ($url != 'chyba')
        { ?>
          <html>
 <head>
 <link rel="stylesheet" href="styl-index.css" type="text/css" />
 </head>
 <body>
 <article>
<h1><?php echo htmlspecialchars($poznamka['nadpis']); ?></h1>
<?php echo $poznamka['poznamka']; ?>

 </article>

 </body>

 </html>
        <?php }
        else
                die('Nebyla nalezena chybova poznamka');
}
 ?>
 
Nahoru Odpovědět  +1 27.2.2015 19:10
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na mat.masar
Marek Z.:27.2.2015 19:15

Musíš vědět sám co chceš aby se stalo, pokud ta poznámka neexistuje. Přesměrovat na domovskou stránku či?

Nahoru Odpovědět 27.2.2015 19:15
Chybami se člověk učí, běžte se učit jinam!
Avatar
mat.masar
Člen
Avatar
mat.masar:27.2.2015 19:21

Jo, pokud neexistuje tak asi přesměrovat na domovskou stránku. Ale hlavně potřebuju aby se ta poznámka vypsala (samozřejmě pokud existuje). Je to dělané podle tutoriálu NERS tady na webu. Akorád já jsem měl zadání s poznámkama.

 
Nahoru Odpovědět 27.2.2015 19:21
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na mat.masar
Marek Z.:27.2.2015 19:25

Chápu to tak z tvého kódu, že jsme na stránce zobrazenipoznam­ky.php, že?
Ty se dotazuješ na to jestli existuje poznámka z parametru v db a pokud ano tak přesměruješ na stejnou stránku se stejným parametrem, to nemá logiku.

Místo přesměrování udělej tedy výpis..

Nahoru Odpovědět 27.2.2015 19:25
Chybami se člověk učí, běžte se učit jinam!
Avatar
mat.masar
Člen
Avatar
mat.masar:27.2.2015 19:29

Ano, na hl-stranka.php si uživatel vyhledá poznámku podle nadpisu(vypíše se nadpis) a když na něho klikne má se ta poznámka zobrazit na stránce zobrazenipoznam­ky.php.. Ale jak teda má být ten výpis? Má to být jak jsem psal? Připadá mi to divné.

 
Nahoru Odpovědět 27.2.2015 19:29
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:27.2.2015 19:31

Else můžeš změnit:

else {
    header('Location: .');
    exit;
}

a místo

<?php echo ...; ?>

můžeš použít

<?= ... ?>
Editováno 27.2.2015 19:31
Nahoru Odpovědět 27.2.2015 19:31
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
mat.masar
Člen
Avatar
mat.masar:27.2.2015 19:41

Moc nevím, jak to mám přesně udělat. Napadlo mě to udělat takhle. Je to dobře?

 <html>
 <head>
 <link rel="stylesheet" href="styl-index.css" type="text/css" />
 </head>
 <body>
 <article>
 <?php
$link = mysql_connect("localhost", "root", "your_password");
 mysql_select_db('internetove-poznamky',$link);

 if (isset($_GET['poznamka']))
        $url = $_GET['poznamka'];
        else
        $url = 'uvod';

$poznamka = mysql_query(' SELECT * FROM poznamky WHERE url=?', $url);
?>
<h1><?php echo htmlspecialchars($poznamka['nadpis']); ?></h1>
<?php
$vysledek= mysql_fetch_array($poznamka);

if (!$poznamka)
{
        if ($url != 'chyba')
        {
           echo $poznamka['poznamka'];
        }
        else
               header('Location: hl-stranka.php');
                exit();
}
 ?>


 </article>
 </body>
 </html>
 
Nahoru Odpovědět 27.2.2015 19:41
Avatar
mat.masar
Člen
Avatar
mat.masar:27.2.2015 19:41

Moc nevím, jak to mám přesně udělat. Napadlo mě to udělat takhle. Je to dobře?

 <html>
 <head>
 <link rel="stylesheet" href="styl-index.css" type="text/css" />
 </head>
 <body>
 <article>
 <?php
$link = mysql_connect("localhost", "root", "your_password");
 mysql_select_db('internetove-poznamky',$link);

 if (isset($_GET['poznamka']))
        $url = $_GET['poznamka'];
        else
        $url = 'uvod';

$poznamka = mysql_query(' SELECT * FROM poznamky WHERE url=?', $url);
?>
<h1><?php echo htmlspecialchars($poznamka['nadpis']); ?></h1>
<?php
$vysledek= mysql_fetch_array($poznamka);

if (!$poznamka)
{
        if ($url != 'chyba')
        {
           echo $poznamka['poznamka'];
        }
        else
               header('Location: hl-stranka.php');
                exit();
}
 ?>


 </article>
 </body>
 </html>
 
Nahoru Odpovědět 27.2.2015 19:41
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na mat.masar
Marek Z.:27.2.2015 19:41

Resp. tam můžeš dát cokoliv a není to divné pokud to je samostatná stránka bez dalšího obsahu..

if (isset($_GET['poznamka']))
        $url = $_GET['poznamka'];
       else
        $url = 'uvod';

$poznamka = mysql_query(' SELECT * FROM poznamky WHERE url=?', $url);
$vysledek= mysql_fetch_array($poznamka);

if (!$poznamka)
{
        if ($url != 'chyba')
        {
                //Zde si proveď výpis vybrané zprávy
        }
        else
                header('Location: hl-stranka.php');
                die();
}
 ?>

Pokud se stránka samostatná a nevoláš ji třeba do nějakého jiného obsahu tak tam můžeš dát i html elementy, proč ne?.. :)

Nahoru Odpovědět 27.2.2015 19:41
Chybami se člověk učí, běžte se učit jinam!
Avatar
mat.masar
Člen
Avatar
mat.masar:27.2.2015 19:52
 <article>
 <?php
$link = mysql_connect("localhost", "root", "your_password");
 mysql_select_db('internetove-poznamky',$link);

 if (isset($_GET['poznamka']))
        $url = $_GET['poznamka'];
        else
        $url = 'uvod';

$poznamka = mysql_query(' SELECT * FROM poznamky WHERE url=?', $url);
$vysledek= mysql_fetch_array($poznamka);

if (!$poznamka)
{
        if ($url != 'chyba')
        {
          echo $poznamka['poznamka'];
        }
        else
                     header('Location: hl-stranka.php');
                exit();
}
 ?>
<h1><?php echo htmlspecialchars($poznamka['nadpis']); ?></h1>

 </article>

a vypisuje mi to 2 chyby.
Warning: mysql_query() expects parameter 2 to be resource, string given in C:\Users\j\Des­ktop\PHP\zobra­zenipoznamky.php on line 16

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in C:\Users\j\Des­ktop\PHP\zobra­zenipoznamky.php on line 17

 
Nahoru Odpovědět 27.2.2015 19:52
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:27.2.2015 19:53

Musíš mít tu proměnnou přímo v dotazu, ne za, tohle je mysql_, ne PDO. :)

Nahoru Odpovědět 27.2.2015 19:53
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:27.2.2015 19:54

A používej prosím tlačítko odpovědět, ať si toho všimneme. :)

Nahoru Odpovědět 27.2.2015 19:54
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
mat.masar
Člen
Avatar
Odpovídá na IT Man
mat.masar:27.2.2015 20:01

Dobře, budu to používat.
$poznamka = mysql_query(' SELECT * FROM poznamky WHERE url= $url');
$vysledek= mysql_fetch_a­rray($poznamka);
je již tedy dobře?

 
Nahoru Odpovědět 27.2.2015 20:01
Avatar
mat.masar
Člen
Avatar
Odpovídá na IT Man
mat.masar:27.2.2015 20:17

Ale stejně to pořád vypisuje chybu č.2: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Users\j\Des­ktop\PHP\zobra­zenipoznamky.php on line 17

 
Nahoru Odpovědět 27.2.2015 20:17
Avatar
sahlepik
Člen
Avatar
Odpovídá na mat.masar
sahlepik:27.2.2015 20:23

máš tam chybu, má tam být:

echo $vysledek['poznamka'];
<h1><?php echo htmlspecialchars($vysledek['nadpis']); ?></h1>
Editováno 27.2.2015 20:25
 
Nahoru Odpovědět  -2 27.2.2015 20:23
Avatar
sahlepik
Člen
Avatar
sahlepik:27.2.2015 20:30

Nechápu to "mínus", ale dle kódu, který prezentoval výše tam prostě má chybu v proměnné. Neřeším, že používá zastaralý ovladač mysql_ Mohl by mi tedy někdo ten mínus vysvětlit? Díky.

 
Nahoru Odpovědět 27.2.2015 20:30
Avatar
Tomáš123
Člen
Avatar
Odpovídá na mat.masar
Tomáš123:27.2.2015 20:33

Chyba znamená, že priradenie do premennej $poznamka neprebehlo v poriadku.

Funkcia mysql_query() vracia resource ak je operácia úspešná, inak vracia false (čo je boolean spomínaný v chybovom hlásení).

Obaľ slovo poznamky do SQL apostrofov t.j (``). Ak to nebude funogovať, tak obaľ do apostrofov aj časť za WHERE.

Nahoru Odpovědět  -1 27.2.2015 20:33
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
mat.masar
Člen
Avatar
mat.masar:27.2.2015 20:41

sahlepik:
Po tom co jsem tam dal ten tvůj kód tak to napsalo:
Parse error: syntax error, unexpected '<'

if ($url != 'chyba')
   {
     echo $poznamka['poznamka'];
             <h1><?php echo htmlspecialchars($poznamka['nadpis']); ?></h1>
   }

Tomáš123:
A po tvém:

$poznamka = mysql_query("SELECT * FROM 'poznamky' WHERE 'url= $url'");

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given
Tak nevím..

 
Nahoru Odpovědět 27.2.2015 20:41
Avatar
IT Man
Redaktor
Avatar
Odpovídá na sahlepik
IT Man:27.2.2015 20:43

Použiješ echo a nedáš tam <?php. To by ti ukázalo jen čisté HTML (tedy i tohle by se jen zobrazilo a nevypsalo) = chyba. ;)

Nahoru Odpovědět  -1 27.2.2015 20:43
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:27.2.2015 20:45

Proměnná $poznamka je prázdná, proto ta chyba. Nemůže se provést tedy ta funkce, chybí jí parametry. :)

Nahoru Odpovědět 27.2.2015 20:45
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
Tomáš123
Člen
Avatar
Odpovídá na mat.masar
Tomáš123:27.2.2015 20:50

Takto by to už malo fungovať:

$poznamka = mysql_query("SELECT * FROM `poznamky` WHERE `url` ='".$url."'");
Editováno 27.2.2015 20:52
Nahoru Odpovědět 27.2.2015 20:50
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
mat.masar
Člen
Avatar
Odpovídá na IT Man
mat.masar:27.2.2015 20:56

Ale jak může být $poznamka prázdná, když je tam kód $poznamka = mysql_query("SELECT * FROM 'poznamky' WHERE 'url= $url'");

 
Nahoru Odpovědět 27.2.2015 20:56
Avatar
Tomáš123
Člen
Avatar
Odpovídá na mat.masar
Tomáš123:27.2.2015 21:00

Nie je prázdna, obsahuje hodnotu false. Už som to písal vyššie. IT Man to myslel zrejme tak, že v premennej nie je požadovaný obsah.

Nahoru Odpovědět 27.2.2015 21:00
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
mat.masar
Člen
Avatar
Odpovídá na Tomáš123
mat.masar:27.2.2015 21:01

Tak to je zvláštní... nevypisuje to ani chybu ani tu poznámku :D ale echo $poznamka['poz­namka']; tam mám.

 
Nahoru Odpovědět 27.2.2015 21:01
Avatar
Tomáš123
Člen
Avatar
Odpovídá na mat.masar
Tomáš123:27.2.2015 21:03

Premenná $poznamka je pole? Nezdá sa mi, ale kódy hore som neskúmal. Čo ti vypíše

echo $poznamka;

?

Nahoru Odpovědět 27.2.2015 21:03
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:27.2.2015 21:03

A máš něco v databázi či správně pojmenované sloupce?

Nahoru Odpovědět 27.2.2015 21:03
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
mat.masar
Člen
Avatar
Odpovídá na IT Man
mat.masar:27.2.2015 21:08

Tomáš123 vypisuje to Resource id #4.
A když jsem dal: echo $vysledek; (protože $vysledek=mys­ql_fetch_arra­y($poznamka); takže by měla vypsat ten text) tak to vypsalo: Notice: Array to string conversion in C:\Users\j\Des­ktop\PHP\zobra­zenipoznamky.php on line 30
Array

IT Man jo mám

 
Nahoru Odpovědět 27.2.2015 21:08
Avatar
Tomáš123
Člen
Avatar
Odpovídá na mat.masar
Tomáš123:27.2.2015 21:12

A to, o čo sa snažíš je vypisanie obsahu tabuľky?

Na výpis použi cyklus:

foreach($vysledek as $index) {
echo $index;
}
Nahoru Odpovědět 27.2.2015 21:12
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
mat.masar
Člen
Avatar
Odpovídá na Tomáš123
mat.masar:27.2.2015 21:17

Jo to je to o co se snažím. Chci vypsat ten obsah z db. Má se vypsat ta poznámka naprř. Koupit chleba. Zase to nic nevypisuje(ten cyklus)

 
Nahoru Odpovědět 27.2.2015 21:17
Avatar
sahlepik
Člen
Avatar
Odpovídá na IT Man
sahlepik:27.2.2015 21:20

Tak když se koukneš do jeho kódu, vzal jsem ten kousek jako VÝŇATEK, značky pro vložení PHP kódu tam přece má. Proč bych ten jeho kód kopíroval celý? To snad nemyslíš vážně :)

 
Nahoru Odpovědět 27.2.2015 21:20
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:27.2.2015 21:21

Taky pro jednu položku se nepoužívá foreach (i když jsi vytáhl 1, možná by to fungovalo, ale pro 1 je to zbytečné).
Zkus ještě pod ten array přidat:

$vysledek = $vysledek[0];

A pak to vypiš polem ($vysledek['nad­pis'])).

Nahoru Odpovědět 27.2.2015 21:21
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na sahlepik
IT Man:27.2.2015 21:23

Ano, jenže syntaxy PHP jsi neukončil. Ne každý začátečník to musí pochopit. Takže příště uzavírej. ;)

P.S. Nechci vést mínuskovou válku, ale jak víš, že jsem to byl já? Já ti jen vysvětloval fakta.;)

Nahoru Odpovědět 27.2.2015 21:23
Usmívej se, zítra už tvůj kód nemusí fungovat!
Avatar
mat.masar
Člen
Avatar
Odpovídá na IT Man
mat.masar:27.2.2015 21:29
$poznamka = mysql_query("SELECT * FROM `poznamky` WHERE `url` ='".$url."'");
$vysledek= mysql_fetch_array($poznamka);
$vysledek = $vysledek[0];

if (!$poznamka)
{
        if ($url != 'chyba')
        {
         echo($vysledek['nadpis']);

        }

A pořád nic(a nechtěl jsi nahodou echo($vysledek['poz­namka']);? ) :(
Jinak přikládám screen z db.

 
Nahoru Odpovědět 27.2.2015 21:29
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:27.2.2015 21:36

Promiň, já už ti nepomohu, jsem spíš na PDO. Trochu zagoogli a určitě to najdeš. :)

Nahoru Odpovědět 27.2.2015 21:36
Usmívej se, zítra už tvůj kód nemusí fungovat!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 37 zpráv z 37.