para - Error al leer el archivo de texto en php
incluir archivo php en html (2)
Tengo un archivo que necesito importar en una base de datos. (Mi base de datos es buena, puedo conectarme y puedo agregar). Ahora mi problema es por alguna razón que nada se inserta.
Tengo un archivo schooldatabase.txt de usuarios / contraseña que necesito agregar a una base de datos. El archivo tiene 200 líneas.
Aquí hay una muestra:
test|098f6bcd4621d373cade4e832627b4f6
test2|ad0234829205b9033196ba818f7a872b
Ahora, para cada una de estas líneas (nombre de usuario y contraseña del estudiante) tengo que insertarlas en una base de datos.
Aquí está mi código:
function addUser($user,$pass) {
// this code is good
}
function processUser($user,$pass) {
$pass=md5($pass);
$myFile = "schooldatabase.txt";
$fh = fopen($myFile, ''r'');
$theData = fread($fh, 5);
$login = "$user|$pass";
if(stristr($theData,$login) !== false){
$result = "rejected";
}
elseif(stristr($theData,$login) !== true){
addUser($user,$pass); // this work I manuall tested
$result = "accepted";
}
fclose($fh);
return $result;
}
var_dump(processUser(''invaliduser'',''test2''));
¿Por qué se devuelve "aceptado" si ese usuario no está en el archivo?
Creo que aquí deberías reconsiderar tu proceso. Asumo que usted "procesa al usuario" más de una vez, por lo tanto, abrirá / leerá / cerrará el mismo archivo una y otra vez sin alterar ese archivo.
Debido a que el archivo no es enorme (y asumo que es un script de una sola vez), simplemente abra el archivo en la memoria cuando inicie el script y luego podrá comparar todo el valor que está probando con ese archivo.
Puede utilizar el file función para hacerlo. Luego puedes verificar si el usuario existe usando in_array .
Aquí está el guión:
function addUser($user,$pass) {
// this code is good
}
$file = file("schooldatabase.txt", FILE_IGNORE_NEW_LINES ^ FILE_SKIP_EMPTY_LINES);
function processUser($user,$pass, array &$file) {
$pass = md5($pass);
if(in_array("$user|$pass", $file)) {
addUser($user,$pass); // do you check if the query is good?
return ''accepted'';
}
return "rejected";
}
var_dump(processUser(''invaliduser'',''test2'', $file));
Creo que estás complicando demasiado el proceso, if
un poco, es verdadero o falso, ¡así que no hay necesidad de revisar ese stristr
dos veces! Además, puede tener su verdadero / falso confundido.
Edit: Además, probablemente debería ser stripos, que devolverá la posición o false.
Tratar...
if(stripos($theData,$login) === false){
$result = "rejected";
} else {
addUser($user,$pass); // this work I manuall tested
$result = "accepted";
}
...¿Eso funciona?