webForumDet fria alternativet

behöver hjälp! separera textrad för att jämföra

PHP

9 svar · 358 visningar · startad av matissen

Medlem sedan feb. 200513 inlägg
Frågan#1

Jag har ett delikat problem att lösa. Jag har en sida med massor av bilder. När bilderna lades in lästes dimensionerna in i en tabell (photoPizelsize) i formen t.ex. 400x600, sparad som vanlig textrad (varchar).

Nu har jag lagd till så att den dessutom skriver in i en ny tabell (Format) om bilden är liggande, stående eller kvadratisk när en bild laddas upp. Problemet är att de tusentals bilder som ligger på sidan har tabellen "format" tom.

Jag skulle alltså behöva göra ett litet script som kollar igenom tabellen "photoPixelsize" på alla bilder, och särar på informationen 400x600 eller 500x500 så att den kan jämföra den första siffran med den andra, och om 400 < 600 så fyller den i fältet "format" att bilden är "stående" osv.

Hur gör jag detta? Det är enormt viktigt att inget går fel! Kommer iofs spara databasen innan jag prövar så jag kan återställa allt.

Just nu är tabellen format tom på alla bilder, vilket borde göra det lite lättare.

För att sammafatta:
Loopa igenom alla bilder, läsa av och separera textraden photopixelsize (ex 400x600 till 400 600) för att kunna jämföra siffran innan x med siffran efter.
Beroende på resultatet skriver den in in tabellen format om bilden är stående, liggande eller kvadratisk.
Klart.

Medlem sedan juli 20033 147 inlägg
#2

Uhm, då ska vi se. :)

$sql = mysql_query("
SELECT * 
FROM picture
") or die(mysql_error());

while($row = mysql_fetch_assoc($sql)) {

    $img_size = explode('x', $row['photoPixelsize']);
    $sql_update = "UPDATE picture SET format = ";
    
    if($img_size[0] > $img_size[1]) {
        $sql_update .= "_liggande_";
    } elseif($img_size[0] < $img_size[1]) {
        $sql_update .= "_stående_";
    } else {
        $sql_update .= "_kvadratisk_";
    }

    $sql_update .= " WHERE id = $row[id]";
    mysql_query($sql_update) or die(mysql_error());

}

Dock helt otestat.
Du får ändra värdena inom $sql_update .= "" till vad du vill spara "format" som.

/r Dock kommer det ta ett tag att köra frågan, om det nu är tusentals poster. :)

Medlem sedan feb. 200513 inlägg
#3

har kört det på testserver med mindre bilder för att pröva =)

verkar dock inte funka...

Medlem sedan juli 20033 147 inlägg
#4

Fick du något felmeddelandet? Vad hände? Var sidan blank? Har du ändrat alla kolumnen så de passar just din tabell?

Medlem sedan feb. 200513 inlägg
#5

Japp, har ändrat så det passar men får detta meddelande:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Nu ser den ut exakt så här:

$sql = mysql_query("
SELECT *
FROM photos
") or die(mysql_error());

while($row = mysql_fetch_assoc($sql)) {

    $img_size = explode('x', $row['photoPixelSize']);
    $sql_update = "UPDATE photos SET photoFormat = ";
    
    if($img_size[0] > $img_size[1]) {
        $sql_update .= "_liggande_";
    } elseif($img_size[0] < $img_size[1]) {
        $sql_update .= "_stående_";
    } else {
        $sql_update .= "_kvadratisk_";
    }

    $sql_update .= " WHERE photoID = $row[id]";
    mysql_query($sql_update) or die(mysql_error());

} 
?>
Medlem sedan juli 20033 147 inlägg
#6

Ändra till

 $sql = mysql_query("
SELECT *
FROM photos
") or die(mysql_error('SQL: '.$sql));

while($row = mysql_fetch_assoc($sql)) {

    $img_size = explode('x', $row['photoPixelSize']);
    $sql_update = "UPDATE photos SET photoFormat = ";
    
    if($img_size[0] > $img_size[1]) {
        $sql_update .= "_liggande_";
    } elseif($img_size[0] < $img_size[1]) {
        $sql_update .= "_stående_";
    } else {
        $sql_update .= "_kvadratisk_";
    }

    $sql_update .= " WHERE photoID = $row[id]";
    mysql_query($sql_update) or die(mysql_error('SQL: '.$sql_update));

}

Så får vi se vad SQL-frågan skriver ut.

Medlem sedan feb. 200513 inlägg
#7

Nu får jag inget felmeddelande men inget uppdateras.

Kan det ha något att göra med:
" WHERE photoID = $row[id]"

kolumnen i databasen heter "photoID" ska det då stå:
" WHERE photoID = $row['photoID']"?

har iofs provat det, men funkar ändå inte.

Medlem sedan juli 20033 147 inlägg
#8

Det ska isåfall vara utan '-fnuttarna.

WHERE photoID = $row[photoID]

Alternativ

WHERE photoID = '$row[photoID]'

Om photoID inte är ett tal.

Medlem sedan feb. 200513 inlägg
#9

lösning!

Detta funkar:

$sql = mysql_query("
SELECT *
FROM photos
") or die(mysql_error('SQL: '.$sql));

while($row = mysql_fetch_assoc($sql)) {

    $img_size = explode('x', $row['photoPixelSize']);
    
    if($img_size[0] > $img_size[1]) {
        $format = "liggande";
    } elseif($img_size[0] < $img_size[1]) {
        $format = "stående";
    } elseif($img_size[0] == $img_size[1]) {
        $format = "kvadratisk";
    }

    $sql_update = "UPDATE photos SET format = '$format' WHERE photoID = $row[photoID]";
    mysql_query($sql_update) or die(mysql_error('SQL: '.$sql_update));

}

Tack för hjälpen! :)

Medlem sedan juli 20033 147 inlägg
#10

Gott! :)

Glöm inte att acceptera tråden som löst

263 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)