Autor Zpráva
JunekCZ
Profil
Dobrý den.

Dělám stránku pro kamaráda s administrací profilu a novinek.
Vše v kódu funguje jak má, ale když chci přidat novinku přesměruje mě to na uzivatel.php namísto uzivatel.php?id=2 a vypíše špatný odkaz v url (Tato funkce se nachází ihned na začátku kódu.)

<?php

session_start();
header('Content-type: text/html;charset=UTF-8');

require_once 'db.php';

if(isset($_GET['id']) AND $_GET['id']!='')
{
    $id = stripslashes(htmlspecialchars(trim($_GET['id'])));

    if(!preg_match("|^[\d]+$|", $id))
    {
        exit("Id musí být číselná hodnota.");
    } else {

        if(!empty($_SESSION['login']) AND !empty($_SESSION['heslo']))
        {

            $login = $_SESSION['login'];
            $heslo = $_SESSION['heslo'];
            
            $over = mysql_query("SELECT `id` FROM `users` WHERE `login`='".$login."' AND `pass`='".$heslo."'");            

            if(mysql_num_rows($over)!=0)
            {
                $res_over = mysql_fetch_assoc($over);
                
                $query = mysql_query("SELECT * FROM `users` WHERE `id`='".$id."'");
                if(mysql_num_rows($query)!=0)
                {

                    $result = mysql_fetch_assoc($query);                    
                } else {
                    exit("Uživatel neexistuje.");
                }
                
            } else {

                exit("Vstup na tuto stránku je povolen pouze přihlášeným uživatelům.");
            }
        } else {
            exit("Vstup na tuto stránku je povolen pouze přihlášeným uživatelům.");    
        } 
        
    }


} else { exit("Špatný parametr v URL."); }

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title>Novinky</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" >
</head>
<body>';

echo '<div id="navigace"><a href="uzivatel.php?id='.$res_over['id'].'">Můj profil</a> 
<a href="index.php">Hlavní stránka</a>
<a href="admin.php">Novinky</a>  
<a href="all_users.php">Seznam uživatelů</a> 
<a href="index.php?action=odhlasit_se">Odhlásit se</a></div>
<div id="borderdole" style="border-bottom: 1px solid silver; width: 100%; height: 20px;"></div>
<h1 name="Uvitani" class="Uvitani">Ahoj '.$result['login'].'</h1>';        

if($result['login'] == $login)
{
    echo '<br>
  <div id="doprostred">
    <form action="update_user.php" method="POST">
            <div><label for="login"><h4>Váše přihlášovací údaje: </h4><strong><h4>'.$result['login'].'</strong> - změnit jméno:</h4></label></div>
            <div><input name="login" type="text">
            <input type="submit" name="submit" class="btn" value="změnit"></div>
            </form>
            <br>
    <form action="update_user.php" method="POST">
            <div><label for="heslo"><h4>Změnit heslo:</h4></label></div>
            <div><input name="heslo" type="password">
            <input type="submit" name="submit" class="btn" value="změnit"></div>
            </form>
            <br>
    <form action="update_user.php" method="POST" enctype="multipart/form-data">
            <div><label for="avatar"><h4>Váš avatar:</h4></label></div>
            <div><img alt="avatar" src=avatar/'.$result['avatar'].'><br>
            <h4>Obrázek musi být ve formatu jpg, gif nebo png. Změnit avatar:</h4></div>
            <div><input type="FILE" name="avatar">
            <input type="submit" name="submit" class="btn" value="změnit"></div>
            </form>
            </div>
            <br>
    <h4><p>Soukromé zprávy:</p></h4>
    ';
    $q_message = mysql_query("SELECT * FROM `message` WHERE `prijemce`='".$login."' ORDER BY `id` DESC");

    if(mysql_num_rows($q_message)!=0)
    {

        while($r_message = mysql_fetch_assoc($q_message))
        {
            $odesilatel = $r_message['odesilatel'];

            $q_avatar = mysql_query("SELECT `id`,`avatar` FROM `users` WHERE `login`='".$odesilatel."'");
            $r_avatar = mysql_fetch_assoc($q_avatar);
            if(!empty($r_avatar['avatar']))
            {

                $avatar = $r_avatar['avatar'];
            } else {

                $avatar = "no_avatar.jpg"; 
            }

            echo '
            <table style="border:2px solid #ddd;">
                <tr>
                    <td style="border-right:2px solid #ddd; padding:5px;">
                        <a href="uzivatel.php?id='.$r_avatar['id'].'"><img src="avatar/'.$r_avatar['avatar'].'" width="90" height="90" alt="avatar"></a>
                    </td>
                    <td>
          <div id="zpravicky">
                        <div> <font color="white">Odesílatel: </font><font color="black"><a style="color: black;" href="uzivatel.php?id='.$r_avatar['id'].'">'.$odesilatel.'</a></font></div>
                        <div> <font color="white">Datum: </font>'.$r_message['date'].'</div>
                        <div> <font color="white">Zpráva: </font><br> '.$r_message['zprava'].' </div>
                        <div style="border-top:1px dashed #ccc; text-align:right;"><a href="del_post.php?id='.$r_message['id'].'">odstranit</a></div>
                    </div>
          </td>
                </tr>
            </table>
            ';        
        }
    } else {

        echo "Zprávy nejsou.";
    }
} else {

echo '
<div><img src="avatar/'.$result['avatar'].'" alt="avatar"></div>
<form action="new_zprava.php" method="POST">
<div>Odeslat zprávu uživateli '.$result['login'].'</div>
<div><textarea cols="50" rows="5" name="zprava"></textarea></div>
<input type="hidden" name="prijemce" value="'.$result['login'].'">
<input type="hidden" name="id" value="'.$result['id'].'">
<div><input type="submit" name="submit" value="Odeslat"></div>
</form>';
}

if (!isset($_POST['submit'])) {

?>
   <link href="style/style.css" rel="stylesheet" type="text/css" />
   <script language="javascript" type="text/javascript" src="js/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
    mode : "textareas",
    theme : "advanced",
    theme_advanced_buttons3 : "",
    theme_advanced_toolbar_location : "top",
    theme_advanced_toolbar_align : "left",

});</script>
  <div id="main">
    <div id="caption"><h2>Přidat novinku</h2></div>
      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        <h4>Nadpis novinky:</h4><br/>
        <input type="text" name="title" size="40"/><br/><br/>
        <h4>Novinka (zpráva):</h4><br/>
        <textarea name="newstext" rows="15" cols="67"></textarea><br/>
        <center><?php echo '<a href="uzivatel.php?id='.$res_over['id'].'">'; php?><input type="submit" name="submit" class="btn" value="Save" /></a></center>
     </form>    

<?php } else {
   $newsTitel   = isset($_POST['title']) ? $_POST['title'] : 'Untitled';
   $submitDate  = date('d.m H:i');
   $newsContent = isset($_POST['newstext']) ? $_POST['newstext'] : 'No content';
   
   $filename = date('YmdHis');
   $f = fopen('news/'.$filename.".txt","w+");         
   fwrite($f,$newsTitel."\n");
   fwrite($f,$submitDate."\n");
   fwrite($f,$newsContent."\n");
   fclose($f);
   header('Location:uzivatel.php?id=2'.$res_over['id']);   
}
?>
</body>
</html>

Předem děkuji za odpověď.
sitole
Profil
Proč sem dáváš tak dlouhý kod? Jinak myslím si, že tohle se tu řešilo.
header('Location:uzivatel.php?id=2'.$res_over['id']);
Proč tam cpeš něco jako .$res_over['id']? I když by jsi to chtěl napojit tak to nepůjde, protože tam máš zakončení ' za dvojkou.
JunekCZ
Profil
Alphard:
Děkuji, zkoušel jsem to, ale oběvilo se neště více chyb.
sitole
nechtěně jsem tam napsal ?id=2, ta 2 ta normálně není. kód stále nefunguje.

Moderátor Alphard: Opravil jsem. (A smazal několik nyní již zbytečných příspvěků.)
sitole
Profil
A co má být výsledek? Pochopil jsem, že to má přesměrovat na stránku, která bude obsahovat v ?id proměnnou $res_over['id']?


$res_over['id'] = "Ahoj, tak to opravdu funguje..";
header("Location:uzivatel.php?id=".$res_over['id']);
Funguje jak má..
yFang
Profil
JunekCZ:
Předpokládám, že ten kód v ukázce je uzivatel.php, tím pádem
<form action="<?php echo $_server['php_self']; ?>" method="post">
vede na stránku uzivatel.php, není nastaven parametr id a neprojde to hned tou první podmínkou.
mimochodec
Profil
sitole:
$res_over['id'] = "Ahoj, tak to opravdu funguje..";
header("Location:uzivatel.php?id=".$res_over['id']);

co to je?
JunekCZ
Profil
sitole:
To je ID uživatele (Např v tabulce bude Uživatel Michal, který má ID 2, tak to načte uživatele s ID 2.)
mimochodec
Profil
JunekCZ:
Nedá se v tom vyznat, oprav si to.

Tohle je chyba:
 header('Location:uzivatel.php?id=2'.$res_over['id']);   
sitole
Profil
mimochodec, JunekCZ:
Já jsem to pochopil, ale snažil jsem se to malinko popsat. Dle "ID" to asi opravdu nebude nadpis že? :)

