Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 18:15 Der er 50 kommentarer og
1 løsning

Underlig MySQL fejl.

Hej Eksperter.

Jeg får denne fejl fra mysql, når jeg prøver at lægge noget ind.

Fejl

Det er muligt at du har fundet en fejl i SQL-parseren. Undersøg venligst din forespørgsel nøje, og check at anførselstegn er rigtige og ikke giver konflikter. Andre fejlårsager kan være at du uploader en fil med binær udenfor et lukket tekstområde. Du kan også prøve din forespørgsel i MySQL kommandolinie-interfacet. MySQL-serverens fejlmelding der følger herunder, hvis der er nogen, kan også hjælpe dig med at finde problemet. HVis du stadig har probemer eller hvis parseren fejler hvor kommandolinieinterfacet lykkes, reducer din SQL-forespørgselsinput til den ene forespørgsel der forårsager problemet, og indsend en fejlrapport med datablokken i KLIP sektionen herunder:
----BEGYND KLIP----
eNptVc1y2zYQvvMp9pCZTGcohqKkxFanM3VtNbbjH0VykqMGDJcURBBkAZCNXrBvIj+Dj90FKSuH
HCwZ+/Ptt98uoMVq9biaw+UYLhO4WzzMIUkS+pvAeHZ+HqyfyPkSBJdf13N4c5PNwf6jGmEsmkjJ
NGq2TdhBEr2PkmgKSRxP38WTd/EMxmfzWTKfTUFhdQ6LHw28Ce736893c5hGcZSMR6ougi/rFTyu
Q7j4uHh4CuHrgqp9kxpuFvA+ioPl/QXxiWbRh1GjxsHyeskh4eOaQSbRGdxJ3f4I7i4ePs4hEyNp
69HZ2ex8NA58pS/Lq4unBdhu0xJhC+vFE3xvjDbwB7yNZ+PxWTyeTmZvIYS8Nlp0mh2fjLROCg1/
iZJdmDt8dd6itqjZLDKD1qLPUKIsMd2hKWAWs7OprdNmk+7ZnXyYxQSmFJq2Ya9DhXnt8SZxMmU/
m6s6lcpT82Ur0Z/+xbQSljj8KZRIpYsyT6t8MVjWxnHIA+7YNKQPJ2FS3GXUSsbGa1T0H9t3dbqx
0rXCyZ7DHWayOHpetC19U39TTbitU3aoF73J+Uz2MU05jo/WTpbCSOE9bDMHwtpidjyLUgwi3Qpf
QmxOputPISxNbUUIa1GNroTzMXVjZYGqj/Gg+wLNCcM6I/IchXPYU+rNaWtQtH3gIAFV+9nqo7B6
NqWWeoC8xh2sWo0hZEiAQFZ7ANTA4H4vgLrLWihpI4gSH9BBJ03JoXXlj7YUiogX/rAVHqMu6KN7
NhxNglBiITuESha0kSw5gq5JCUOTp3o/oerWYzH+XhMPyEXppC19DFlXtMeEnWPmhtye3q4GxbCG
uyOyGg3CtpOWA9Sed4g0wQKKgwFZCF1QtmdWN8Z3n5qWdcloEqkggCMVJTo2s2GPUJD+sgRH60a3
mO5rqUXToPahRMxr5Bk9a7olIOlIl8XDMgXkqzAQQ/Ab51VOFQtkFVNxkBsBtKfoIgiC9dAMMSDy
fRdU6dREJllCBSLvk2j1lGMuWUUeKzOmt+1onKdZUnGaL1VXXra+eXydI57GSFiULDJOZvFU3XH7
EcyXRO7+wHfmKDSl5UrqMuRsJah1z5YGzvR5xTR8r6uG2uTvirrEhuryouTSd/CqP2NkRJbE0QfT
rxrPsaIlq6BoSSgzDKckKPqqG6bPj4Ovz50Sp1T04jn+VEj8zVHi06wpT1YNewxrQ7r//ht1dzXs
d79bfDVt2I9YvyYTHd3zCPvYdF9QHLNZrv67vFk/+asiNeld+YeHnlQCc7yIHsm/dsQ0P/D+H4Ud
7gV30UmeAj1mVvNrC3UVsq0/Waj8DPqdHzaMjQy5JV4sOs+ab2FNYxQFd8cPwrfrxWrxy5+F/wE+
HFVT
----SLUT KLIP----
----BEGYND RÅ----

ERROR: C1 C2 LEN: 222 223 1599
STR: ø

