Autor Zpráva
Tomashek
Profil
Zdravím..
Mám takový problém:
Potřeboval bych změnit udaje uživatele..všechno funguje celkem dobře, ale když se nevyplní všechny údaje tak to z databáze vymaže ty, které jsou prázdné.

MySQL_Query("UPDATE $MySQL_tabulka SET heslo='$heslo1', web='$web' where id='$id'") or die (mysql_error());

echo"<FONT color=\"darkred\" size=\"+1\">Údaje byly změněny</FONT>";


Myslím si, že problém je někde v mysql...

Předem díky
Venca V
Profil
Problém rozhodně není v mysql, ale mezi klávesnicí a židlí. Pokud uživatel nějaké údaje nezadá, logicky se při příkazu update uloží do tabulky prázdný řetězec.
Řešení: zkontroluj si při odeslání formuláře vyplnění polí, podle toho si udělej podmínky, kterým pak přizpůsobíš UPDATE dotazy.
Tomashek
Profil
Co kdybych ale nechtěl aby musel zadávat všechny údaje ?
Venca V
Profil
Tomashek
jen budu citovat z předchozí odpovědi:
Řešení: zkontroluj si při odeslání formuláře vyplnění polí, podle toho si udělej podmínky, kterým pak přizpůsobíš UPDATE dotazy.
Není tam nic o tom, že by musela být vyplněna všechna pole. Co má být vyplněno, musíš vědět ty, a podmínky a následné mysql dotazy si vytvořit podle toho.
Adam Zábranský
Profil
můžeš to zkusit třeba takhle:
$uzivatel = mysql_fetch_array(mysql_query("SELECT * FROM $MySQL_tabulka WHERE id='$id'"));

$heslo1 = $uzivatel['heslo'];
if(isset($_POST['heslo1'])) {
  $heslo1 = $_POST['heslo1'];
}

MySQL_Query("UPDATE $MySQL_tabulka SET heslo='$heslo1', web='$web' where id='$id'") or die (mysql_error());


doufám žes pochopil jak to funguje a je to to co potřebuješ.
dajusa
Profil
Ještě by bylo jedno řešení. Do formuláře, ve kterém upravuješ dané inforamce si na začátku natáhni z databáze veškeré údaje, které tam již máš uložené. Tím si zajistíš, že budou vyplněna pole ve formuláři a pokud uživatel opravdu bude chtít vymazat daný údaj tak ho smaže z pole. V opačném případě máš zajištěno, že se údaje v databázi nepromažou.
Tomashek
Profil
To, co udělal Adam jsem zkoušel celý večer (přetvořoval atd.) a dospěl jsem k názoru, že to nejde, protože u toho jde zadat jedině to samé heslo jaké měl ..tudíž si ho nemůže změnit.
Asi zkusím radu dajusa.. Díky zatím všem.
Venca V
Profil
To, co udělal Adam jsem zkoušel celý večer (přetvořoval atd.) a dospěl jsem k názoru, že to nejde, protože u toho jde zadat jedině to samé heslo jaké měl ..tudíž si ho nemůže změnit. - zkoušel jsi špatně, to co napsal Adam Zábranský je naprosto správně fungující kód, který ti změní heslo pouze v případě, že ho uživatel vyplní. Co napsal(?a) dajusa je taky řešení, IMHO je ale lepší (jednodušší) to od Adama. Jednoduchou modifikací scriptu si pak můžeš takto ošetřit všechny vstupy z formuláře.
Tomashek
Profil
Nevím, opravdu nevím v čem je problém. Možná, že to máte dobře napsané, ale mě to prostě vždycky když dám heslo jiné než bylo předtím, že se heslo neshoduje ( mám podmínku na shodnost hesla v prvním formuláři s druhým). zkusím sem napsat kód jestli byste nenašli nějakou chybu. Já nad tím sedím pořád a nic mě nenapadá

<h1>Změna hesla</h1>
<?
// zjistím jestli je uživatel přihlášen

if($prihlasen==false){
header("Location:/?str=block");
exit;
}
else
{
$bb = MySQL_Query("SELECT * FROM $MySQL_tabulka WHERE id='$prihlasen';");
$aa=MySQL_Fetch_Array($bb);
$kredit=$aa[kredit];
}
?>
<br>
<TABLE border="1" cellspacing="1" cellpadding="1" width="75%" align="center"><tr><TD align="center">
<? 
$id = $_GET['id'];
$zob="ne";
if($odeslano=="ano"){

// test vyplnenych udaju

if($heslo1!=$heslo2){
$zob="ano";
echo "<FONT color=\"FUCHSIA\"><b>Chyba: </b>Hesla nejsou stejná</FONT><br>";
}

}else $zob="ano";


if($zob=="ano"){

?>
<br>
<form action="" method="post">
<table align="center" border="1">
<tr>
<?
// formuláře k odeslání
 
echo"<TD nowrap align=\"right\"><FONT color=\"RED\"><b>Heslo:</b></font><TD nowrap><INPUT type=\"password\" name=\"heslo1\" maxlength=\"25\" class=\"form\">";
echo'<tr>';
echo"<TD nowrap align=\"right\"><FONT color=\"RED\"><b>Opakuj heslo:</b></font><TD nowrap><INPUT type=\"password\" name=\"heslo2\" maxlength=\"25\" 
echo'<tr>';
echo"<TD nowrap align=\"right\"><FONT color=\"RED\"><b>Web:</b></font><TD nowrap><INPUT type=\"text\" name=\"web\" maxlength=\"128\" 
class=\"form\">";
?>
<tr>
<th colspan="2"><INPUT type="submit" class="button" value="Změnit">
<input type="hidden" name="odeslano" value="ano">
</table>
</form><?}
else{

MySQL_Query("UPDATE $MySQL_tabulka redirect SET heslo='$heslo1', web='$web' where id='$id'") or die (mysql_error());

echo"<FONT color=\"darkred\" size=\"+1\">Údaje byly změněny</FONT>";

 }
?></table>











Venca V
Profil
Jedna věc, která mě napadá souvisí se safe_modem. V tomto scriptu používáš globální proměnné ($heslo1 atd.), které ti ale budou fungovat pouze při safe_mode=off. Jakmile je safe_mode=on, musíš k proměnným z polí POST, GET, COOKIE, SESSION přistupovat pomocí $_POST["heslo1"] atd.
Tomashek
Profil
Asi to mám....stacilo udelat takove jednoduche podminky:

if ($heslo1!="") {
MySQL_Query("UPDATE $MySQL_tabulka redirect SET heslo='$heslo1' where id='$id'") or die (mysql_error());
}

elseif ($web!="") {
MySQL_Query("UPDATE $MySQL_tabulka redirect SET web='$web' where id='$id'") or die (mysql_error());
}

Jinak díky všem za snahu :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.