mimochodec:
Máš v kodu bordel a při tvorbě dlouhého kodu se neboj vše okomentovat pomocí // Komentář či /* Komentář */
lionel messi
Profil
sitole:
mimochodec:
Máš v kodu bordel a při tvorbě dlouhého kodu se neboj vše okomentovat pomocí // Komentář či /* Komentář */

Ani s komentármi to netreba preháňať, viď Jak psát kód: Nepřežeňte to s komentáři.

JunekCZ:

Skôr než cestou, ktorú naznačil sitole a ktorá povedie k zvýšeniu objemu kódu, no jeho čitateľnosť nijak markantne nezlepší, by som sa uberal smerom k oddeleniu logiky od výstupu, atď.
JunekCZ
Profil
mimochodec:
Ano, tuto chybu jsem již zmínil

JunekCZ:
sitole
nechtěně jsem tam napsal ?id=2, ta 2 ta normálně není. kód stále nefunguje.


Dobrá tedy. Dejme tomu, že se budeme zajímat pouze o tyto dvě části kódu:

1.
<?php
 
session_start();
header('Content-type: text/html;charset=UTF-8');
 
require_once 'db.php';
 
if(isset($_GET['id']) AND $_GET['id']!='')
{
    $id = stripslashes(htmlspecialchars(trim($_GET['id'])));
 
    if(!preg_match("|^[\d]+$|", $id))
    {
        exit("Id musí být číselná hodnota.");
    } else {
 
        if(!empty($_SESSION['login']) AND !empty($_SESSION['heslo']))
        {
 
            $login = $_SESSION['login'];
            $heslo = $_SESSION['heslo'];
            
            $over = mysql_query("SELECT `id` FROM `users` WHERE `login`='".$login."' AND `pass`='".$heslo."'");            
 
            if(mysql_num_rows($over)!=0)
            {
                $res_over = mysql_fetch_assoc($over);
                
                $query = mysql_query("SELECT * FROM `users` WHERE `id`='".$id."'");
                if(mysql_num_rows($query)!=0)
                {
 
                    $result = mysql_fetch_assoc($query);                    
                } else {
                    exit("Uživatel neexistuje.");
                }
                
            } else {
 
                exit("Vstup na tuto stránku je povolen pouze přihlášeným uživatelům.");
            }
        } else {
            exit("Vstup na tuto stránku je povolen pouze přihlášeným uživatelům.");    
        } 
        
    }
 
 
} else { exit("Špatný parametr v URL."); }

A 2.
<?php
if (!isset($_POST['submit'])) {
 
?>
   <link href="style/style.css" rel="stylesheet" type="text/css" />
   <script language="javascript" type="text/javascript" src="js/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
    mode : "textareas",
    theme : "advanced",
    theme_advanced_buttons3 : "",
    theme_advanced_toolbar_location : "top",
    theme_advanced_toolbar_align : "left",
 
});</script>
  <div id="main">
    <div id="caption"><h2>Přidat novinku</h2></div>
      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        <h4>Nadpis novinky:</h4><br/>
        <input type="text" name="title" size="40"/><br/><br/>
        <h4>Novinka (zpráva):</h4><br/>
        <textarea name="newstext" rows="15" cols="67"></textarea><br/>
        <center><?php echo '<a href="uzivatel.php?id='.$res_over['id'].'">'; php?><input type="submit" name="submit" class="btn" value="Save" /></a></center>
     </form>    
 
<?php } else {
   $newsTitel   = isset($_POST['title']) ? $_POST['title'] : 'Untitled';
   $submitDate  = date('d.m H:i');
   $newsContent = isset($_POST['newstext']) ? $_POST['newstext'] : 'No content';
   
   $filename = date('YmdHis');
   $f = fopen('news/'.$filename.".txt","w+");         
   fwrite($f,$newsTitel."\n");
   fwrite($f,$submitDate."\n");
   fwrite($f,$newsContent."\n");
   fclose($f);
   header('Location:uzivatel.php?id=2'.$res_over['id']);   
}
?>

Myslím si, že chyba je někde zde, ale nedokázal jsem jí stále najít.

Moderátor juriad: Doplněno <?php pro správné obarvení.
Keeehi
Profil
var_dump($res_over['id']);
exit;
header('Location:uzivatel.php?id=2'.$res_over['id']);
Co to vypíše?

Doufám, že je jasné že toto nemá být řešení ale způsob, jak vůbec odhalit, kde chyba je.
Davex
Profil
JunekCZ:
Asi jsi ignoroval dost důležitou radu. Chyba je jednoznačně v místě, o kterém psal už [#5] yFang.
JunekCZ
Profil
Davex:
Děkuji, nějak jsem tento komentář přehlédl.
A jak by se tedy dala tato chyba opravit? Nic mě bohůžel nenapadá :/.
Keeehi
Profil
JunekCZ:
Část s action úplně vynechat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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