CVS: $Id: sqlparser.lib.php,v 2.6.2.4 2004/03/05 18:52:54 lem9 Exp $
MySQL: 4.0.21-log
USR OS, AGENT, VER: Win IE 6.0
PMA: 2.5.7-pl1
PHP VER,OS: 4.3.8 Linux
LANG: da-iso-8859-1
SQL: UPDATE sv_users SET cprnr = 'skjult' , fornavn = 'Kristian Bak' , efternavn = 'Jensen' , adresse = 'skjult' , postnr_by = '2750 Ballerup' , telefon = 'skjult' , mobil = '0' , email = 'skjult' , kørekort = 'Nej' , bil = 'Nej' , arbejdstid = 'Heltid' , job_situation = 'Ledig' , job_ønske = 'Fast Job' , løn_fast = '120000' , løn_vikariat = '' , rådighed = '' , akasse = 'Ja' , ja_akasse = 'HK, Prosa, Sam-Data' , opsigelse = '' , ryger = 'Ja' , straffeattest = 'Ja' , bureauer = 'Nej' , ja_bureauer = '' , bemærkninger = 'Hej skjult, dette er så en test, for at du kan se at det virker som det skal, og det har så også været ved at give mig svedige nosser, men det virker nu, og er syntes faktisk det er RET så fedt, men du kan jo lige ringe senere hvis du lyster, jeg går igang med at oprette bruger databasen nu, og laver den nye grafik til login knappen, og så at de kan ændre i deres dataer, eller hvis de ønsker at blive slettet fra sitet.

Senere hen går, jeg så igang med din del af sitet, altså admin siden, hvor du kan se de forskellige brugere, og det er så også alt hvad du går lov til. :P

Måske hvis du er flink, så lader jeg dig hente en complet comma sepereret fil af databasen, sådan at når det system ham gutter laver kommer op og køre, så kan du bare hente hele lortet fra databasen og importere det. ;)

Det skal lige siges, at den database han laver, skal bygges op PRÆCIST som informationerne står i den mail du får nu. :P

Men det kan vi altid snakke om, vi snakkes måske senere, ellers må du have en forsat god dag. ;)' , WHERE cprnr = 'skjult'

----SLUT RÅ----

koden ser sådan her ud:

<?php
include("admin/inc/config.inc.php");

mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());

$q = mysql_query("SELECT * FROM sv_users LIMIT 1");

$felt = array();
for($i = 0; $i < mysql_num_fields($q); $i++) {
  $felt[] = mysql_field_name($q ,$i);
}

$sql = "UPDATE sv_users SET ";
for($i = 0; $i < count($felt); $i++) {
if($felt[$i] != "id" AND $felt[$i] != "created") {
  $sql .= "$felt[$i] = '" . $_POST{$felt[$i]} . "' ";
  if($i != (count($felt)-1)) {
    $sql .= ", ";
  }
}
}
$sql .= " WHERE cprnr = '".$_POST['cprnr']."'";
//mysql_query($sql) or die(mysql_error());
include("inc/header.inc.php");

echo "Opdateringen blev udført på: " . mysql_affected_rows() . " rækker.\n<br>";
echo "<br>\n";
echo $sql . "<br>\n";
echo "<br>\n";
echo "<a href='index.php'>Tilbage til Forsiden.</a><br>\n";

include("inc/footer.inc.php");
?>
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:22 #1
at god dag. ;)' , WHERE cprnr = 'skjult'

det komma skal vist ikke være der !!
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:23 #2
Check også om

løn_fast = '120000'

virkelig skal være en streng
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 19:27 #3
komma... har jeg virkeligt siddet her og gloet og ventet på svar så længe pga et overset komma...

damn.. hader når man ser sig blind på tingene..

tjekker lidt.
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 19:29 #4
lige even...
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 19:31 #5
okey det komma skal ikke være der, men hvordan får jeg det væk??

if($i != (count($felt)-1)) {
$sql .= ", ";
}

den her fejler åbenlyst... :(
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:41 #6
Lidt mystisk.

Den kode ser fin ud.
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 19:42 #7
det øverste output, er fra php siden, som jeg så smed ind i phpmyadmin... derfor ved jeg at den ikke virker...
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 19:44 #8
HA!
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 19:45 #9
if($felt[$i] != "id" AND $felt[$i] != "created") {

der sotere vi 2 fra... så den skal se sådan her ud:

if($i != (count($felt)-2)) {
$sql .= ", ";
}
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 19:47 #10
men smid lige et svar, for du fik trodsalt sporet mig ind i den rigtige retning. ;)
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:52 #11
kommer her
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:53 #12
Kunne du ikke flytte den if derop hvor du smider i arrayet ?

Det ville vel gøre logikken lidt mere robust for tilføjelse af nye felter.
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 19:57 #13
nu er jeg ikke helt med... prøv lige at smide et eksempel.
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:06 #14
Jeg vil fjerne id og created ikke i den for løkke som laver sql strengen, men
i den for løkke osm konstrurerer field arrayet.
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:06 #15
nåårh nu kan jeg se hvad du mener. :)

