PHP - sql dotaz

Programovacie jazyky, rady, poradňa...
Juri1990
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 365
Registrovaný: 25 jan 2006, 10:05
Bydlisko: Bratislava
Kontaktovať používateľa:

PHP - sql dotaz

Príspevok od používateľa Juri1990 »

Zdarvím. Dotazy zatiaľ nie sú moja silná stránka a mám tu jeden v ktorom mi vyhadzuje chybu, asi to bude iba dajaký znak, no v tomto som úplný nováčik.

Kód: Vybrať všetko

$sql_vymaz = mysqli_query($db_spojenie,
          'DELETE FROM over_kody WHERE kod=($_POST['kod'])');
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

to query daj do úvodzoviek a nie apostrofov, a tá premenná post nemá zmysel aby bola v zátvorke
Juri1990
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 365
Registrovaný: 25 jan 2006, 10:05
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa Juri1990 »

Trochu som to prerobil no stále mi to nefičí. Tu mám samotný zdroják

Kód: Vybrať všetko

if(empty($_POST['kod'])){$d= 'Nezadali ste overovací kód';}
    else{   // opravené
      require_once "db_spojenie.inc";
      $vysledok = mysqli_query($db_spojenie,
        "SELECT * FROM over_kody")
        or die("Chybný dotaz: ".mysql_error()); 
      for( $i = mysqli_num_rows($vysledok); $i>0,
      $riadok = mysqli_fetch_array($vysledok); $i--){  
        if(($riadok['kod'])!=($_POST['kod'])){break;}
        $sql_vymaz = mysqli_query($db_spojenie,
        "DELETE FROM over_kody WHERE kod=$_POST['kod']") //riadok 33
        or die("Chybný dotaz: ".mysql_error());
        }
      else{$d= 'Zadali ste zlý overovací kód';}
    }
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

To elseif má byť len else.
Juri1990
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 365
Registrovaný: 25 jan 2006, 10:05
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa Juri1990 »

No trochu som to prerobil, ale mám tam problém a to, že aj keď dám dobrý kód tak mi to nezruší premenu $d. Pokiaľ som dal unset($d) až za cyklus a dal pred neho podmienku, že premena $kod musí byť nastavená tak mi to zase zrušilo premenu $d aj keď som dal zlý kód.

Kód: Vybrať všetko

if(empty($_POST['kod'])){$d= 'Nezadali ste overovací kód';}
    else{ 
      require_once "db_spojenie.inc";
      $vysledok1 = mysqli_query($db_spojenie,
      "SELECT * FROM over_kody");
      if (!$vysledok1){die('Chyba príkazu SQL: ' .mysqli_error($db_spojenie));} 
      $d= 'Zadali ste zlý overovací kód';
      while($riadok = mysqli_fetch_array($vysledok1)){  
        if(($riadok['kod'])!=($_POST['kod'])){break;}
        else{
        $kod = $_POST['kod'];
        unset($d);
        }
      }
    }
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Skús niečo ako:

Kód: Vybrať všetko

$riadok = mysqli_fetch_array($vysledok1);
if ($riadok && $riadok['kod'] == $_POST['kod']) {
	$d = false;
	$kod = $_POST['kod'];
} else {
	$d= 'Zadali ste zlý overovací kód';
}
(a potom môžeš použiť podmienku if ($d) { /* kod nebol spravny */ })
Juri1990
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 365
Registrovaný: 25 jan 2006, 10:05
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa Juri1990 »

Ako na to pozerám rovno ma napadá, nenačíta to iba jeden riadok z tabuľky? Mojim cieľom je prechádzať riadky tabuľky a overovať či sa rovnajú zadanému kódu a ak sa rovná tak zmeniť nejakú podmienkovú hodnotu a súčasne vymazať ten riadok z tabuľky(čo mám ďalej).
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ale ani to tvoje nerobí to, čo chceš aby to robilo. Ja som sa viac-menej riadil len podľa toho tvojho (keďže nikde nepíšeš, čo presne by to malo robiť).
Juri1990
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 365
Registrovaný: 25 jan 2006, 10:05
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa Juri1990 »

Ne nejak to nevyšlo, ale aj tak ďakujem za pomoc.
mienkofax
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 135
Registrovaný: 27 nov 2007, 19:40
Kontaktovať používateľa:

Príspevok od používateľa mienkofax »

este raz napis co chces + daj kod a co ti riadne nejde
Juri1990
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 365
Registrovaný: 25 jan 2006, 10:05
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa Juri1990 »

Chcem spraviť registráciu a v podstate som ju mal už funkčnú až na to, že som mal iba jeden v php pevne daný overovací kód, ale chcem to spraviť na štýl close-betatest a preto som si spravil tabulku s jedným stĺpcom s jednorázovými kódmi. Testoval som rôzne časti skriptu a zistil som, že z tabuľky mi ich načíta bez problémov, ale kód z tabuľky rovná kódu z formulára tak mi premena $d ostane nastavená ako text čo mám nad cyklom.

Kód: Vybrať všetko

<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <title>Registrácia</title>
  </head>
  <body bgcolor="#000000"> <font color="#ffffff">
  <style> 
  A:HOVER, A:LINK, A:VISITED, A:active{
	color: #ffffff;
	text-decoration: none;}
  </style>
  <?php
  if(isset($_POST['meno'])){
  
  if(5 > strlen($_POST['meno'])){$a= 'Zadali ste krátke meno';}
  if(25 < strlen($_POST['meno'])){$a= 'Zadali ste dlhé meno';}
  if(empty($_POST['meno'])){$a= 'Nezadali ste svoje meno'; }  
  if(5 > strlen($_POST['heslo'])){$b= 'Zadali ste krátke heslo';}
  if(25 < strlen($_POST['heslo'])){$b= 'Zadali ste dlhé heslo';}
  if(empty($_POST['heslo'])){$b= 'Nezadali ste svoje heslo';}
  if(empty($_POST['email'])){$c= 'Nezadali ste svoje e-mail';}
  if(empty($_POST['kod'])){$d= 'Nezadali ste overovací kód';}
    else{ 
      require_once "db_spojenie.inc";
      $vysledok1 = mysqli_query($db_spojenie,
      "SELECT * FROM over_kody");
      if (!$vysledok1){die('Chyba príkazu SQL: ' .mysqli_error($db_spojenie));} 
      $d= 'Zadali ste zlý overovací kód';
      while($riadok = mysqli_fetch_array($vysledok1)){  
        if(($riadok['kod'])!=($_POST['kod'])){break;}
        else{
        $kod = $_POST['kod'];
        unset($d);
        }
      }
    }
  }    
  ?>
  <center>
  <form action="registracia.php" method="post">
   <b><p>Meno(5-25 znakov):</b><br /> <input type="text" name="meno"></p>
   <p><?php if(isset($a)){echo $a;} ?></p>
   <b><p>Heslo(5-25 znakov):</b><br /><input type="text" name="heslo"></p>
   <p><?php if(isset($b)){echo $b;} ?></p>
   <b><p>E-mail:</b><br /><input type="text" name="email"></p>
   <p><?php if(isset($c)){echo $c;} ?></p>
   <b><p>Overovacý kód:</b><br /><input type="text" name="kod"></p>
   <p><?php if(isset($d)){echo $d;} ?></p>
   <p><input type="submit" value="Registrovať"></p>
   </form>
  
  <?php 
     
  if(!isset($_POST['meno'])){exit();}
  if(isset($a) or isset($b) or isset($c) or isset($d)){exit();}
    
 require_once "db_spojenie.inc"; 
 
  $sql_vymaz = mysqli_query($db_spojenie,
        "DELETE FROM over_kody WHERE kod=$kod");
  
  $vysledok2 = mysqli_query($db_spojenie, $sql_vymaz);
  if (!$vysledok2){die('Chyba príkazu SQL: ' .mysqli_error($db_spojenie));}
  
  $sql_zapis = 
    "INSERT INTO users (meno,heslo,email)"
    ."VALUES('"
    .mysqli_real_escape_string($db_spojenie,$_POST['meno'])
    ."','"
    .mysqli_real_escape_string($db_spojenie,$_POST['heslo'])
    ."','"
    .mysqli_real_escape_string($db_spojenie,$_POST['email'])
    ."')"
    ;

  $vysledok3 = mysqli_query($db_spojenie, $sql_zapis);
  if (!$vysledok3){die('Chyba príkazu SQL: ' .mysqli_error($db_spojenie));}
  
  echo 'Boli ste úspečne registrovaný.<br />';   
  ?>
  </center></font>
  </body>
</html>
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Nebolo by rozumnejšie v tom SELECT dať vybrať riadok, pri ktorom je `kod`='${POST['kod']}'? (samozrejme ten POST treba ošetriť, napr. pomocou funkcie mysqli_real_escape_string). Ak tam nenájdeš žiadny riadok, tak nastavíš premennú d.
Inak ju nastavovať nebudeš, prípadne si do tých premenných a, b, c a d daj na začiatku false a uprav tie podmienky, kde sa tie premenné testujú. V takom prípade nebude vadiť ani povolené register_globals (teraz by ti pri povolenom register_globals pravdepodobne mohol niekto vymazať z tej DB kódy).
Juri1990
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 365
Registrovaný: 25 jan 2006, 10:05
Bydlisko: Bratislava
Kontaktovať používateľa:

Príspevok od používateľa Juri1990 »

Ták chlapi, veľmi srdečne ďakujem za pomoc, nakoniec sa mi to dajako podarilo rozchodiť, fakt dík.

Kód: Vybrať všetko

if(empty($_POST['kod'])){$d= 'Nezadali ste overovací kód';}
    else{ 
      require_once "db_spojenie.inc";
      $kod=mysqli_real_escape_string($db_spojenie,$_POST['kod']);
      $vysledok1 = mysqli_query($db_spojenie,
      "SELECT * FROM over_kody WHERE kod='$kod'");
      over_dotaz($vysledok1, $db_spojenie); 
      $riadok = mysqli_fetch_array($vysledok1);
      if(!$riadok){$d= 'Zadali ste zlý overovací kód';}}}
Napísať odpoveď