Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z rankingiem graczy
Forum PHP.pl > Forum > PHP
Adzik1992
Witam, wstawie kod a potem powiem co jest nie tak.

Kod
case 'dodaj':
   autoryzacja();
       if(isset($_POST['nick']) and isset($_POST['punkty']) and isset($_POST['punkty2']) and isset($_POST['punkty3']) and isset($_POST['nick2']) and isset($_POST['nick3'])){
           if(!mysql_query('INSERT INTO ranking (nick,punkty,nick2,punkty2,nick3,punkty3) VALUES (\''.$_POST['nick'].'\',\''.$_POST['punkty'].'\',\''.$_POST['nick2'].'\',\''.$_POST['nick3'].'\',\''.$_POST['punkty2'].'\',\''.$_POST['punkty3'].'\',)',$db)){
  
               echo '
   <b>ERROR: Blad podczas dodawania rekordu.</b>
   ';
           }else{
               echo '
   <b>Wpis zostal dodany</b>
   ';
           }
  
       }
       echo '
   <a href="'.$_SERVER['PHP_SELF'].'">Powrot</a>
   ';
       echo '
   Wypelnij pola
   <form action="'.$_SERVER['PHP_SELF'].'?edytuj=dodaj" method="POST">
               <table><tr><td>Miejsce</td><td>Nick</td><td>Punkty</td></tr>
               <tr><td>1</td><td><input type="text" name="nick" value=""></td><td><input type="text" name="punkty" value=""></td></tr>
               <tr><td>2</td><td><input type="text" name="nick2" value=""></td><td><input type="text" name="punkty2" value=""></td></tr>
               <tr><td>3</td><td><input type="text" name="nick3" value=""></td><td><input type="text" name="punkty3" value=""></td></tr>
               </table>
               <input type="submit" value="Dodaj">
           </form>';


Jest to czesc skryptu rankingu graczy. Kiedy w formularzu na stronie wpisuje nicki u punkty to sie nie wysyla do bazy mysqli wyswietla ERROR: Blad podczas dodawania rekordu. Prosze o pomoc.

I jeszcze jedno, jak wysylam nick z punktami na serwer, to chcialbym aby to nadpisalo jesli takowy gracz juz jest, bo z tego co slyszalem tworzy oddzielny nick i punkty.
piraciq
wszędzie masz "AND" czyli i w warunku zmień na "OR"
Adzik1992
nie pomoglo, moze dam caly skrypt?
ddiceman
  1. <?php
  2. if(!mysql_query('INSERT INTO ranking (nick,punkty,nick2,punkty2,nick3,punkty3) VALUES (''.$_POST['nick'].'',''.$_POST['punkty'].'',''.$_POST['nick2'].'',''.$_POST['nick3'].'',''.$_POST['punkty2'].'',''.$_POST['punkty3'].'',)',$db)){
  3. ?>


W tej linii zamieniona masz kolejnosc nick3 i punkty2 - prawdopodobnie punkty sa typu INT a zapisujesz do nich STRING
Zobacz

  1. <?php
  2. if(!mysql_query('INSERT INTO ranking (nick,punkty,nick2,punkty2,nick3,punkty3) VALUES ("'.$_POST['nick'].'","'.$_POST['punkty'].'","'.$_POST['nick2'].'","'.$_POST['punkty2'].'","'.$_POST['nick3'].'","'.$_POST['punkty3'].'",)',$db)){
  3. ?>


Pomocne tez bedzie, jezli zobaczysz, jaki blad zwraca baza danych:

  1. <?php
  2. echo '
  3.  <b>ERROR: Blad podczas dodawania rekordu.</b>
  4.  ';
  5. ?>


Zamien na

  1. <?php
  2. echo '<b>ERROR: Blad podczas dodawania rekordu.</b>'.mysql_error();
  3. ?>
piraciq
ja bym zmienił jeszcze jedno :

Kod
case 'dodaj':
   autoryzacja();
       if(isset($_POST['nick']) and isset($_POST['punkty'])
       or isset($_POST['nick2']) and isset($_POST['punkty2'])
       or isset($_POST['nick3']) and isset($_POST['punkty3'])){
       if(!mysql_query( "INSERT INTO ranking (`nick`,`punkty`,`nick2`,`punkty2`,`nick3`,`punkty3`) VALUES (".$_POST['nick'].",".$_POST['punkty'].",".$_POST['nick2'].",".$_POST['punkty2'].",".$_POST['nick3'].",".$_POST['punkty3'].",)",$db)){


nikt tego nie widzi questionmark.gif?

Kod
if(!mysql_query( "INSERT INTO ranking (`nick`,`punkty`,`nick2`,`punkty2`,`nick3`,`punkty3`) VALUES (".$_POST['nick'].",".$_POST['punkty'].",".$_POST['nick2'].",".$_POST['punkty2'].",".$_POST['nick3'].",".$_POST['punkty3'].",)",$db))


powinno być tak

Kod
if(!mysql_query( "INSERT INTO ranking (`nick`,`punkty`) VALUES (".$_POST['nick'].",".$_POST['punkty']."),$db))


tabela w bazie ma tylko dwa pola a chce dodac sześć tongue.gif
Adzik1992
Pokazało mi
Kod
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
ddiceman
Cytat
tabela w bazie ma tylko dwa pola a chce dodac sześć

Skad to wiadomo?
Poza tym pomysl z OR przy sprawdzaniu warunku chyba tutaj nie ma sensu - rekord powinien zostac dodany do bazy danych, jezeli zdefiniowane sa wszystkie pola, co oznacza, ze AND bylo jak najbardziej poprawne.

Czy moglbys jeszcze raz linie, ktora Ci podalem

  1. <?php
  2. echo '<b>ERROR: Blad podczas dodawania rekordu.</b>'.mysql_error();
  3. ?>


zamienic na

  1. <?php
  2. echo '<b>ERROR: Blad podczas dodawania rekordu.</b>'.mysql_error() . 'INSERT INTO ranking (nick,punkty,nick2,punkty2,nick3,punkty3) VALUES ("'.$_POST['nick'].'","'.$_POST['punkty'].'","'.$_POST['nick2'].'","'.$_POST['punkty2'].'","'.$_POST['nick3'].'","'.$_POST['punkty3'].'",)';
  3. ?>


pozwoli to zobaczyc pelne zapytanie kierowane do bazy danych
Adzik1992
juz tam ok, tylko cos nie tak z aktualizacja wynikow

Kod
case 'dodaj':
   autoryzacja();

      if(isset($_POST['nick']) and $_POST['punkty'] )
          {
              $query="SELECT * FROM ranking where nick = '".$_POST['nick']."'";
            $result = mysql_query($query,$db);
            $ile=mysql_num_rows($result);
            if ($ile>0)
            
            {

                    while($row=mysql_fetch_array($result))
                    {
                    echo $id_user=$row['id'];
                    }
                     mysql_query('UPDATE ranking set (punkty) = (\''.$_POST['punkty'].'\' where id=$id_user)',$db);

                }
                else
                {
                     mysql_query('INSERT INTO ranking (nick,punkty) VALUES (\''.$_POST['nick'].'\',\''.$_POST['punkty'].'\')',$db);

                }

       }
nowotny
Pokazuję gdzie:
  1. <?php
  2. mysql_query('UPDATE ranking set (punkty) = (''.$_POST['punkty'].'' where id=$id_user)',$db);
  3. ?>

...i mówię że jest problem z apostrofami/cudzysłowami... jaki konkretnie i jak go naprawić to już pozostawiam tobie...
Adzik1992
  1. <?php
  2. mysql_query('UPDATE ranking set punkty = ''.$_POST['punkty'].'' where id=$id_user)',$db);
  3. ?>

tak?

Teraz tak:

  1. <?php
  2. case 'dodaj':
  3.  autoryzacja();
  4.  
  5. if(isset($_POST['nick']) and $_POST['punkty'] )
  6. {
  7. $query="SELECT * FROM ranking where nick = '".$_POST['nick']."'";
  8. $result = mysql_query($query,$db);
  9. $ile = mysql_num_rows($result);
  10. echo $ile;
  11.  
  12. if ($ile>0)
  13.  
  14. {
  15.  
  16. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  17. $id_user=$row["id"];
  18. }
  19.  mysql_query('UPDATE `ranking` SET `punkty` = `''.$_POST['punkty'].''` where `id`=`$id_user`',$db);
  20.  
  21. }
  22. else
  23. {
  24.  mysql_query('INSERT INTO ranking (nick,punkty) VALUES (''.$_POST['nick'].'',''.$_POST['punkty'].'')',$db);
  25.  
  26. }
  27.  
  28.  }
  29. ?>
nowotny
Cytat(Adzik1992 @ 23.07.2008, 17:53:22 ) *
tak?

Nawiasy to swoją drogą (z resztą o nich zapomniałem)... Ale widzę że problem leży głębiej...
O takie znaczki mi chodziło:
Apostrof -> '
Cudzysłów -> "

I teraz dokształcić się które jak działa....

Cytat(Adzik1992 @ 23.07.2008, 17:53:22 ) *
Teraz tak:

Teraz to już całkiem źle... :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.