Men det vil aldrig blive et problem, det er fordi at jeg sotere de felter fra som ikke skal opdateres i databasen, og det er jo klart at de felter så skal trækkes fra, når der skal sættes kommaer. ;)
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:06 #16
osm=som
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:09 #17
okey prøv lige at smide et eksempel, for er lidt lost lige nu så...
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:12 #18
lige et hurtigt fil spørgsmål. :)

$handle2 = fopen("admin/tmp_dl/brugere.txt", "a"); // Opretter tmp filen.
fwrite($handle2, $file_msg); // Skriver til temp filen.

den her, åbner filen, og sætter "pointeren" til sidste linie, og skriver det ind, right?

jeg skal ikke have nogle \n eller noget vel?
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:14 #19
"a" = append

den placerer skrivningen efter sidste linie i filen.

Jeg antager at $file_msg slutter med en \n
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:16 #20
tjekker lige. ;)

Det er fordi at jeg har komveteret et andet script, hvor der ikke er brug for det.
da det kun er en enkel linie der skal skrives. ;)

men 2 sec.
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:16 #21
a b c d, skip d, undlad 4. komma => a,b,c,
a b c d, skip d, undlad 3. komma => a,b,c
a b c d e, skip d, undlad 3. komma => a,b,c e,

det er derfor at jeg tror at det er bedst at smide de unødvendige felter væk
i første for løkke
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:17 #22
function file_msg() {
global $mysql_field_names;
$file_msg = "";
$n = 1;
  foreach($_REQUEST as $key=>$val) {
  $file_msg .= $val . ";";
  $n++;
  }
  $file_msg = substr_replace($file_msg, '', -1);
 
  return $file_msg;
}

den ser sådan her ud... går ud fra at jeg bare kan lave den om til denne her:

function file_msg() {
global $mysql_field_names;
$file_msg = "";
$n = 1;
  foreach($_REQUEST as $key=>$val) {
  $file_msg .= $val . ";";
  $n++;
  }
  $file_msg = substr_replace($file_msg, '', -1);
  $file_msg .= "\n";
 
  return $file_msg;
}

??
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:18 #23
Og det blev forkert. Jeg prøver igen:

a b c d, skip d, undlad komma sidste felt => a,b,c,
a b c d, skip d, undlad komma næstsidste felt => a,b,c
a b c d e, skip d, undlad komma næstsidste felt => a,b,c,e,
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:19 #24
den a b c d besked, kan du smide et eksempel på noget kode over hvordan du mener

for($i = 0; $i < mysql_num_fields($q); $i++) {
  $felt[] = mysql_field_name($q ,$i);
}

skal se ud?

regner så med at jeg bare skal fjerne den i den anden. ;)
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:19 #25
Det tror jeg også
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:21 #26
ok. ;)
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:22 #27
for($i = 0; $i < mysql_num_fields($q); $i++) {
  $felt[] = mysql_field_name($q ,$i);
}

...

for($i = 0; $i < count($felt); $i++) {
if($felt[$i] != "id" AND $felt[$i] != "created") {
  $sql .= "$felt[$i] = '" . $_POST{$felt[$i]} . "' ";
  if($i != (count($felt)-2)) {
    $sql .= ", ";
  }
}
}

->

for($i = 0; $i < mysql_num_fields($q); $i++) {
if(mysql_field_name($q ,$i) != "id" AND mysql_field_name($q ,$i) != "created") {
  $felt[] = mysql_field_name($q ,$i);
}
}

...

for($i = 0; $i < count($felt); $i++) {
  $sql .= "$felt[$i] = '" . $_POST{$felt[$i]} . "' ";
  if($i != (count($felt)-1)) {
    $sql .= ", ";
  }
}
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:27 #28
hmmm der går den ind og fejler, for den sætter også cprnr, den lægger som nummer 2 felt i databasen...

sådan her lægger felterne i databasen.

