Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nietypowy problem
Forum PHP.pl > Forum > Bazy danych > MySQL
smileer
Miałe nie pisać tego pytania bo miał być koniec świata ale poczekałem do północy, nic się nie wydarzyło więc piszę smile.gif

Wprowadzam dane do bazy za pośrednictwem formularza oraz z pliku txt. Później podając dane z klawiatury próbuję je porównać z tym ciągiem wyciagniętym z pliku txt.
Wygląd skrawka bazy: http://imgur.com/VEUw7
Od lewej id, kolumna zawierajaca slowa z klawiatury(nieistotna), kolumna ktora zawiera ciągi wyciagniete z pliku txt (pierwsze dwa od dołu nie były edytowane), następnie wprowadzam poprzez formularz zmienna i np szukam w bazie po tej zmiennej, niestety skrypt nie dopasowuje, nie dziala to.

Zauważyłem ponadto że zaczyna działać gdy w phpmyadmin ręcznie zeedytuje komórkę, tzn. nawet nie zmienię jej, (wszystkie ść itd zostaną) tylko poprostu nadpiszę.
Gdy już nadpiszę daną komórkę to tak jak była pisana jakby od dołu to zaczyna być pisana normalnie od góry.( tak jak na obrazku wszystkie komorki oprocz wierszy 26, 29, 31 kolumny trzeciej).

Zmienna która takie probelmy sprawia to $wylosowany.


Jeśli piszę nieskładnie może kod rozjaśni sprawę:
Plik zakoduj:
  1. echo "<form method='POST'>
  2. <center>
  3. <textarea style='position:relative; width:420px; height:170px; top:20px;' name='tekst'>Tu wprowadź tekst</textarea>
  4. <button style='position:relative; width:300px; top:35px;'>Zakoduj</button><br>";
  5. $tekst = $_POST['tekst'];
  6. $tekst2 = $tekst;
  7. if ($tekst != "Tu wprowadź tekst" && $tekst != "" )
  8. {
  9.  
  10. $znaki = fopen('tadeusz.txt', 'r');
  11. $tekst = fread($znaki,488911);
  12. $losowa = rand(0,488911);
  13. while ( substr($tekst, $losowa, 1) != "."){
  14. $losowa++;
  15. }
  16. $losowa++;
  17. $losowa2 = $losowa +30;
  18. while ( substr($tekst, $losowa2, 1) != " "){
  19. $losowa2++;
  20. $zmienna++;
  21. }
  22. $zmienna = $zmienna +30;
  23. $wylosowany_ciag = substr($tekst, $losowa, $zmienna);
  24. $wylosowany = $wylosowany_ciag;
  25.  
  26. mysql_connect('', '', '')or die('<br />Błąd polaczenia');
  27. mysql_select_db('bluetest2_y0_pl')or die('<br />Błąd wyboru bazy');
  28. mysql_query("SET CHARSET utf8");
  29. mysql_query("Set NAMES `utf8` COLLATE `utf8_polish_ci`");
  30.  
  31.  
  32. $zapytanie = "INSERT INTO `baza` (`id`, `tresc`,`haslo`) VALUES (' ','$tekst2','$wylosowany')";
  33. $dodaj = mysql_query($zapytanie)or die('<br />Błąd zapytania');
  34. mysql_close($sql_conn);
  35.  
  36. echo "<input style='position:relative; width:300px; top:50px;' type='text' name='nazwa' value='$wylosowany_ciag'>";
  37. }
  38.  
  39. echo "</center>
  40. </form>";
  41. ?>


Odkoduj:
  1. <?php
  2. echo "<form method='POST'><center><input style='position:relative; width:300px; top:15px;' type='text' name='hasloqwe' value='Tu wprowadź hasło'>
  3. <button style='position:relative; width:300px; top:25px;'>Odkoduj</button><br>";
  4. $haslo = $_POST['hasloqwe'];
  5. mysql_connect('', '', '')or die('<br />Błąd polaczenia');
  6. mysql_select_db('bluetest2_y0_pl')or die('<br />Błąd wyboru bazy');
  7. mysql_query("SET CHARSET utf8");
  8. mysql_query("Set NAMES `utf8` COLLATE `utf8_polish_ci`");
  9. $zapytanie = "SELECT `tresc` FROM `baza` WHERE `haslo`='$haslo'";
  10. $haslo_gotowe = mysql_query($zapytanie)or die('<br />Błąd zapytania');
  11. mysql_close($sql_conn);
  12. while ($haslo_jeszcze_bardziej_gotowe = mysql_fetch_row($haslo_gotowe)){
  13. echo "<textarea style='position:relative; width:420px; height:160px; top:40px;' name='tekst'>$haslo_jeszcze_bardziej_gotowe[0]</textarea></center></form>";
  14. }
  15. ?>


Wiem, że skrypt nie posiada żadnych zabezpieczeń, po prostu uczę się, jak ten mój problem zostanie rozwiązany wezmę się za jakieś zabezpieczenia, zacznę od filtrowania wprowadzanych danych.

Nie znalazłem podobnego problemu, a może poprostu nie umiem nazwać tego problemu i dlatego nie znalazłem.

Brakło sformatowania ciagu funkcją trim. Chodź dalej nie rozumiem dlaczego wyciągnięty ciąg z pliku txt zawierał białe znaki które tak mi marudziły.

Temat więc do zamknięcia.
mortus
Jeśli dane w pliku są zapisywane linia po linii, to skrypt odczytywał również znak końca linii. trim() z automatu usuwa znak końca linii.
daniel1302
1) Jeśli masz kolumnę ID ustawioną na auto_increment to nie musisz wogóle uwzględniać jej w zapytaniu INSERT bo zostanie sama przypisana wartość dla niej.

Z tego co widzę na twojej stronie: http://bluetest2.y0.pl/ wszystko działa poprawnie..., zakodowałem tekst, skopiowałem go do odkodowania i normalnie wszystko działa. I jest to bardzo nie efektywny algorytm. Bo lepiej jest napisać algorytm operujący na systemie binarnym o odwracalnym algorytmie zakodowania(do prywatnych zastosowań wystarczy, bo nikt nie będzie chciał łamać algorytmu tracąc tygodnie czasu aby zarobić kilka set złotych, chyba że będziesz kodował informacje wojskowe tongue.gif). Bo w twoim przypadku jest wielka szansa, że zdanie wylosowane z bazy się powrótrzy.

Uwierz mi, trzymanie długich tekstów w bazie danych może skończyć się jej śmiercią. Czyściłem kiedyś stronkę typu pastebin.pl i dodawałem zabezpieczenia bo baza miała 10 min Uptime max i wywalał się deamon. Strona nie miała zabezpieczeń i boty dodały 290GB tekstu(same linki).

Dodaj jakąś nawet najprostrzą captche tylko w obrazku, poczytaj jak się taką captche robi.
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.