Autor Zpráva
pavuk
Profil
Učím se základy PHP a MySQL a chtěl bych docílit aby se odesílaný data nepřidávaly do URL. Metoda POST by to měla obstarat (viz JPW) ale přesto mám proměnný součástí URL. Je to způsobený localhostem nebo nějakou mojí chybou? Formulář i PHP skript fungujou korektně, adresa ale po odeslání vypadá takhle
http://localhost/databaze/suda_licha.php?RaditPodle=jmeno&abc=asc

<form method='post' action=''>
<fieldset>
<legend>Parametry třídění</legend>
<label for='RaditPodle'>Řadit podle:</label>
<SELECT name='RaditPodle' value='RaditPodle'>
<OPTION VALUE="jmeno">Jméno
<OPTION VALUE="prijmeni">Příjmení
<OPTION VALUE="email">E-mail
<OPTION VALUE="narozeni">Narození
</SELECT><br>
Řadit podle abecedy 
<input type="radio" name='abc' value="asc" checked>Sestupně
<input type="radio" name='abc' value="desc">Vzestupně<br>
<input type='submit' value='Odeslat'>
</fieldset>
</form> 

Díky za vysvětlení
Rellik
Profil
Do URL přidává data metoda GET. Proč ti to dělá nevím, podle kódu by to dělat nemělo. Nakonec jedna rada - používej všude stejné uvozovky. Předejdeš tak případným pozdějším problémům, když do toho začneš víc patlat phpčko... ;)
pavuk
Profil
Rellik:
Díky, ale mám je tam v tomhle formátu úmyslně, jsem si vědomej problémů uvozovek. Spíš mi uniká důvod problému s URL
jenikkozak
Profil
pavuk:
Je před odesláním adresa bez hodnot? Vzhledem k tomu, že není uveden action formuláře, odešle se formulář na aktuální adresu (tedy na adresu včetně stávajících parametrů).
pavuk
Profil
jenikkozak:
Díky pane
Proměnný v adrese se měnily podle toho co jsem zadal ve formuláři, takže bez hodnot nebyla, už si s tím hraju několik hodin. Takže jsem na základě toho co jsi napsal vymazal data v URL od otazníku včetně, stránku natáhl (přišla tabulka bez dat) a od tý chvíle to funguje a proměnný se v adrese nevypisujou. Už tak nějak tuším jaks to myslel...
CZechBoY
Profil
nemáš ten formulář náhodou na stránce suda_licha.php a nejsi zároveň na stránce suda_licha.php?RaditPodle=jmeno&abc=asc?
viz třeba: www.testing.jabko.net/form.php
a www.testing.jabko.net/form.php?RaditPodle=jmeno&abc=asc
pavuk
Profil
Ano, přesně tak, už to nastínil jenikkozak a z toho jsem to odvodil
martinix06
Profil
Ahoj lidi...

Mám stejný problém, a sice, že mi nefunguje metoda post ve formuláři. Pravda je, že tak jak to tu popisujete to jede. Hned vysvětlím...

Mám index.php. Z něj includuji registration.php (include $site.".php"), takže jsem na stránce index.php?site=registration a když odešlu data metodou post (zjednodušil jsem to na jeden údaj cgf) bez action, tak se mi upraví adresa na index.php?site=registration&cgf=0700490. Takže se hodnota cgf nepředá v POST, ale v GET. To je špatně.

Ale nechápu, proč, když rovnou zavolám registration.php (nikoliv přes index.php?site=registration), tak to funguje, stránka je registration.php a v $_POST[cgf] mám správně hodnotu.

Může mi to někdo vysvětlit pls?

v index.php
<?php include $site.".php"; ?>

v registration.php
<form method="post" action="">
<input type="text" name="cgf">
<input type="submit" value="ODESLAT">
</form>

Jinak jsem v action zkusil jak "", tak "index.php?site=registration" a ani jedno nejelo :(

Předem díky za ochotu...
Tori
Profil
Nemáte za zpracováním formuláře nějaké přesměrování na tu adresu s parametrem cfg?
martinix06
Profil
Tori:
úplně jsem to zjednodušil a vytvořil dva soubory, takže index3.php teď obsahuje toto:
<?php include "rrr.php"; ?>

A soubor rrr.php obsahuje:
<form method="post" action="">
<input type="text" name="cgf">
<input type="submit" value="ODESLAT">
</form>

<?php
if (isset($_POST['cgf'])) { echo "cgf=".$_POST['cgf']; }
else { echo "spatne..."; }

Takhle to funguje perfektně, při načtení index3.php je zobrazen form a pod nim spatne, což je správně a po odeslání je pod form hodnota cgf.

Takže předpokládám, že bude chyba někde v kódu původním. Nechce se mi sem dávat celý zdroj (je to dost dlouhé), tak pokud mohu poprosit, tak bych to poslal mailem, zda byste někde neobjevil chybu, už se v tom patlám dobu a nějak mi to hlava nebere...


Tori:
Dokonce to funguje i takto (když volám index3.php?site=rrr): index3.php:
<?php
   if (isset($_GET['site'])) {
        $stranka=$_GET['site'].".php";
   }
include $stranka; ?>

A rrr.php
<form method="post" action="">
<input type="text" name="cgf">
<input type="submit" value="ODESLAT">
</form>
<?php
if (isset($_POST['cgf'])) { echo "cgf=".$_POST['cgf']; }
else { echo "spatne..."; }

Když vypíšu takto proměnné post a get, tak v get mám site=rrr a cgf=hodnota z form....

Tak nechápu, proč to nejede v tom původním sestavení.... rád to pošlu mailem na prozkoumání, moc děkuji ;)
Tori
Profil
Hoďte to třeba na pastebin.
martinix06
Profil
Marschmallow:
Tak díky, to to můžu dát sem: soubor registration.php... ale bez ostatních těžko chybu najdeme... když ho volám rovnou jako registration.php, tak funguje, když přes index.php?site=registration tak ne...
<?php
   echo ('
      <center><b>REGISTRACE DO SÉRIE</b></center>
      <br>
   ');

   if (isset($_POST['cgf'])) { echo "cgf=".$_POST['cgf']."<br><br>"; } else { echo "_post[cfg] není definováno.<br><br>"; }

?>

      <table celsspacing="5" cellpadding="5" border="0" align="center" width="600">
      <form method="POST" action="">
         <tr>
            <td align="right">Členské číslo ČGF</td>
            <td><input type="text" name="cgf" class="tlacitko" maxlength="7" size="7" placeholder="Zadejte..."> (např. 0700490)</td>
         </tr>
         <tr>
            <td colspan="2" align="center"><br><input type="submit" value="REGISTROVAT" class="tlacitko" style="font-weight: bold;"></td>
         </tr>
      </table>
      </form>
Alphard
Profil
martinix06:
Jde spíš o PHP kód, další html útržky teď asi nepomohou. Vzhledem k tomu, že se míchají dohromady $_GET a $_POST data, zkusil bych fulltextem najít jestli se někde poblíž přesměrování nepoužívá $_REQUEST, ale je to samozřejmě jenom tip.

Pokud to nepomůže, neměl by být velký problém trochu to debuggovat. I primitivním vkládáním exit by mělo jít relativně rychle zjistit, v jakém místě se to blbě přesměruje.
Jan Tvrdík
Profil
martinix06:
Dáváš sem pořád kódy, které fungují. Na tom není, co opravovat. Pakliže to nefunguje pouze s index.php, tak chyba bude pravděpodobně v index.php.
martinix06
Profil
Alphard:
$_REQUEST nikde nevyužívám, ale díky za tip...

Jan Tvrdík:
index.php

<?php
   include ("config.php");
   if (!isset($_GET['year'])) { $year='2015';} else { $year=$_GET['year']; }
   if (!isset($_GET['site'])) { $site='news'; } else { $site=$_GET['site']; }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Janov Trip Series <?php echo $year; ?> (JTS)</title>
<link rel="stylesheet" href="style.css" type="text/css">
<link rel="stylesheet" href="lightbox.css" type="text/css">
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
<link rel="icon" href="img/favicon.ico" type="image/x-icon">
<script src="jquery.js"></script>
<script src="lightbox.js"></script>
<link rel="stylesheet" href="menu_files/mbcsmbmcp.css" type="text/css" />
<script src="intro/intro.js" language="JavaScript" type="text/javascript"></script>
</head>
<body onLoad="animation()">
<table width="1000" align="center" cellpadding="0" cellspacing="0" style="background-color: #FAFAFA; border-right: 5px solid #1ea61e;">
   <tr>
      <td height="300" style="padding:0px;" width="1000" align="left"><?php include "top_anim.php"; ?></td>
   </tr>
   <tr>
      <td colspan="2" align="justify" height="500" style="background: url('img/bg.png') no-repeat 500px 0px;padding:10px; background-color: #FFFFFF; border-right: 0px solid darkgreen;" valign="top">
         <?php include $site.".php"; ?><br><br>
      </td>
   </tr>
<?php
if ($site=="partner") {  }
else {
?>
   <tr>
      <td height="200" colspan="2" style="border-top: 2px solid #c70121; background-color: #FAFAFA;" valign="center" align="center">
         <?php include "partners.php"; ?>
      </td>
   </tr>
<?php
}
?>
   <tr>
      <td colspan="2" height="20" style="color: gray;font-size:12px; border-top: 1px solid silver; background-color: #FAFAFA;" valign="center" align="right"><?php include "zapati.php"; ?></td>
   </tr>
</table>
</body>
</html>

a config.php

<?php
// nastavení databáze
$dbserver="localhost";
$dbuser="root";
$dbpass="";
$dbname="khgcs";

// spojovací fce
function dbcon()
{
@$spojeni=mysql_connect($GLOBALS["dbserver"],$GLOBALS["dbuser"],$GLOBALS["dbpass"]);
if (!$spojeni):
  die('Spojeni se serverem nelze vytvorit! / Could not connect to database server!');
endif;
mysql_select_db($GLOBALS["dbname"],$spojeni);
$set_collate = mysql_query("SET CHARACTER SET utf8");
return $spojeni;
}
$dbspojeni=dbcon();
$GLOBALS["dbspojeni"]=&$dbspojeni;
?>
Jan Tvrdík
Profil
martinix06:
Opět funkční kód, s tím toho moc neuděláme. Nerozbíjí ti to třeba nějaký JS? Prostě odmazávej kusy kódu tak dlouho, až to začne fungovat, čímž izoluješ tu problematickou část.
martinix06
Profil
Jan Tvrdík:
Díky, na to se chystám, už jsem něco odmazal, ale pořád nic... Tak uvidím, proč to nejede a co tomu brání :(


Tak díky všem, celý problém byl v jedné chybičce, a sice jsem v jednom souboru neměl ukončený tag <form> respektive jsem ho neukončil </form> ale opět <form>, takže jsem jej neukončil, ale otevřel jsem nový. Po opravě to už funguje.

Jsem lama no, ale opravdu děkuji všem za snahu pomoci. Těžko se hledá taková prkotina, ale nejlépe jsem na to přišel po radě Honzy Tvrdíka, ještě jednou díííky :)

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: