Autor | Zpráva | ||
---|---|---|---|
KMPS Profil * |
#1 · Zasláno: 13. 6. 2015, 14:31:42
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 |
#2 · Zasláno: 13. 6. 2015, 14:45:24
Co takhle
unset ? Nebo rozdělit chytře scope pomocí funkcí.
|
||
KMPS Profil * |
#3 · Zasláno: 13. 6. 2015, 15:24:37
unset super to by mohlo fungovat :)
díky |
||
Alphard Profil |
#4 · Zasláno: 13. 6. 2015, 15:45:07
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."; echo $vypis_hodiny ? To samozřejmě není dobře.
Mít tam $vypis_dny=""; $vypis_hodiny=""; |
||
KMPS Profil * |
#5 · Zasláno: 13. 6. 2015, 16:25:07
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 |
#6 · Zasláno: 13. 6. 2015, 21:24:19
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. |
||
Časová prodleva: 13 dní
|
|||
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 |
#9 · Zasláno: 26. 6. 2015, 13:36:36
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'; |
||
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 |
#12 · Zasláno: 26. 6. 2015, 15:59:27
R1zo:
„definice je na řádcích 17 a 20“ Testováním nastavení proměnné se proměnná nedefinuje. |
||
R1zo Profil |
#13 · Zasláno: 26. 6. 2015, 17:17:41
řádek:54 vyřešen
|
||
Alphard_ Profil * |
#14 · Zasláno: 26. 6. 2015, 17:35:30
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. |
||
Časová prodleva: 9 let
|
0