id,
cprnr,
fornavn,
efternavn,
adresse,
postnr_by,
telefon,
mobil,
email,
kørekort,
bil,
arbejdstid,
job_situation,
job_ønske,
løn_fast,
løn_vikariat,
rådighed,
akasse,
ja_akasse,
opsigelse,
ryger,
straffeattest,
bureauer,
ja_bureauer,
bemærkninger
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:27 #29
og så for ikke at ændre på cprnr, så skal den ikke tage den med, og dvs. at jeg skal lave en større if...
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:31 #30
damn har lige fundet en fejl..

har fået sat feltet cprnr i databasen til at være int, dvs. at alle folk født før den 10'ne, så fejler den...
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:32 #31
og problemet ved din løsning blev løst ved at smide dette ind i for()'en som laver array'et:

AND mysql_field_name($q, $i) != "cprnr"
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:33 #32
Så tror jeg sQ at jeg har fået ordnet det hele i dette script. *G*

men tester det lige så venter jeg tilbage. ;)
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:36 #33
hvordan blev cprnr håndteret i den originale version ?
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:38 #34
uh hvor det virker. ;)

Jeg takker mange gange for hjælpen Arne. ;)

kan være der bliver smidt et nyt spørgsmål her om en lille 20min til halv time, om noget fil halløj. ;)
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:40 #35
så vidt jeg husker så lavede jeg en select fornavn, efternavn osv fra mysqlen, og brugte en array som jeg har som standard, for at kunne skrive felt navnet pænt. ;)

men det var WAY for besværligt. ;)
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:40 #36
:-)

PS: Iøvrigt skylder jeg da vist at fortælle dig at jeg så godt som aldrig programmerer
    i PHP.
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:44 #37
WTF!!!!!!!!!!!

*GGG* damn, har programmeret i snart 3 år, normalt får jeg det også løst, men er under mega tidspres lidt nu.

skal hente en ven fra jylland i høje taastrup her klokken 22:33, så skal ud af døren om en lille time, og så skal der drikkes, og så har vi et møde med kunden som jeg laver denne side for klokken 10 i morgen hvor det hele skal være færdigt, så vil helst være færdig nu her før jeg tager afsted, og så finder jeg ingen anden udvej, end at spørge for at få det ordnet så hurtigt som muligt. ;)
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:48 #38
Jeg har programet i 21 år i assembler, Fortran, Pascal, C, C++, Java, VBA, JSP,
C#, VB.NET etc..

ASP og PHP er kun noget jeg sådan undtagelsesvist kigger på.
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:52 #39
wow...

jamen hvis du har tid, kan vi lige så godt tage den fil halløj ud så, hvis du har lyst?
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 20:52 #40
kan også oprette et nyt spørgsmål, hvis du vil have point for det?
Avatar billede arne_v Ekspert
01. oktober 2004 - 20:56 #41
Hvad du nu finder mest passende.
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:00 #42
mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());

$sql = mysql_query("select * from sv_users");
$result = mysql_query($sql);

$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
  for($i = 0; $i < $antal; $i++) {
  $row{$i} = ereg_replace("\n","", $row{$i});
  $file_sql .= $row{$i} . ";";
  }
  $file_sql .= "\n";
}

echo $file_sql;

den her fejler.

under bemærkninger, hvis en bruger nu laver ... linie skift, så laver den også linie skift, i outputtet, og det skal den ikke, og det er det jeg prøver at rette.

Nogle ideer?
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:03 #43
Det er fordi at kunden skal kunne downloade en komma sepereret fil, til brug i access database, og har så fået det lavet sådan at han klikker på et link, og så downloader den filen. ;)

men vil gerne have at alt står som det skal. ;)
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:05 #44
okey se lige bort fra $result = mysql_query($sql);

;)

den er RET så unødvendig. :)
Avatar billede arne_v Ekspert
01. oktober 2004 - 21:07 #45
Er problemet at linie skiftene kommer med alligevel ?
Avatar billede arne_v Ekspert
01. oktober 2004 - 21:08 #46
Har du prøvet:

$row{$i} = ereg_replace("\\n","", $row{$i});

altså med 2 backslasher
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:10 #47
ahhh... prøver lige. ;)

men det plejer nu ikke at være et problem, det er sådan jeg har gjort de andre steder, men prøver lige. ;)
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:10 #48
stadig det samme. :(
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:13 #49
tror jeg lige jeg opretter et nyt spørgsmål, kan jo være andre har en løsning. ;)

no offence. ;)
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:16 #50
http://www.eksperten.dk/spm/545956

der kan du så svare med. :P
Avatar billede arne_v Ekspert
01. oktober 2004 - 21:19 #51
Det er ikke  \\n så du kan godt fjerne den ene backslash igen
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester