Gå til innhold

Hente ut $_POST info fra loop


Anbefalte innlegg

Heisann. Jeg lager et testscript på pure f. I scriptet skal man skrive inn Navn, URL, velge kategori og en beskrivelse. Hele scriptet fungerer i samkjør med en database og kategoriene hentes ut derfra. Når jeg har fylt ut feltene og valgt kateogri ble kategori-raden blank i databasen.

 

Tror feilen ligger i denne delen av scriptet:

 

if(!isset($_POST['add']))
		{
			echo "<table width='29%' border='0' align='center' >";
            echo "<tr>";
			echo $text;
            echo "<td width='20%' height='25'>";
            echo "<form action='".$_SERVER['self']."' method='post'>";
            echo "Name: </td><td width='70%'><input type='text' size='45' name='name' value='" . $_SESSION['name'] . "'></td>";
            echo "</tr>";
            echo "<tr>";
            echo "<td width='20%' height='25'>";
            echo "URL: </td><td width='70%'><input type='text' size='45' name='url' value='" . $_SESSION['url'] . "'></td>";
            echo "</tr>";
			echo "<tr>";
			echo "<td width='20%' height='25'>";
			echo "Kategori: </td><td width='70%'>";
			// Find all categoryeis
			$catf = "SELECT cat_name, cat_id FROM cat ORDER BY cat_id DESC";
			$catfind = mysql_query($catf) or die(mysql_error());
			echo "<select name='category'><br />";
			while ($catrow=mysql_fetch_assoc($catfind))
			{
				echo "<option value='".$catrow['cat_id']."'>".$catrow['cat_name']."</option>";
			}
			mysql_free_result($catfind);
			echo "</select></td>";
            echo "</tr>";
			echo "<tr>";
            echo "<td width='20%' height='100'>";
            echo "Beskrivelse: </td><td width='70%'><textarea name='desc' rows='15' cols='45' >" . $_SESSION['desc'] . "</textarea></td>";
            echo "</tr>";
            echo "<tr>
            <td width='20%' height='25'>";
            echo "</td><td width='70%'>";
            echo "<input type='submit' name='add' value='Legg til'></td></form>";
            echo "</tr>";
            echo "</table>";
		}

...

 

// Getting the post info into normal vars for database use
				$_POST['name'] = $name;
				$_POST['url'] = $url;
				$_POST['category'] = $cat;
				$_POST['desc'] = $desc;

				// Insert all the info into the database
				$sql3 = "INSERT INTO link (link_id, link_title, link_url, link_desc, link_posted, user_id, cat_id) 	VALUES ('$iddd','$name','$url','$desc','$now','$userID','$cat')";
				$result3 = mysql_query($sql3) or die(mysql_error());

 

 

Hele scriptet: http://pastebin.com

 

(Har også problem med at

// Add one to get a new ID
                                       $stupid = 1;
                                       $iddd = $idd + $stupid

 

Ikke funker. Noen som veit hvorfor ikke iden blir økt med en? (Klipt ut av hele scriptet))

Endret av TheClown
Lenke til kommentar
Videoannonse
Annonse

Under den siste linjen du har postet:

var_dump($sql3);

 

Det er meget mulig at spørringen din ikke inneholder det du tror den vil gjøre. Dette på grunn av at

$_POST['name'] = $name;
$_POST['url'] = $url;
$_POST['category'] = $cat;
$_POST['desc'] = $desc;

meget sansynlig skulle ha vært

$name = mysql_real_escape_string($_POST['name']);
$url = mysql_real_escape_string($_POST['url']);
$cat = mysql_real_escape_string($_POST['category'] );
$desc = mysql_real_escape_string($_POST['desc']);

Lenke til kommentar

Når det er sagt så er det et par grunnregler du bør lære deg:

 

1: Alltid feilsjekk informasjon som kommer fra eksterne kilder (også databaser) slik at du er sikker på at dette ikke er ting som kan ødelegge for deg

2: Bruk alltid beskrivende variabelnavn. Hvis du har flere spørringer så bruk gjerne tabellnavnet i variabelene som brukes til å behandle spørringen med. Variabler som $sql424 er veldig uheldige.

3: Når du skal feilsøke noe som mangler så legg til kall i skriptet som skriver ut verdiene underveis. På den måten så kan du finne ut hvor verdiene forsvinner.

Lenke til kommentar

Nei, nei :p

 

Jeg har skjekket databasene flere ganger, og jeg vet at den skriver riktig info. Problemet er det at jeg tror ikke at jeg har satt til $_POST ordentlig på kategori.

 

And IDen; En loop heter ut den høyeste IDen som finnes i databasen og slutter loopen (altså bare en løkke), så fører jeg databaseinfoen vidre til en vanelig variable. Så skal jeg legge til 1 slik at variablen blir en høyere enn det den orginalt var.

 

Problemet er bare det at loopen henter og skriver samme verdi, som akkurat nå er 10.

Endret av TheClown
Lenke til kommentar

// Get the highest ID from the database
                                       $idget = "SELECT link_id FROM link where link_id = (SELECT max(link_id) FROM link)"; $resultt=mysql_query($idget) or die(mysql_error());
                                       while ($roww=mysql_fetch_assoc($resultt))
                                       {
                                               $idd = $roww['link_id'];
                                       }
                                       mysql_free_result($resultt);

                                       // Add one to get a new ID
                                       $stupid = 1;
                                       $iddd = $idd + $stupid;

 

Loopen er unødendig?

Lenke til kommentar

PHP

<?php

// Get the highest ID from the database

$idget = "SELECT link_id FROM link where link_id = (SELECT max(link_id) FROM link)";

$resultt=mysql_query($idget) or die(mysql_error());

$roww=mysql_fetch_assoc($resultt)

$idd = $roww['link_id'];

mysql_free_result($resultt);

 

// Add one to get a new ID

$stupid = 1;

$iddd = $idd + $stupid;

?>

 

Gir vel samme resultat

Endret av Runar0
Lenke til kommentar

Jeg ville ha gjordt det slik, og sql ser unødvendig tungvint ut

 

PHP
<?php

$idget "SELECT max(link_id) id FROM link";

$idd=mysql_fetch_assoc(mysql_query($idget));

echo $idd['id'];

 

// evt hvis man ønsker maks id + 1

$idget "SELECT max(link_id)+1 id FROM link";

$idd=mysql_fetch_assoc(mysql_query($idget));

echo $idd['id'];

?>

Lenke til kommentar

if(!isset($_POST['add']))
  	{
    echo "<table width='29%' border='0' align='center' >";
             echo "<tr>";
    echo $text;
             echo "<td width='20%' height='25'>";
             echo "<form action='".$_SERVER['self']."' method='post'>";
             echo "Name: </td><td width='70%'><input type='text' size='45' name='name' value='" . $_SESSION['name'] . "'></td>";
             echo "</tr>";
             echo "<tr>";
             echo "<td width='20%' height='25'>";
             echo "URL: </td><td width='70%'><input type='text' size='45' name='url' value='" . $_SESSION['url'] . "'></td>";
             echo "</tr>";
    echo "<tr>";
    echo "<td width='20%' height='25'>";
    echo "Kategori: </td><td width='70%'>";
    // Find all categoryeis
    $catf = "SELECT cat_name, cat_id FROM cat ORDER BY cat_id DESC";
    $catfind = mysql_query($catf) or die(mysql_error());
    echo "<select name='category'><br />";
    while ($catrow=mysql_fetch_assoc($catfind))
    {
    	echo "<option value='".$catrow['cat_id']."'>".$catrow['cat_name']."</option>";
    }
    mysql_free_result($catfind);
    echo "</select></td>";
             echo "</tr>";
    echo "<tr>";
             echo "<td width='20%' height='100'>";
             echo "Beskrivelse: </td><td width='70%'><textarea name='desc' rows='15' cols='45' >" . $_SESSION['desc'] . "</textarea></td>";
             echo "</tr>";
             echo "<tr>
             <td width='20%' height='25'>";
             echo "</td><td width='70%'>";
             echo "<input type='submit' name='add' value='Legg til'></td></form>";
             echo "</tr>";
             echo "</table>";
  	}

 

Når du først skal skrive ut såpass mye HTML-kode, lønner det seg å benytte seg av EOF, eller heredoc.

 

Lite eksempel:

 

PHP

<?php

$minVariabel "Hei på deg din sei!:)";

$output = <<<EOF

<html>

<head>

<title>PHP-testside</title>

</head>

<body>

<h1>$minVariabel</h1>

<br>

<h2>$minVariabel</h2>

<br>

<p>$minVariabel</p>

</body>

</html>

EOF;

 

echo $output;

?>

 

Lenke til kommentar

Kan være greit å legge ved en link til en eller flere sider om forklarer litt mer on hva EOF/Heredoc gjør for noe. Jeg fant denne: http://en.wikipedia.org/wiki/Here_document

 

Men vil ikke <pre> tagen gjøre det samme ?

 

Jeg pleier alltid å bruke \n (linjeskift) for å gjøre kildekoden mer lesbar, men dette ser ut til å være en enklere metode, lært noe i dag og :)

Endret av crowly
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...