Autor Zpráva
KMPS
Profil *
hoj,
v while vypisuji opakovaně nějakou délku (číslo) z terého následn vypisuji
dny, hodiny, minuty atd...


if($hodiny!=0)$vypis_hodiny="$hodiny hod.";


stává se mi ale někdy, že díky while se mi přepošle proměná z předchozího výpoštu a pak se mi znova vypíše $vypis_hodiny
potřeboval by jsem vždy tyto položky "resetovat" podobně jako reset()
problém ale je že těch položek je více...

momentálně to mám řešené takto:
$vypis_dny="";
$vypis_hodiny="";
atd...

hrozně se mi to nelíbí a tak se ptám, nedá se vymazat konkrétní položky najednou...
například reset($vypis_dny, $vypis_hodiny)?

díky za radu
Jan Tvrdík
Profil
Co takhle unset? Nebo rozdělit chytře scope pomocí funkcí.
KMPS
Profil *
unset super to by mohlo fungovat :)
díky
Alphard
Profil
No já nevím, jestli je unset ideální řešení. Kde se ty proměnné berou v první iteraci? Není to náhodou tak, že máte kód
if($hodiny!=0)$vypis_hodiny="$hodiny hod.";
a pak bez jakéhokoliv ověření existence proměnné je echo $vypis_hodiny? To samozřejmě není dobře.

Mít tam
$vypis_dny=""; 
$vypis_hodiny="";
které nastaví defaultní hodnoty, se kterými se dále pracuje, je dost možná to nejlepší řešení.
KMPS
Profil *
již jsem nastavit unset a vypadá to mnohel více elegantně "restartuji" tak 6 proměnných :)
a hlavně funguje... s error logem to nic nevyvádí :) takže nevidí problém proč by ne?
Alphard
Profil
KMPS:
a vypadá to mnohel více elegantně
Váš názor :-)

"restartuji" tak 6 proměnných
takže nevidí problém proč by ne?
Pokud jsem správně odhadl [#4] (větší část kódu jste neukázal), tak ty proměnné neresetujete, ale mažete, abyste následně pracoval s nedefinovanými proměnnými. PHP se s tím vyrovná s výpisem Notice, pokud je potlačen, zdá se, že vše skvěle funguje, ale správný přístup to rozhodně není. Nikdy byste neměl pracovat s neexistujícími proměnnými.
R1zo
Profil
Ahoj nechci zakládat nové téma ale toto také souvisí s proměnnýma. Jak správně zapsat a hlavně definovat proměnnou? Kód mám v tomto tvaru.
<?php
if (!isset($page)) 
$page="";
$filename = $page . '.php'; 
if(File_Exists ($filename)) 
{ 
include($filename); 
} 
else 
{ 
include('novinky.php'); 
} 
?>

Ale řekl bych že to nereaguje kvůli té prázdné proměnné $page="";
Děkuji za rady.
Kcko
Profil
<?php

if (isset($_GET['page']){
$page = $_GET['page'];
$filename = $page . '.php'; 
if(File_Exists ($filename)) 
{ 
include($filename); 
} 
else 
{ 
include('novinky.php'); 
} 

}
else
{
include('novinky.php'); 
}
Alphard
Profil
Proměnné jsou široký pojem, lepší by bylo založit nové téma.
Váš problém tipuji spíš na Nejčastější potíže s PHP (FAQ) » Nefungují proměnné z formuláře nebo z URL (vypnuté register globals).

Kcko [#8]:
To NULL je z bláta do louže. Ten prázdný řetězec nebyl až tak špatný (vzhledem k dalším operacím). Lepší je samozřejmě vložit tam hned defaultní řetězec, v tomto případě novinky.
$page = isset($_GET['page']) ? $_GET['page'] : 'novinky';
Mimochodem, ještě lepší je nedávat všude novinky a ošetřit si 404, ale to už bych chtěl asi moc.
Kcko
Profil
Alphard:
Vím, upravil jsem to vzápetí.

Celkově by to mělo spíš vypadat takhle:
$page404 = '404.php';
$defaultPage = 'novinky.php';

if (isset($_GET['page'])
{
    $page = $_GET['page'];
    $filename = $page . '.php';
    if (file_exists($filename))
      include $filename;
    else
      include $page404;
}
else
{
  include $defaultPage;
}
R1zo
Profil
Děkuji moc to od: Alpharda funguje.
Register globals nechci mít on jen pro upřesnění.

Ale mám další problém.
<?php
$Firmy=Array();
$SQLText="SELECT Nazev,Firma_ID FROM Kontakty_Firmy ORDER BY Nazev";
$RS=mysql_query($SQLText,$Conn);
while($row = mysql_fetch_array($RS)) {
    $Firmy[]=$row;
}
$PageSize=10;
if ( (!isset($cPage)) || (empty($cPage)) )
    $cPage=0;

$dbCursor=$PageSize*$cPage;
$maxRec=$PageSize+1;
$isNextRec=0;

$Vysledky=Array();
if (isset($Prijmeni)){
    $SQLText="SELECT Kontakty_Lide.Prijmeni,Kontakty_Lide.Jmeno,Kontakty_Lide.Telefon,";
    $SQLText.="Kontakty_Lide.email,Kontakty_Lide.Komentar,Kontakty_Lide.Kontakt_ID,TKontakty_Firmy.Nazev FROM Kontakty_Lide LEFT OUTER JOIN Kontakty_Firmy ON (Kontakty_Lide.Firma_ID=Kontakty_Firmy.Firma_ID) WHERE (Kontakty_Lide.Prijmeni LIKE '$Prijmeni%')";
    if ($Firma_ID>0)
        $SQLText.=" AND (Kontakty_Lide.Firma_ID=$Firma_ID)";
    $SQLText.=" ORDER BY Kontakty_Lide.Prijmeni";
    $RS=mysql_query($SQLText,$Conn);
    $maxRec=mysql_num_rows($RS);
    $isNextRec=(($dbCursor+$PageSize)<$maxRec) ? 1:0; 
    if ($dbCursor>$maxRec){
        $tmp=(($maxRec-$PageSize)>=0) ? ($maxRec-$PageSize): 0;
        mysql_data_seek($RS,$tmp);
        $cPage=floor($maxRec/$PageSize);
    }
    else
        mysql_data_seek($RS,$dbCursor);
    $i=0;
    while (($row = mysql_fetch_array($RS)) && ($i++<$PageSize) ) {
        $Vysledky[]=$row;
    }
}
mysql_close($Conn);
?>

<table cellpadding=3 cellspacing=0 border=0 width=300>
<!--Main page--><form name=myform action="index.php?akce=hledat_osobu" method=post>
    <tr>
        <td CLASS=SectionTitle COLSPAN=2>Vyhledávání osob</td>
    </tr>
    <tr><td>Příjmení</td><td><input type=text name=Prijmeni value="<?php echo $Prijmeni;?>"></td></tr>
    <tr>
        <td>Firma</td>
        <td><select size="1" name="Firma_ID">
        <option value="0">-- Seznam firem --</option>
<?php
for ($i=0;$i<count($Firmy);$i++){
    echo "<option value=".$Firmy[$i]["Firma_ID"];
    if ($Firmy[$i]["Firma_ID"]==$Firma_ID)
        echo " SELECTED";
    echo ">".$Firmy[$i]["Nazev"]."</option>\n";
}
?>

Píše to že nemám definováno Prijmeni(řádek 46) a Firma_ID (řádek 54) definice je na řádcích 17 a 20. Bylo by řešením tam přidat funkci POST ?
Kajman
Profil
R1zo:
definice je na řádcích 17 a 20

Testováním nastavení proměnné se proměnná nedefinuje.
R1zo
Profil
řádek:54 vyřešen
Alphard_
Profil *
R1zo:
To je pořád stejný problém. Přistupujete buď k proměnným, které neexistují kvůli vypnutému register globals, nebo protože ještě nebyl odeslaný formulář.

Třeba v tom formuláři chcete zobrazit starou hodnotu, pokud existuje. Protože se formulář odesílá metodou post, lze tu hodnotu najít v tomto poli. Stačí tedy upravit na
<input type=text name=Prijmeni value="<?php echo isset($_POST['Prijmeni']) ? $_POST['Prijmeni'] : 0;?>">

Celý kód pište tak, abyste vždy pracoval pouze s proměnnými, které existují.
R1zo
Profil
Alphard:
V tom kodu se jedná o to že do imput příjmení se napíše příjmení a ono to vyhledá do tabulky příslušná data z DB.

Sice bych za to asi dostal přes ústa. Ale už jsem to vyřešil snad.

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: