21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Nuimi
Profil
Nevite nekdo kde je chyba
<form class="form1" action="inf.php" method="post">
        <table>
          <tr>
            <td>Tvé uživatelské jméno je:</td>
            <td><?php echo( $_SESSION['username'])?></td>
          </tr>
          <tr>
            <td>Upravit e-mail:</td>
            <td><input type="text" placeholder="Zadej nový email" name="email_n"/></td>
          </tr>
          <tr>
            <td>Upravit věk:</td>
            <td><input type="number" placeholder="Zadej svůj věk" name="vek_n" /></td>
          </tr>
          <tr>
            <td>Upravit datum narození:</td>
            <td><input type="date"  name="datum_n" /></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td><input type="submit" value="Upravit" class="button" /></td>
          </tr>
        </table>
      </form>
      <?php
       $email_n = $_POST['email_n'];
       $vek_n = $_POST['vek_n'];
       $datum_n = $_POST['datum_n'];

       if(isset($email_n))
       {
        $update1 = "UPDATE inf SET  email= '".$email_n."' WHERE jmeno = '" . $_SESSION['username'] . "'";
        if ($db -> query($update1) === TRUE)
        {
         echo('<script> alert ("Řádek byl upraven")</script>');
        }
        else
        {
         echo('<script> alert ("Řádek nebyl upraven")</script>'); 
        }
       }
petr 6
Profil
Pravděpodobně mimo uvedený kód. Viz http://www.it-joker.cz/Pocitace-weby/67-Nefunguje-to--aneb-jak-napsat-dotaz.html#bod5
- Co chcete, aby to dělalo?
- Co to dělá ve skutečnosti?
Nuimi
Profil
no nedělá to nic
a chci aby mi to updatovatlo záznamy které mám v databázi, ale jen ty které zadá
petr 6
Profil
Nuimi:
no nedělá to nic
Před odesláním? Po odeslání? Vypíše prázdnou stránku? Vypíše alert z else větve? Vypíše nějakou chybovou hlášku?
mimochodec
Profil
Nuimi:
Nauč se základy ladění. Na klíčová místa, kde se kód nějak větví, tzn. hlavně kolem podmínek, si vkládej echo "něco" nebo echo $promenna a uvidíš, kudy kód probíhá. Uvidíš, že "nedělá to nic" není pravda.
Nuimi
Profil
No ono to nic nedela ve smyslu ze to pouze refresne stranku a nic se nedeje, ale dekuju. Zkusim ty echa a uvidime
petr 6
Profil
A máš v proměnné $db to, co tam má být?
Nuimi
Profil
jj to mam mam ji akorat includnutou
Nuimi
Profil
Prisel jsem s inovaci update
<?php
       $email_n = $_POST['email_n'];
       $vek_n = $_POST['vek_n'];
       $datum_n = $_POST['datum_n'];
       $tvejmeno_n = $_POST['tvejmeno_n'];
       $prijmeni_n = $_POST['prijmeni_n'];

       if(isset($tvejmeno_n))
       {
        $update1 = "UPDATE inf SET  tvejmeno= '". $tvejmeno_n ."' WHERE jmeno = '" . $_SESSION['username'] . "'";
        if ($db -> query($update1) === TRUE)
        {
         echo('<script> alert ("Řádek byl upraven")</script>');
        }
        else
        {
         echo('<script> alert ("Řádek nebyl upraven")</script>'); 
        }
       }
       else if(isset($prijmeni_n))
       {
        $update2 = "UPDATE inf SET  prijmeni= '". $prijmeni_n ."' WHERE jmeno = '" . $_SESSION['username'] . "'";
        if ($db -> query($update2) === TRUE)
        {
         echo('<script> alert ("Řádek byl upraven")</script>');
        }
        else
        {
         echo('<script> alert ("Řádek nebyl upraven")</script>'); 
        }
       }
       else if(isset($email_n))
       {
        $update3 = "UPDATE inf SET  email= '".$email_n."' WHERE jmeno = '" . $_SESSION['username'] . "'";
        if ($db -> query($update3) === TRUE)
        {
         echo('<script> alert ("Řádek byl upraven")</script>');
        }
        else
        {
         echo('<script> alert ("Řádek nebyl upraven")</script>'); 
        }
       }
       else if(isset($vek_n))
       {
        $update4 = "UPDATE inf SET  vek= '". $vek_n."' WHERE jmeno = '" . $_SESSION['username'] . "'";
        if ($db -> query($update4) === TRUE)
        {
         echo('<script> alert ("Řádek byl upraven")</script>');
        }
        else
        {
         echo('<script> alert ("Řádek nebyl upraven")</script>'); 
        }
       }
       else if(isset($datum_n))
       {
        $update5 = "UPDATE inf SET  datum= '". $datum_n ."' WHERE jmeno = '" . $_SESSION['username'] . "'";
        if ($db -> query($update5) === TRUE)
        {
         echo('<script> alert ("Řádek byl upraven")</script>');
        }
        else
        {
         echo('<script> alert ("Řádek nebyl upraven")</script>'); 
        }
       }
      ?>
jediny co to ukaze je ze dotaz byl updatovan ale nic se nestane
MONTYCEK
Profil
Nuimi:
A to má upravit všechny řádky, tak jak jdou po sobě?
Nuimi
Profil
Nn, vždy jen ten co zadáš
juriad
Profil
Nuimi:
Uvědomuješ si, že ty else if způsobí, že se provede maximálně jeden dotaz?
Přitom to lze napsat mnohem lépe. Když pominu ty chyby jako escapování a ošetření vstupů.
<?php
  $sets = array();
  if (isset($_POST['tvejmeno_n']) && strlen(trim($_POST['tvejmeno_n']))) {
    $sets[] = "tvejmeno = '" . trim($_POST['tvejmeno_n']) . "'";
  }
  
  if (isset($_POST['prijmeni_n']) && strlen(trim($_POST['prijmeni_n']))) {
    $sets[] = "prijmeni = '" . trim($_POST['prijmeni_n']) . "'";
  }
  
  if (isset($_POST['email_n']) && strlen(trim($_POST['email_n']))) {
    $sets[] = "email = '" . trim($_POST['email_n']) . "'";
  }
  
  if (isset($_POST['vek_n']) && strlen(trim($_POST['vek_n']))) {
    $sets[] = "vek = " . intval(trim($_POST['vek_n']));
  }
  
  if (isset($_POST['datum_n']) && strlen(trim($_POST['datum_n']))) {
    $sets[] = "datum = '" . trim($_POST['datum_n']) . "'";
  }
  
  if (count($sets) == 0) {
    # nic nebylo vyplněno
    header("Location: index.php?msg=empty");
  } else {
    # tady se sestaví jeden velký UPDATE
    $update = "UPDATE inf SET " . implode(', ', $sets) . " WHERE jmeno = '" . $_SESSION['username'] . "'";
    if ($db->query($update) === TRUE) {
      header("Location: index.php?msg=row-updated");
    } else {
      header("Location: index.php?msg=update-failed");
    }
  }

Po POSTu musíš vždy přesměrovat pomocí funkce header. Zprávu si předáš parametrem, jak jsme naznačil. Tento kód je však stále chybný, protože neznám tebou použitý databázový framework.

Opravena kontrola neprázdnosti.
MONTYCEK
Profil
juriad:
Přesně to stejné mi došlo po tom co jsem viděl ten kód a také bych to řešil vytvořením pole těch hodnot, které je potřeba upravit.
Hned se mi zdálo divné to řešit pomocí if a eleseif
Nuimi
Profil
Pomoci else if to mam proto ze chci aby se vyplnil vzdy jeden, protoze kdyz jsem to resil tak aby to bylo pro vic tak i kdyz uzivatel zadal jen jedno pole tak to updatovalo vsecha, i ty co byla prazdna
juriad
Profil
Nuimi:
kdyz uzivatel zadal jen jedno pole tak to updatovalo vsecha, i ty co byla prazdna
To jsem právě vyřešil přeskládáním kódu - vygeneruje se sloupec=hodnota jen pro ty, které byly odeslány neprázdné. Měl jsem tam předtím chybu.

Schválně zkus použít ten skript a za 28. řádkem si vypiš ten $update pomocí echo. A zakomentuj ty řádky 29 až 33, aby se zatím nic neprovádělo. Měl by se ti pak ukázat dotaz, který by se odeslal do databáze.

A zkus psát s diakritikou. V polovině případů to neděláš.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0