19. februar 2003 - 13:16Der er
6 kommentarer og 1 løsning
sammenligning af tekstfil og SQL-base fejler i en løkke
Jeg har dette lille stykke programkode der gerne skulle sammenholde oplysninger fra en tekstfil op mod en sql-base. hvis indholdet i linien ikke findes i basen skal den tilføjes i basen. Problemet er bare at når den kommer til at skulle sammenholde med basen (hvor jeg benytter en whileløkke) så går den ikke ind i løkken og søger, men spinger over løkken og fortsætter som om intet var hændt.
min kode ser sådan her ud:
<?php // opretter forbindelse til Mysql-server med brugerid mysql_connect("******", "***", "****") or die ("Det var ikke muligt at oprette forbindelse til databasen");
// vælger databasen der skal benyttes mysql_select_db("brugeroplysninger") or die ("Det var ikke muligt at åbne databasen");
$findestabel = "SELECT * FROM $db"; mysql_query($findestabel);
if (mysql_errno() == "1146") {
echo "Denne database findes ikke - så den bliver lige oprettet!<br>"; $nytabel = "CREATE TABLE $db( brugerid char(4), varenr varchar(20), varetekst varchar(30), servicelevel varchar(8), topnr varchar(8), produkttype varchar(30), dato timestamp(8) );";
mysql_query($nytabel) or die (mysql_error());
} else {
while (false !== ($file = readdir($handle))) {
if ($file == '.' OR $file == '..' OR $file == 'errors.txt' OR $file == 'WXXYYY.log' OR $file == 'user.txt' OR $file == 'TELENUM.txt') {
if (($oplysninger[0] == 'AFD') OR ($oplysninger[0] == 'NOU') OR ($oplysninger[0] == 'nou')) { echo "Brugerid $oplysninger[33] kan ikke tilføjes i databasen, da det er et reserveret ord<br>";
} else {
$findesbruger = "SELECT * FROM inventar WHERE brugerid = \"$oplysninger[0]\""; $brugersearch = mysql_query($findesbruger); var_dump ($brugersearch); echo "<br>"; while ($brugerfindes = mysql_fetch_array($brugersearch)) {
if ($brugerfindes[brugerid] != "$oplysninger[0]" AND $brugerfindes[varenr] != "$oplysninger[1]" AND $brugerfindes[varetekst] != "$oplysninger[2]" AND $brugerfindes[servicelevel] != "$oplysninger[3]" AND $brugerfindes[topnr] != "$oplysninger[4]" AND $brugerfindes[produkttype] != "$oplysninger[5]") {
mysql_query($brugeropret) or die (mysql_error()."anden sql");
echo "<br>entry $oplysninger[5] registreret til $oplysninger[0] var ukendt i basen - er blevet oprettet nu. Første insert<br>"; unset ($oplysninger); unset ($brugerfindes); } elseif (($brugerfindes[brugerid] == "$oplysninger[0]") AND ($brugerfindes[varenr] != "$oplysninger[1]") AND ($brugerfindes[topnr] != "$oplysninger[4]")) {
mysql_query($vareopret) or die (mysql_error()."anden sql");
echo "<br>entry $oplysninger[5] registreret til $oplysninger[0] var ukendt i basen - er blevet oprettet nu. Anden insert<br>"; unset ($oplysninger); unset ($brugerfindes);
} else {
echo "<br>Oplysningen findes allerede"; unset ($oplysninger); unset ($brugerfindes);
} } } } } } } ?>
Håber der er nogen der kan forklare mig hvorfor den while-løkke ikke fungerer.
AI bliver først for alvor en del af arbejdet, når teknologien integreres i den måde, vi arbejder på. At have adgang til AI betyder ikke nødvendigvis, at medarbejderne er klar til at bruge den.
Slettet bruger
19. februar 2003 - 13:37#1
while (false !== ($file = readdir($handle))) { Prøv med while (($file = readdir($handle)) !== false) {
Ellers er det fordi readdir($handle) fejler!? - false
Nej - den sætning kører ok - det er ved while-løkken: while ($brugerfindes = mysql_fetch_array($brugersearch)) { - at båndet knækker. Jeg har kørt det uden løkken - hvor den hæmningsløst smider data i SQL-basen uden at se på om data findes eller ej. Basen kan godt bestå af flere entries med samme brugerid og topnr, men hvor varenummeret kun må findes en gang i forbindelse med brugerid og topnr.
Synes godt om
Slettet bruger
19. februar 2003 - 13:45#3
Hvad med det her så? $findesbruger = "SELECT * FROM inventar WHERE brugerid = ' $oplysninger[0]'"; $brugersearch = mysql_query($findesbruger); var_dump ($brugersearch); echo "<br>"; while ($brugerfindes = mysql_fetch_array($brugersearch)) {
Det giver stadig ikke andet resultat end at var_dump stadig giver mig en mysql result resource. - den vil stadig ikke ind og køre i while-løkken. Hvis den er derinde burde jeg jo i det mindste få et echo frem uanset hvilken af forudsætningerne der bliver opfyldt.
Det eneste der bliver vist i browseren er:
resource(5) of type (mysql result) resource(6) of type (mysql result) resource(7) of type (mysql result) resource(8) of type (mysql result) resource(9) of type (mysql result) resource(10) of type (mysql result) resource(11) of type (mysql result) resource(12) of type (mysql result) .......
Synes godt om
Slettet bruger
19. februar 2003 - 14:28#5
Prøv at udskriv $findesbruger før du kører løkken og samlign med databasen!?
Jeg har fået det til at virke ved at omskrive koden lidt - resultatet er her:
<?php // opretter forbindelse til Mysql-server med brugerid mysql_connect("***", "***", "**") or die ("Det var ikke muligt at oprette forbindelse til databasen");
// vælger databasen der skal benyttes mysql_select_db("brugeroplysninger") or die ("Det var ikke muligt at åbne databasen");
$findestabel = "SELECT * FROM $db"; mysql_query($findestabel);
if (mysql_errno() == "1146") {
echo "Denne database findes ikke - så den bliver lige oprettet!<br>"; $nytabel = "CREATE TABLE $db( brugerid char(4), varenr varchar(20), varetekst varchar(30), servicelevel varchar(8), topnr varchar(8), dato timestamp(8) );";
mysql_query($nytabel) or die (mysql_error());
} else {
while (false !== ($file = readdir($handle))) {
if ($file == '.' OR $file == '..' OR $file == 'errors.txt' OR $file == 'WXXYYY.log' OR $file == 'user.txt' OR $file == 'TELENUM.txt') {
if (($oplysninger[0] == 'AFD') OR ($oplysninger[0] == 'NOU') OR ($oplysninger[0] == 'nou')) { echo "Brugerid $oplysninger[0] kan ikke tilføjes i databasen, da det er et reserveret ord<br>";
} else {
$findesbruger = "SELECT * FROM inventar WHERE brugerid = '$oplysninger[0]'"; $brugersearch = mysql_query($findesbruger); echo "værdien af variablen brugersearch<br>"; var_dump ($brugersearch); echo "<br>"; echo "værdien af variablen findesbruger<br>"; var_dump ($findesbruger); echo "<br>"; // while ($brugerfindes = mysql_fetch_array($brugersearch)) { $brugerfindes = mysql_fetch_array($brugersearch); echo "værdien af variablen brugerfindes:<br>"; var_dump ($brugerfindes); echo "<br>";
mysql_query($brugeropret) or die (mysql_error()."første sql");
echo "<br>entry $oplysninger[2] registreret til $oplysninger[0] var ukendt i basen - er blevet oprettet nu<br>"; unset($oplysninger); unset($brugerfindes);
} else {
echo "<br>Oplysningen findes allerede"; unset($oplysninger); unset($brugerfindes);
}
} } } } } } ?>
Ja - Jeg ved godt at det er en primitiv omgåelse af problemet, men hva pokker, det virker jo.
Hvis der er nogen der kan spotte evt. fejl i koden, der kan give problemer er i velkomnmen til at give besked.
Eller hvis der er nogen der kan omskrive koden så den enten kører hurtigere, eller bruger mindre hukommelse, så er pointene jeres, forudsat det giver samme resultat som den nuværende.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.