Gå til innhold

Kode vil ikke sjekke opp mot et array med tekst riktig


Anbefalte innlegg

Jeg har en funksjon som skal søke i en fil, og om tekststrengen som ble skrevet inn ikke eksisterer i filen, så skal tekststrengen legges til filen.

 

Problemet er at den legger tekststrengen til filen selv om den eksisterer i filen fra før.

 

Hva er problemet?

 

 

Her er koden (Det er fint om dere sier i fra om det er noe annet i koden jeg også har feil på):

<?php session_start(); ?>
<html>
<head>
<title>Search/Add text-strings to the game</title>
</head>
<body>
<h1>Text-strings:</h1>
<?php
$con=mysqli_connect("XXX","XXX","XXX","XXX");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
else {
$result = mysqli_query($con,"SELECT * FROM users WHERE id=" . $_SESSION['memberID']);
$row = mysqli_fetch_array($result);

mysqli_close($con);
if($row['status'] == "admin" || $row['status'] == "translator") {
$file = fopen("language/English.txt","r") or exit("Unable to open file");
$e=0;
while(!feof($file)) {
  $text[$e] = str_replace("<newline>","\n",fgets($file));
  $e++;
  }
  fclose($file);
  $textLength = count($text);
  $file = fopen("language/English.txt","a") or exit("Unable to open file");
for($i=0;$i<$_POST['number'];$i++) {
$textStrings[$i] = trim($_POST['string' . $i]);
if($textStrings[$i] != "") {
$finishedStringCheck = 0;
for($k=1;$k<($textLength + 1);$k++) {
 if($textStrings[$i] == $text[$k]) {
  echo "The string: '" . $textStrings[$i] . "' already exist with ID: " . $k . ".<br><br>";
  break;
 }
 else {
  $finishedStringCheck++;
 }
}
if($finishedStringCheck == $textLength) {
 fwrite($file,str_replace("\n","<newline>",$textStrings[$i]) . "\n");
 echo "The string: '" . $textStrings[$i] . "' have been added to the english-file with ID: " . $e . ".<br><br>";
 $e++;
}
}
}
fclose($file);
$con=mysqli_connect("XXX","XXX","XXX","XXX");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to the MySQL database: " . mysqli_connect_error();
  }
else {
$result = mysqli_query($con,"SELECT * FROM users WHERE status='translator' OR status='admin'");
while($row = mysqli_fetch_array($result)) {
mail($row['email'],"It has been added more text-strings to the game","It has been added more text-strings to the game, please translate thoose.",'From: [email protected]');
}
echo "An email is sent to all translators and admins that tell them that it has been added more text-strings.<br><br>";
echo "<a href='http://admin.boxer.hostei.com'>Go back to admin's main menu</a>";
mysqli_close($con);
}
}
else {
echo "You are not allowed to be here.";
}
}
?>
</body>
</html>

Endret av herdon
Lenke til kommentar
Videoannonse
Annonse

Følgende funksjon tar to parameter. En tekststreng og et filnavn.

Den leser inn tekststrengen til en matrise

så sjekker den om tekst strengen finnes i matrisen

hvis den ikke gjør det så legger den strengen til og skriver matrisen tilbake til filen og returnerer true

ellers så returnerer den false.

 

Legg merke til at du alltid bør feilsjekke om filen lar seg åpne og lese og om den lar seg skrive. For klarhet i koden så omgikk jeg det i eksemplet.

 

Oddsen er at det finnes enklere måter å gjøre dette på, men som et eksempel så bør dette duge. Merk at jeg skrev koden fra hukommelsen så syntaksen kan være på tryne.

 

function FindStringInFile($string, $filename)
{
 $content = file($filename)
 if(!in_array($string, $content)
 {
   $content[] = $string;
   file_put_contents($filename, implode($content, "\r\n"));
   return true;
 }
 else
   return false;
}

Lenke til kommentar

Legg merke til at veldig store filer vil bruke veldig mye ressurser når de skal inn i en matrise. Hvis minnet blir et problem så må prosedyren gjøres om slik at en og en linje leses inn og sjekkes. Fordelen med en slik prosedyre er selvsagt at man slipper å lese inn hele filen hvis strengen eksisterer tidlig i filen. Da kan man bryte løkken når strengen blir funnet.

Lenke til kommentar

Jeg har en funksjon som skal søke i en fil, og om tekststrengen som ble skrevet inn ikke eksisterer i filen, så skal tekststrengen legges til filen.

 

Problemet er at den legger tekststrengen til filen selv om den eksisterer i filen fra før.

 

Hva er problemet?

Er det en grunn til at du må lagre fila med <newline> i stedet for \n? Sånn som du gjør det nå vil du lese hele fila på en gang, fordi fgets leser til første \n eller EOF (end of file). Når det ikke er noen \n vil den altså lese hele fila. Tror dette ville funke bedre

 

/* 
* Example usage: $array = fileAsArray("myAwesomeFile", "<newline>");
*/
function fileAsArray($filename, $delimiter) {
  return explode($delimiter, file_get_contents($filename));
}

Lenke til kommentar

Er det en grunn til at du må lagre fila med <newline> i stedet for \n? Sånn som du gjør det nå vil du lese hele fila på en gang, fordi fgets leser til første \n eller EOF (end of file). Når det ikke er noen \n vil den altså lese hele fila. Tror dette ville funke bedre

 

/*
* Example usage: $array = fileAsArray("myAwesomeFile", "<newline>");
*/
function fileAsArray($filename, $delimiter) {
  return explode($delimiter, file_get_contents($filename));
}

 

Grunnen til at jeg ber den om å lagre alle forekomster av \n i strengen som <newline> er fordi disse skal kunne brukes som \n et annet sted (det som skal lagres til filen skal kunne ha \n i seg, men skal være på samme linje i filen, så man kan ta en og en linje).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...