PHP error: "Notice: Uninitialized string offset"

2

I'm trying to solve a problem with initializing a variable, how to fix this?

<?php
$texto1 = $_POST['texto1'];
$texto2 = $_POST['texto2'];
$texto3 = $_POST['texto3'];


function randString($size) // função que gera string aleatória de caracteres
{
    $basic='abcdefghijklmnopqrstuvwxyz';

    $return = "";

    for($count= 0; $size > $count; $count++){
        $return .= $basic[rand(0, strlen($basic) - 1)];
    }

    return $return;

}

$stringbase = randString(1024);  //colocando a string aleatória de 1024 caracteres na variável

function buscaPalavra($texto1,$texto2,$texto3) // função para fazer a busca de uma palavra em um texto
{
    global $stringbase;
    $contador1 = 0;
    $contador2 = 0;
    $contador3 = 0;
    $palavra1 = "";


    //$palavra2 = "";
    //S$palavra3 = "";
    //i=0
    //j=0
    //stringbase[i]=b
    //texto[j]=d



    for ($i = 0 , $j = 0 ; $i < strlen($stringbase) ; $i++)
    {

        if ($texto1[$j] == $stringbase[$i])
        {   
            $palavra1 = $palavra1. "" . $stringbase[$i];
            $j++; //eu quero que ele incremente               
        }


    }

    echo $palavra1."<br />";

    echo $texto1 . ' apareceu ' . $contador1 . ' vezes, ' . $texto2 . ' apareceu ' . $contador2 . ' vezes e ' . $texto3 . 'apareceu ' . $contador3 . ' vezes '; 
}

echo buscaPalavra($texto1,$texto2,$texto3); 
?>

The error that appears to me is this

  

Notice: Uninitialized string offset: 2 in C: \ xampp \ htdocs \ files \ index.php on line 48 The problem is in the variable $ j

Here the separate html file for ease of understanding

<!DOCTYPE html>
<html lang="pt_BR">
<head>
   <title> Formulário de teste </title>
   <meta charset="utf8" />
   <link rel="stylesheet" type="text/css" href="css.css" />
</head>
<body>
   <form action="http://localhost/arquivos/index.php" method="POST" align="center">
      <h1 align="center"> Formulário de Teste </h1>
      Texto1:
      <input  name="texto1" type="text" maxlength="8" onchange="this.value=this.value.toLowerCase()"/><br /><br />
      Texto2:
      <input name="texto2" type="text" maxlength="8" /><br /><br />
      Texto3:
      <input name="texto3" type="text" maxlength="8" /><br /><br />
      <input type="Submit" name="Enviar" value="Enviar" />
   </form>
</body>
</html>
    
asked by anonymous 25.06.2015 / 20:21

1 answer

3

The error is happening because you're checking a position for the string that does not exist, for example:

$textobase = "oihoi";
// Texto:       oihoi
// Tamanho:     5
// Posições:    [
//                   0 => o
//                   1 => i
//                   2 => h
//                   3 => o
//                   4 => i
//              ]

$texto1 = "oi"; 
// Texto:       oi
// Tamanho:     2
// Posições:    [
//                   0 => o, 
//                   1 => i
//              ]

And in your loop this is happening:

Primeira vez
    // $i == 0
    // $j == 0

    //        0
    $texto1[ $j ] => o

    //            0
    $stringbase[ $i ] => o

    $texto1[ $j ] == $stringbase[ $i ] => true
        $j++ // Agora $j vale 1

Segunda vez
    // $i == 1
    // $j == 1

              1
    $texto1[ $j ] => i

                  1
    $stringbase[ $i ] => i

    $texto1[ $j ] == $stringbase[ $i ] => true
        $j++ // Agora $j vale 2

Terceira vez
    // $i == 2
    // $j == 2

    //        2
    $texto1[ $j ] => ???????????? 

    $texto1 não tem posição 2, então é lançado um erro offset (fora da conjunto, ou do tamanho)

To fix this, change your line 51 , where you have following statement:

$j++;

For a size check:

// Incrementa mais 1 E verifica se é maior ou igual ao tamanho do texto1
if (++$j >= strlen($texto1)){
    // Se for maior ou igual retorna para 0 (posição inicial do texto1)
    $j = 0;
}
    
25.06.2015 / 21:46