Seite 1 von 2

Brauche kleine php-Hilfe für Petitions-Script

Verfasst: 09.11.2006 03:10
von hackepeter13
Hi Leute ich brauch dringend eine kleine Hilfe in PHP, hab schon einiges Probiert, komm aber nicht weiter.

Folgendes ich hab ein Petitions-Script, es ist so ganz fein, nur hats einen Hacken.
Jede Eintragung muss vom Admin freigeschaltet werden - ok damit könnte ich noch Leben.
Nur das große Problem ist, das jeder Eintrag mit einer ID in der MySQL Datenbank angelegt wird, nach dieser ID, werden die Einträge auch auf der Seite sortiert.
Das Problem an der Sache ist, wenn z.B. nun der Eintrag 1 in die Datenbank kommt, hat er die ID 1.
Wenn jetzt nun der 2. Eintrag erfolgen soll, bekomm ich auf meiner Seite eine Fehlermeldung, das die 1 schon vorhanden ist.

Die IDs werden also nicht automatisch weiterführend in die MySQL eingetragen.
Selbst nach der Freischaltung.

Ich hab es auch hinbekommen, das wenn die Daten beim Absenden des Formulars in die Datenbank gespeichert werden, sie dann automatisch freigeschaltet sind, aber der Counter der Anzeigen soll wie viele Einträge es schon gibt, zählt nicht weiter, da will er die Zahl in der Datenbank nicht updaten.

Wenn sich jemand bereit erklären würde mir zu helfen, wäre ich sehr Dankbar, das kleine Script würde ich dann natürlich auch senden.

Wäre echt nett, weil ich brauchs dringend, weil ich ein großes Projekt eigentlich heute schon starten wollte.

Danke

Verfasst: 09.11.2006 09:48
von Beagleman
Wenn du dein Script mal hier einstellen bzw. verlinken würdest, dann könnte man dir vielleicht helfen. Ebenso wichtig wäre die Struktur der entsprechenden Datenbank-Tabelle.

Verfasst: 09.11.2006 12:36
von hackepeter13
Hi Beagleman,

Ok, hier ist das Script in einer RAR-Datei.
Es ist auch eine sql_install.php bei, man muss aber erst in der config.php die Verbindungsdaten zur Datenbank eintragen.

Wenn du es testest, dann mach mit dem formular ein Eintrag.
Dann gehst du in die Datenbank und änderst die IP von deinem Eintrag, damit du dann einen zweiten Eintrag versuchen kannst, sonst sagt er dir, das die IP schon registriert ist (zwecks Spam).
Dann bekommt man beim Absenden des zweiten Eintrages die Fehlermeldung und der Eintrag wird nicht vorgenommen, da die ID schon existiert.

Danke

Verfasst: 09.11.2006 14:49
von Beagleman
Testen werde ich es sicher nicht, ich wollte mir den Code und die Tabellenstruktur nur ansehen.

Versuche mal in der Tabelle 'eintrag' die Spalte 'id' auf 'auto_increment' zu setzen.

Verfasst: 09.11.2006 15:29
von hackepeter13
Beagleman hat geschrieben:Testen werde ich es sicher nicht, ich wollte mir den Code und die Tabellenstruktur nur ansehen.

Versuche mal in der Tabelle 'eintrag' die Spalte 'id' auf 'auto_increment' zu setzen.
@Beagleman ich danke dir
Scheint zu funktionieren, er setzt die ID jetzt fort und gibt auch keine Fehlermeldung beim Absenden des Formulars.

Und ich da die ganze Nacht und fummel mich zu tode, dabei ist es doch so einfach :lol:

Vielen Dank, hast mir sehr geholfen.

PS: Nun kann ich ja das Ergebnis zeigen - siehe Signatur: Fight-4-Tuning

Verfasst: 11.11.2006 13:16
von hackepeter13
OK, mich beschäftigt gerade noch eine anderes Thema.

Wie kann ich sie sortierung (DESC/ASC), der ausgelesenen Daten ändern.

Also folgendes:
- es werden immer 20 Zeilen angezeigt (die Anzahl ist in der config.php so bestimmt)
- sortiert wird nach der id
- und es beginnt mit der 1, sprich so
1 Name A
2 Name B
3 Name C
...
Nach 20 kommt dann "nächste Seite", wo es dann weiter geht.

Die letzten Einträge werden immer auf der letzten Seite angezeigt.
Nun möchte ich es aber gerne so haben, das der letzte Eintrag immer als erstes angezeigt wird.
Also das dann auf der ersten Seite z.B. so aussieht:
246 Name BBC
245 Name BBB
244 Name BBA
...
Das ist der PHP Abschnitt, der das alles Anzeigt:

Code: Alles auswählen

<?
if($_GET[s] == "") { $_GET[s] = 0; }
	$sql="SELECT * FROM eintrag WHERE frei = '1' ORDER BY id LIMIT ".$_GET[s].",".($Zeilen_pro_seite+1);
	$result=mysql_query($sql);
	if(mysql_num_rows($result) < $Zeilen_pro_seite+1) { $letzte=1; }
	$anzahl=0;
	if(mysql_num_rows($result) == 0) {
	?>
				<tr style="font-family:Verdana, Arial; font-size:12px">
					<td colspan="4" align="center" bgcolor="<?=$farbe[1] ?>">Noch keine Einträge</td>
				</tr>
	<?
	}
	while($eintrag=mysql_fetch_array($result) and $anzahl<$Zeilen_pro_seite) {
		$anzahl++;
		?>
				<tr bgcolor="<? echo $farbe[$zeile]; ?>" style="font-family:Verdana, Arial; font-size:12px">
					<td align="left"><? echo $eintrag[id]; //ID ?></td>
					<td align="left"><? echo $eintrag[name].", ".$eintrag[vorname]; //Name ?></td>
					<td align="left"><? echo $eintrag[stadt]; //Stadt ?></td>
					<td align="left"><? echo $eintrag[beruf]; //Beruf ?></td>
				</tr>
				<tr>
					<th height="1" colspan="4"></th>
				</tr>
		<?
		$zeile=1-$zeile;
	}
?>
Kann mir jemand sagen wie ich die Sortierung umdrehe.
Hab schon einiges Probiert, hat aber nur Fehler gebracht.

Danke.

Verfasst: 11.11.2006 13:25
von Beagleman
Probier es mal so:

Code: Alles auswählen

<?
if($_GET[s] == "") { $_GET[s] = 0; }
   $sql="SELECT * FROM eintrag WHERE frei = '1' ORDER BY id DESC LIMIT ".$_GET[s].",".($Zeilen_pro_seite+1);

Verfasst: 11.11.2006 13:29
von hackepeter13
Beagleman hat geschrieben:Probier es mal so:

Code: Alles auswählen

<?
if($_GET[s] == "") { $_GET[s] = 0; }
   $sql="SELECT * FROM eintrag WHERE frei = '1' ORDER BY id DESC LIMIT ".$_GET[s].",".($Zeilen_pro_seite+1);
Ich glaub ich brauch ne Brille ^^

Ich hatte es fast genauso, nur hatte ich LIMIT dafür weg genommen, als ich an dieser stelle DESC eingesetzt hatte.
Ohman, ich wusste doch das es wieder so simple ist :oops:

Ich danke dir wieder einmal sehr, für die schnelle Hilfe.
:wink:

Verfasst: 11.11.2006 13:48
von Olli Oberhausen
Wenn du deinen code schon veröffentlichst solltest du dringend was gegen sql injections tun - sonst ist deine list bald leer oder voll mit spam. ;o)

Die einfachste lösung wäre:

Code: Alles auswählen

$sql="SELECT * FROM eintrag WHERE frei = '1' ORDER BY id DESC LIMIT " . intval($_GET[s]) . "," . ($Zeilen_pro_seite+1);
Olli

Verfasst: 11.11.2006 14:58
von hackepeter13
Hi Olli,

danke für den Hinweis, werds mal testen.

Wegen dem Spam, erstmal, wird ja die IP mit gespeichert und es ist so, das jede IP sich nur einmal eintragen kann, sprich bei jedem Absenden des Formular wird das überprüft.
Und zusätzlich müssen alle Einträge erst von mir im Adminbereich freigeschaltet werden, damit sie auf der Seite angezeigt und auch gezählt werden.

%Edit:
Funktioniet und läuft :wink: