Autor Zpráva
HolyDday
Profil *
Sice se může zdát, že se téma týká spíše databáze, není to tak. Chybu budu mít nejspíše v PHP kódu. Našel jsem problém s updatováním jedné položky v databázi. Zatím nikdy jsem podobný problém neměl, a to postupuji stejně jako u updatování jiných položek databáze. Pro lepší představu kód:

<script>

function kontrolaDat(vstup){
if(vstup.jmeno.value==""||vstup.heslo.value!=vstup.heslo2.value) // prázdný
{alert("Špatně vyplněný formulář! Buď jste nevyplnili všechny povinné údaje, nebo se vám neshodují obě hesla. Prosíme opravte chybu a odešlete formulář znovu. Povinné údaje jsou uvedeny tučně."); return false;}
else return true;
}
</script>

<?
include "********";
$vsechny_zaznamy = MySQL_Query("SELECT * FROM rs_uzivatele WHERE uzivatel = '$jmeno'");
$zaznam = MySQL_Fetch_Array($vsechny_zaznamy);
?>

<h1>Editace údajů uživatele <? echo $jmeno; ?>, krok 1</h1>
<h3>Úprava údajů</h3>

<? if((!empty($_SESSION['prihlasen']))and($_SESSION['prihlasen']===1)and( $_SESSION['uzivatel']===$jmeno))
{ ?>
<form action="<? echo $sekce; ?>-profil-uprav2" method="post" ENCTYPE="multipart/form-data" onsubmit="return kontrolaDat(this)">
<table>

(...)

<tr><td>Změnit template? </td><td><input onfocus="document.getElementById('design').disabled=false;" type="radio" name="design_zmenit" value="ano">ano&nbsp;&nbsp;<input onfocus="document.getElementById('design').disabled=true;" type="radio" name="design_zmenit" value="ne" checked>ne&nbsp;&nbsp;</td></tr>

<TR><TD>Template webu: </TD><TD><select name="design" size="1" id="design" disabled><option value="1">Brown (default)<option value="2">Desert</select></TD><td> </td>
</TR>

<tr><td>Odeslat údaje: </td><td><input type="submit" value="Odeslat"></td><td> (odešle všechny vámi doposud vyplněné údaje)</td></tr>

</table>
</form>
<?}
else
{ echo "Pro úpravu profilu se musíte přihlásit za uživatele " . $jmeno . ".";} ?>



Soubor, který data zpracovává:

<? 

include "*********";
$vsechny_zaznamy = MySQL_Query("SELECT * FROM rs_uzivatele WHERE uzivatel = '$jmeno'");
$zaznam = MySQL_Fetch_Array($vsechny_zaznamy);
?>

<h1>Editace údajů uživatele <? echo $jmeno; ?>, krok 2</h1>
<h3>Potvrzení o editaci</h3>


<? if((!empty($_SESSION['prihlasen']))and($_SESSION['prihlasen']===1)and( $_SESSION['uzivatel']===$jmeno))
{


$update = "...";
$update2 = "...";
$update3 = "...";
$update4 = "...";
$update5 = "UPDATE rs_uzivatele SET design = '$design' WHERE uzivatel LIKE '$jmeno'";

MySQL_Query($update);
MySQL_Query($update2);
if($datum_zmenit=="ano") MySQL_Query($update3);
if($heslo_zmenit=="ano") MySQL_Query($update4);
if($design_zmenit=="ano"){ MySQL_Query($update5); echo "Vámi provedené změny v nastavení templatu se projeví až po kliknutí na další odkaz.<br>"; }

echo "<br><br>Vaše údaje byly úspěšně upraveny.<br><br><a href="" . $sekce . "-zobraz-profil?jmeno=" . $jmeno . "">Zobrazit</a> váš profil"; }
else
{ echo "Pro úpravu profilu se musíte přihlásit za uživatele " . $jmeno . ".";} ?>



Má se změnit template, který používá registrovaný a přihlášený uživatel. Má se změnit číslo v databázi (design(int,2)), které určuje číslo používaného templatu. Problém je v tom, že se položku podaří updatovat často až napodruhé. Někdy se neupdatuje vůbec, někdy se updatuje, ale do DB se zapíše 0. Napodruhé už to bývá v pořádku. Díky za případné rady :)
Apostolus
Profil
Nelíbí se mi $update5, nemělo by to být:

$update5 = "UPDATE rs_uzivatele SET design = '$design' WHERE uzivatel = '$jmeno'";

a ne :

$update5 = "UPDATE rs_uzivatele SET design = '$design' WHERE uzivatel like '$jmeno'";

?
Alphard
Profil
ani jsem to nečetl celé, takže pro začátek
nevidím session_start();
<? doporučuji nahradit za <?php (záleží to na nastavení, může to fungovat, ale nemusí, při změně hostingu by seto mohlo hodit)
WHERE uzivatel LIKE '$jmeno'
proč to like?
$update = "...";
$update2 = "...";
$update3 = "...";
$update4 = "...";
$update5 = "UPDATE rs_uzivatele SET design = '$design' WHERE uzivatel LIKE '$jmeno'";
MySQL_Query($update);
MySQL_Query($update2);

WTF?
kde bereš $jmeno, atd.?
HolyDday
Profil *
Mno myslel jsem, že u řetězců se používá LIKE, u čísel =. Každopádně u $update2,3,4 mám taky LIKE a funguje to správně.
HolyDday
Profil *
$jmeno je z formuláře. Vím, že by to mělo být $_POST["jmeno"], ale všechny proměnné mi fungují, takže jsem neviděl důvod je přepisovat do podoby $_POST["..."]
HolyDday
Profil *
session_start(); tam je, jen trochu složitěji. Tento soubor je součástí souboru index.php, do kterého je includován soubor zajišťující přihlašování a odhlašování, to funguje. V tomhle problém není.
HolyDday
Profil *
Sice mi to vždy fungovalo, ale zkusím tedy nahradit LIKE a pak napíšu. Díky za rady.
HolyDday
Profil *
Tak už jsem chvilku myslel, že to pomohlo, ale opět jsem našel v databázi hodnotu 0. V jednu chvíli jsem změnil ve formuláři metodu odeílání na GET. Data se odeslala vždy správně, žádná 0, takže tady by problém být neměl.
Apostolus
Profil
mno tak si můžeš přepsat $jmeno = $_POST['jmeno']; takže i tak bych to udělal...

pak mi příjde tahle konstrukce dost neohrabaná, takže bych hledal chybu tady...



$update = "...";
$update2 = "...";
$update3 = "...";
$update4 = "...";
$update5 = "UPDATE rs_uzivatele SET design = '$design' WHERE uzivatel LIKE '$jmeno'";

MySQL_Query($update);
MySQL_Query($update2);
if($datum_zmenit=="ano") MySQL_Query($update3);
if($heslo_zmenit=="ano") MySQL_Query($update4);
if($design_zmenit=="ano"){ MySQL_Query($update5); echo "Vámi provedené změny v nastavení templatu se projeví až po kliknutí na další odkaz.<br>"; }





Mohl by si udělal kontrolu nejdřív a pak všechno updatovat najednou...

$update = "UPDATE rs_uzivatele SET neco = neco_jineho, neco1 = neco_jineho1 WHERE uzivatel = '$jmeno'";
HolyDday
Profil
S tím $_POST['jmeno']; máš asi pravdu. Jenom je zajímavý, že ten skript občas funguje, občas ne.
Apostolus
Profil
Takže to funguje?

pokud ne, kde bereš proměnný $*_zmenit?
HolyDday
Profil
Asi bude lepší, když vypíšu kompletní formulář:


<form action="<? echo $sekce; ?>-profil-uprav2" method="post" ENCTYPE="multipart/form-data" onsubmit="return kontrolaDat(this)">

<table>

<tr><td>Vaše jméno / nick: </td><td><input type="text" name="jmeno" size="15" maxlength="40" value="<?echo $zaznam["uzivatel"];?>" readonly></td><td> (tento údaj nemůžete změnit, o změnu požádejte admina)</td></tr>

<tr><td>Změnit heslo? </td><td><input onfocus="document.getElementById('heslo').disabled=false;document.getE lementById('heslo2').disabled=false;" type="radio" name="heslo_zmenit" value="ano">ano&nbsp;&nbsp;<input onfocus="document.getElementById('heslo').disabled=true;document.getEl ementById('heslo2').disabled=true;" type="radio" name="heslo_zmenit" value="ne" checked>ne&nbsp;&nbsp;</td></tr>

<tr><td>Heslo: </td><td><input type="password" id="heslo" name="heslo" size="15" maxlength="40" value="" disabled></td><td> (max. 40 znaků)</td></tr>

<tr><td>Heslo podruhé: </td><td><input type="password" id="heslo2" name="heslo2" size="15" maxlength="40" value="" disabled></td><td> (potvrzení hesla, max. 40 znaků)</td></tr>

<tr><td>Vaše e-mailová adresa: </td><td><input type="text" name="email" size="20" maxlength="80" value="<?echo $zaznam["email"];?>"></td><td> (max. 80 znaků)</td></tr>

<tr><td>Veřejný e-mail: </td><td><input id="verejny_ano" type="radio" name="email_verejny" value="ano"<? if($zaznam["email_verejny"]=="ano") echo " checked";?>>Ano&nbsp;&nbsp;&nbsp;<input id="verejny_ne" type="radio" name="email_verejny" value="ne"<? if($zaznam["email_verejny"]=="ne") echo " checked";?>>Ne</td><td> (nastaví, zda můžou vaši e-mailovou adresu vidět i ostatní uživatelé)</td></tr>

<tr><td>Vaše ICQ číslo: </td><td><input type="text" name="icq" size="9" maxlength="9"<? if($zaznam["icq"]!=0) echo " value="" . $zaznam["icq"] . "">"; else echo ">";?></td><td> (přesně 9 čísel, bez pomlček)</td></tr>

<tr><td>Vaše MSN číslo: </td><td><input type="text" name="msn" size="9" maxlength="9"<? if($zaznam["msn"]!=0) echo " value="" . $zaznam["msn"] . "">"; else echo ">";?></td><td> (přesně 9 čísel, bez pomlček)</td></tr>

<tr><td>Bydliště: </td><td><input type="text" name="bydliste" size="15" maxlength="40" value="<?echo $zaznam["bydliste"];?>"></td><td> (max. 40 znaků)</td></tr>

<tr><td>Změnit datum nar.? </td><td><input onfocus="document.getElementById('novy_den').disabled=false;document.g etElementById('novy_mesic').disabled=false;document.getElementById('no vy_rok').disabled=false;document.getElementById('stary_den').disabled= true;document.getElementById('stary_mesic').disabled=true;document.get ElementById('stary_rok').disabled=true;" type="radio" name="datum_zmenit" value="ano">ano&nbsp;&nbsp;<input onfocus="document.getElementById('novy_den').disabled=true;document.ge tElementById('novy_mesic').disabled=true;document.getElementById('novy _rok').disabled=true;document.getElementById('stary_den').disabled=fal se;document.getElementById('stary_mesic').disabled=false;document.getE lementById('stary_rok').disabled=false;" type="radio" name="datum_zmenit" value="ne" checked>ne&nbsp;&nbsp;</td></tr>

<tr><td>Datum narození: </td><td><input size="3" type="text" name="narozen_den" value="<? echo $zaznam["narozen_den"]; ?>." id="stary_den" readonly>&nbsp;&nbsp;<input type="text" size="3" name="narozen_mesic" value="<? echo $zaznam["narozen_mesic"]; ?>." id="stary_mesic" readonly>&nbsp;&nbsp;<input type="text" size="5" name="narozen_rok" value="<? echo $zaznam["narozen_rok"]; ?>" id="stary_rok" readonly></td><td></td></tr>

<tr><td>Nové datum: </td><td><select name="narozen_den" size="1" id="novy_den" disabled><option value="1">1.<option value="2">2.<option value="3">3.<option value="4">4.<option value="5">5.<option value="6">6.<option value="7">7.<option value="8">8.<option value="9">9.<option value="10">10.<option value="11">11.<option value="12">12.<option value="13">13.<option value="14">14.<option value="15">15.<option value="16">16.<option value="17">17.<option value="18">18.<option value="19">19.<option value="20">20.<option value="21">21.<option value="22">22.<option value="23">23.<option value="24">24.<option value="25">25.<option value="26">26.<option value="27">27.<option value="28">28.<option value="29">29.<option value="30">30.<option value="31">31.</select>&nbsp;&nbsp;<select name="narozen_mesic" size="1" id="novy_mesic" disabled><option value="1">ledna<option value="2">února<option value="3">března<option value="4">dubna<option value="5">května<option value="6">června<option value="7">července<option value="8">srpna<option value="9">září<option value="10">října<option value="11">listopadu<option value="12">prosince</select>&nbsp;&nbsp;<select name="narozen_rok" size="1" id="novy_rok" disabled><option value="2004">2004<option value="2003">2003<option value="2002">2002<option value="2001">2001<option value="2000">2000<option value="1999">1999<option value="1998">1998<option value="1997">1997<option value="1996">1996<option value="1995">1995<option value="1994">1994<option value="1993">1993<option value="1992">1992<option value="1991">1991<option value="1990">1990<option value="1989">1989<option value="1988">1988<option value="1987">1987<option value="1986">1986<option value="1985">1985<option value="1984">1984<option value="1983">1983<option value="1982">1982<option value="1981">1981<option value="1980">1980<option value="1979">1979<option value="1978">1978<option value="1977">1977<option value="1976">1976<option value="1975">1975<option value="1974">1974<option value="1973">1973<option value="1972">1972<option value="1971">1971<option value="1970">1970<option value="1969">1969<option value="1968">1968<option value="1967">1967<option value="1966">1966<option value="1965">1965<option value="1964">1964<option value="1963">1963<option value="1962">1962<option value="1961">1961<option value="1960">1960<option value="1959">1959<option value="1958">1958<option value="1957">1957<option value="1956">1956<option value="1955">1955<option value="1954">1954<option value="1953">1953<option value="1952">1952<option value="1951">1951<option value="1950">1950<option value="1949">1949<option value="1948">1948<option value="1947">1947<option value="1946">1946<option value="1945">1945<option value="1944">1944<option value="1943">1943<option value="1942">1942<option
HolyDday
Profil
Není to tu celé, takže pokračování


<tr><td>Váš web: </td><td><input type="text" name="web" size="20" maxlength="40" value="<?echo $zaznam["web"];?>"></td><td> (max. 40 znaků)</td></tr>


<tr><td>Povolání: </td><td><input type="text" name="povolani" size="15" maxlength="40" value="<?echo $zaznam["povolani"];?>"></td><td> (max. 40 znaků)</td></tr>

<tr><td>Zájmy: </td><td><input type="text" name="zajmy" size="20" maxlength="80" value="<?echo $zaznam["zajmy"];?>"></td><td> (max. 80 znaků)</td></tr>

<? if($zaznam["obrazek"]=="true"): echo "<tr><td>Smazat avatar: </td><td><input type="checkbox" name="smazat_obr" value="true"></td><td></td></tr>"; endif; ?>

<TR><TD>Avatar: </TD><TD><INPUT TYPE="FILE" SIZE=20 NAME="avatar" ACCEPT="image/*"></TD><td> (max. 20 kB, 100x100 px)</td>
</TR>

<? if($zaznam["obrazek"]=="true"){
if($zaznam["typ"]==2): $koncovka = "jpg"; elseif($zaznam["typ"]==1): $koncovka = "gif"; endif;
echo "<tr><td colspan=3 align="center"><img src="../uzivatele/obrazky/" . $zaznam["uzivatel"] . "." . $koncovka . "" width="" . $zaznam["sirka"] . "" height="" . $zaznam["vyska"] . "" title="Avatar uživatele " . $zaznam["uzivatel"] . ""></td></tr>";} ?>

<TR><TD>Template webu: </TD><TD><select name="design" size="1" id="design"><option value="1"<? if($zaznam["design"]==1) echo " selected"; ?>>Brown (default)<option value="2"<? if($zaznam["design"]==2) echo " selected"; ?>>Desert</select></TD><td> </td>
</TR>

<tr><td>Odeslat údaje: </td><td><input type="submit" value="Odeslat"></td><td> (odešle všechny vámi doposud vyplněné údaje)</td></tr>


</table>
</form>
Apostolus
Profil
to bude těžký, je tam spousta nepotřebných věcí jako je javascript a člověk se v tom ztrácí. dej mi ICQ, proberem to na něm, takhle to nepůjde
HolyDday
Profil
341266304
HolyDday
Profil
btw můžete si to ozkoušet na webu http://gothic.herniweb.cz -> Registrace. vaše profily pak klidně smažu

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:

0