Autor Zpráva
Mickey76
Profil
Ahoj, potreboval bych pomoc zkusenejsich, proc nefunguje "spravne" nize uvedeny script.
Cesta ke scriptu je <a href="index.php?akce=popis&save_polozky=1">Přidat</a>


<?
mysql_connect( ...........) or die("Není možné se připojit k databázovému server.");
mysql_select_db(..........) or die("Není možné spojení s databází ......");


if ($save_polozky["odeslano"]){
{
if ($_POST["CatalogueNumber"]=="" || $_POST["CatalogueNumber"]=="");
{
echo "<strong><font color='red' size='2'>Není vyplněné katalogové číslo!!!</strong></font><br>\n";
}
{
if ($_POST["IDES"]=="" || $_POST["IDES"]=="")
{
echo "<strong><font color='red' size='2'>Není vyplněn IDES kód!!!</strong></font><br>\n";
}
{
if ($_POST["Name"]=="" || $_POST["Name"]=="")
{
echo "<strong><font color='red' size='2'>Není vyplněn název položky!!!</strong></font><br>\n";
} else {
mysql_query("INSERT into polozky (CatalogueNumber) VALUES ('".$_POST["CatalogueNumber"]."')");
mysql_query("INSERT into vlastnosti (CatalogueNumber) VALUES ('".$_POST["CatalogueNumber"]."')");
{
echo "Položka $_REQUEST[CatalogueNumber] byla úspěšně uložena do databáze, můžete pokračovat.\n";
}
}
}
}
}
}
?>

<form method="post" name="save_polozky" action="index.php?popis&save_polozky=1">

<table border="0" cellpadding="2" cellspacing="0" width="100%">
<tr>
<td>&nbsp;&nbsp;Katagolové číslo:</strong></td>
<td><input type="text" size="15" name="CatalogueNumber" value="<?echo $_POST["CatalogueNumber"]?>"></td>
<td>Kód výrobce:</strong></td>
<td>IDES:</strong></td>
<td><input type="text" size="15" name="IDES" value="<?echo $_POST["IDES"]?>"></td>
</tr>
<tr>
<td>&nbsp;&nbsp;Název položky:</strong></td>
<td colspan="4"><input type="text" style="width:93%" name="Name" value="<?echo $_POST["Name"]?>"></td>
</tr>
<tr>
<td align="center" colspan="5"><input type="submit" name="odeslano" value="Uložit data do databáze"></td>
</tr>
</table>
</form>
<?endif?>

Mozna bude chyba v souboru akce.php, takze i tento soubor pripojuji.

<?php
$akce=$_POST["akce"]; // incializujeme promennou
$uvodni="stred.php"; // toto je uvodni stranka kdyz nebude PAGE volana v URL

if ($akce) { // pokud volame page v URL tak vykonavame dalsi kroky ...
if (file_exists("./".$akce.".php")) // a pokud ten soubor existuje tak ho vlozime
include("./".$akce.".php"); // pokud neexistuje
else { include "./"."404.php"; } // vlozime Chybovou stranku
}
else{ // a pokud PAGE nevolame v URL nacte se nejaka uvodni stranka
include ("./".$uvodni);
}
?>
peta
Profil *
Mickey76
Mno, schazi celej formular.
Schazi rici, jake chyby vypisuje PHP?
Schazi nejaky odkaz na stranku, kde ty chyby vidim...
A PHP se testuje tak, ze si nechas vypsat vysledky vsech podminek, promennych a tak.
Treba mas chybu v podmince a script nedostane sva data, splni se podminka aaa=="" a script skonci, ze? :)

Muj posledni redistracni script vypada takto:

<?php
ob_start();
session_start();

include("./sezsetup.php");

$where="registration";
$chyba='';

/* ban ip ? */
$ip=getIP();
$i=0;$i=PPfindIP($tb1,$ip);
if($i===0)
{

if (count($HTTP_POST_VARS) && $_POST['userLogin'])
{
$u = array();
$u['login'] = $_POST['userLogin'];
$psw1 = $_POST['userPsw1'];
$psw2 = $_POST['userPsw2'];
$u['mail'] = $_POST['userMail'];
$u['lang'] = $_POST['userLang'];

$u['login'] = substr($u['login'],0,16);
$u['login'] = Ereg_Replace("[^a-zA-Z0-9]", "" , $u['login']);

$u['psw'] = ($psw1==$psw2)?$psw1:"";
$u['psw'] = substr($u['psw'],0,16);
$u['psw'] = Ereg_Replace("[^a-zA-Z0-9]", "" , $u['psw']);

$u['mail'] = substr($u['mail'],0,240);
if (!EReg("@",$u['mail']) ) $u['mail']="";
$u['mail'] = Ereg_Replace("@","\@",$u['mail']);
$u['mail'] = substr($u['mail'],0,250);

$u['lang'] = substr($u['lang'],0,3);
$u['lang'] = Ereg_Replace("[^a-zA-Z0-9]", "" , $u['lang']);
include_once("lang-cz.php");
$u['lang'] = ($lng['s_Lang'][1][$u['lang']]!=="")?$u['lang']:"";


$ip = getIP();

$datum = date("Y-m-d H:i:s",time());

$i=1;$ch="";
foreach ($u as $key => $value)
{if ($value==="" || $value===" ") {$i=0;$ch.=$key." ";}}

if ($i===1)
{
$u['psw'] = md5($u['login'].$u['psw']);
$i=PPfindUser($tb1,$u['login'],$u['psw'])?1:0;
if($i===0)
{
/* vlozeni zaznamu do databaze */
$tabulka = $tb1."user";
$dotaz = ""; $b=57-1;for ($i=0;$i<$b;$i++) $dotaz.="','";
$dotaz = "INSERT INTO $tabulka VALUES ('$id','".$u['login']."','".$u['psw']."','".$u['mail']."','$ip','".$u[ 'lang']."','0','50','$where','$datum','$datum','$dotaz')";
mysql_query($dotaz) or die("DB error: add user = ".mysql_error());

$_SESSION['login'] = $u['login'];
$_SESSION['psw'] = $u['psw'];
$_SESSION['lang'] = $u['lang'];
}
else $chyba.= " | Uzivatel \"".$u['login']."\" patri nekomu jinemu, vyplnte prosim jine udaje!";
}
else $chyba.= " | Chybne udaje ".$ch;
}
else $chyba.= " | Zadne nebo chybne udaje";
}
else $chyba.= " | Banovane ip! ";

mysql_Close();
if($chyba!=="") Header( "Location: ".$fn1."reg.php?chyba=".$chyba."&userLogin=".$_POST['userLogin']."&use rPsw1=".$_POST['userPsw1']."&userPsw2=".$_POST['userPsw2']."&userMail= ".$_POST['userMail']."&userLang=".$_POST['userLang'] );
else Header( "Location: ".$fn1.".php?". session_name() ."=". session_id());

ob_end_flush();
?>


<? $where='reg'; include("./a-head.php"); ?>



<form name="f1" action="<?=$fn1?>zreg.php" method="post" enctype="multipart/form-data" onsubmit="return f1Check(this)">
<fieldset>
<legend><?=$lng['l_'.$where]?></legend>

<table align="center">
<tbody valign="top">
<tr> <td><b><?=$lng['i_Login']?></b></td>
<td><input type="text" value="<?=$_GET['userLogin']?>" name="userLogin" /></td></tr>
<tr> <td><b><?=$lng['i_Password']?></b></td>
<td><input type="password" value="<?=$_GET['userPsw1']?>" name="userPsw1" /></td></tr>
<tr> <td><b><?=$lng['i_Password']?></b></td>
<td><input type="password" value="<?=$_GET['userPsw2']?>" name="userPsw2" /></td></tr>
<tr> <td><b><?=$lng['i_Mail']?></b></td>
<td><input type="text" value="<?=$_GET['userMail']?>" name="userMail" /></td></tr>
<tr> <td><b><?=$lng['s_Lang'][0]?></b></td>
<td>
<?php
$t="\n".'<select name="userLang">';
foreach ($lng['s_Lang'][1] as $key => $value)
$t.="\n".'<option value="'.$key.'" '.(($key==$_GET['userLang'])?' selected="selected"':'').'>'.$value.'</option>';
$t.="\n</select>\n";
echo $t;
?>
</td></tr>
<tr> <td colspan="2"><?=$lng['i_Rules']?><br/>
<textarea rows="5" cols="40" readonly="readonly">444</textarea>
</td></tr>

</table>
<p align="center">
<input type="reset" value="<?=$lng['b_Reset']?>" class="butt" />
<input type="submit" value="<?=$lng['b_Submit']?>" class="butt" />
</p>
</fieldset>
</form>




</body></html>


(plus nejake soubory kolem s nazvem databaze, jazykovym souborem a podobne.)
peta
Profil *
mimochodem, jsou to 2 soubory.
ob_end_flush();
?>
je konec souboru1
Mickey76
Profil
Doplnil jsem chybejici udaje do formulare (je to pouze zkracena verze, abych tady setril mistem, ale jinak je vsechno stejne co se tyce formulare).
Stranky nemam na netu, delam si na to localhostu.
PHP zadne chyby nevypisuje, pouze kdyz prijdu na tento formular pres odkaz <a href="index.php?akce=popis&save_polozky=1">Přidat</a>, tak se automaticky zobrazi cely formular + chyby, ze je neco nevyplnene. Ja treba vyplnim nejakou polozku a dam ulozit do databaze, do databaze se to neulozi a neobjevi se opet cisty formular pro dalsi zadavani (objevi se pouze prazdna stranka).

Jsem zacatecnik, tak na to ber prosim zretel. :o)

Tomas
S.P.Q.R
Profil *
nejsem znalec PHP ani html presto jsem vytvoril stranky :o))) ale stahnul jsem si chat podle nahledu slusný ale nedokazu ho rozchodit. forum v PHP na stranky dat umim nastaveni atd mi taky nedela problem ales s tim chatem nehnu...pomuze nekdo?
Vaclav
Profil *
Doufám Tome, že už jsi na to kápnul. Podle mě je to jednoduché.

1) Odkaz, který uvádíš jako funkční - <a href="index.php?akce=popis&save_polozky=1"> se neshoduje s prvou řádkou formuláře <form method="post" name="save_polozky" action="index.php?popis&save_polozky=1"> . Toto beru jako překlep a držím se údajů v odkazu.

2) Deklarace action=... . Proměnné za příponou odkazovaného souboru (v Tvém případě .php ale může to být např. .html) se tak, jak to chceš nepřenesou dále. Ověřit si to můžeš jednoduše tak, že umažeš method="post" , odešleš formulář a nahoře v řádku adresy uvidíš, že ve skutečnosti odkazuješ pouze na index.php + textová pole. Neuvidíš ale proměnné ovlivňující podmínku uložení dat do databáze, ve Tvém případě akce=popis&save_polozky=1.

Řešení je jednoduché - vlož do formuláře (např. pod řádek <form ...> 2 tzv. skrytá pole:
<input type=hidden name=akce value=popis>
<input type=hidden name=save_polozky value=1>

Uvidíš, jak to bude běhat!

Čau.
Mickey76
Profil
Ahoj Vasku, dekuji, ano mas pravdu beha to, ale ma to jednu chybu, pri odeslani formulare se formular automaticky nevynuluje (zustavaji tam data). Nevis nahodou, jak to vyresit, aby byl po ulozeni dat do databaze formular prazdny?
Jo a taky jsem si ted vsimnul, ze nejsou kontrolovany polozky, konkretne CatalogueNumber a IDES. Nevis co s tim?

Diky Tomas
Vaclav
Profil *
Existuje samozřejmě řešení např. pomocí proměnných $_SESSION["formVars"] což jsou proměnné, na které se dostaneš např. $formVars["CatalogueNumber"] a jejichž hodnota se po určitých krocích (uložení dat...) dá měnit.

Tento způsob je výhodný např. v případech, kdy při kontrole dat ve formuláři chceš zobrazit konkrétní chybu zadaných dat pod konkrétní textové pole.

Být Tebou použil bych naprosto základní řešení, kdy po uložení dat přejdeš na čistou stránku se sdělením např. "Data byla vložena do databáze, pokračujte výběrem ..." . Naopak nastala-li chyba při připojení k databázi a data uložena nebyla, dá se taková stránka použít způsobem "Chyba při ukládání dat. Udělejte něco ... ".

Kontrolu dat ve formuláři bych rozlišil na dvě kategorie:
1) Kontrola regulérně správného vyplnění polí (např. nezůstalo-li pole prázdné či nepřesahuje-li počet číslic tel. čísla 9, resp. 14 atd.). To se dá vyřešit např. JavaScriptem, problém je, když má klient JavaScript v prohlížeči vypnutý. Proto bych volil sice pomalejší, ale z tohoto pohledu spolehlivější kontrolu pomocí podmínky v php.
2) Kontrola systémového vložení dat (např. nevyskytuje-li se uživatelské jméno již v databázi, není-li identifikační číslo výrobku použito vícekrát ...) To se dá vyřešit pouze podmínkou v php ve spojení s databází, do které se mají data ukládat.

Zdar.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0