PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbank - Eine generelle Frage


Stella
24.04.2003, 08:07:08
Guten Morgen,

na alle fit? Ich hab mal wieder.... (war ja in den letzten 2 Tagen kaum hier) ... eine Frage.

Kann ich Probleme bei der Ausgabe eines Arrays bekommen, wenn in meinem Feld ein Leerzeichen steht?

zB.
name
Egon Müller

oder wäre es besser das zu spliten in:
vorname name
Egon Müller

Die frage stellt sich mir, weil ich es nicht schaffe meine Daten wieder zurück an die DB zu senden. Er schickt bloß Egon und läßt den Müller einfach weg.


Gruß Nina

c4
24.04.2003, 08:14:23
Da gibt es eigentlich kein Problem.
Dürfte ich daher wieder um das entsprechende Stückchen Code bitten? Ich vermute mal, dass da wieder ein paar ' oder " fehlen...

Stella
24.04.2003, 08:16:09
Schau mal unter Probleme mit echoausgabe...

c4
24.04.2003, 08:28:52
Also was mir wieder aufgefallen ist, ist, dass bei den ganzen print()-Befehlen nicht einmal " oder ' verwendet wurde. Dies empfiehlt sich aber noch immer.

Du sagst, dass Du die Daten zurückschreiben willst - bei Deinem alten Problem mit den echos steht nix von INSERT oder UPDATE, was ja zum zurück schreiben in die DB nötig wäre. Das, was dort steht - auch die Arrays - sieht schon mal okay aus.
Der Code, in dem genau das geschehen soll ist der interessantere.

Stella
24.04.2003, 08:36:08
Vielleicht kurz zur Erklärung:

Ich habe eine Tabelle mit sämtlichen Kontaktdaten der Mitarbeiter.
Ich möchte, das der User die Personen heraussuchen kann mit denen er am meisten zu tun hat. Die soll er auswählen und danach bekommt er alle Daten angezeigt, damit er sie sich auch ausdrucken kann.

Mehr möchte ich im Prinzip nicht. Eine Abfrage der Namen, eine Auswahlmöglichkeit und das Anzeigen der kompletten Datensäze zu den Auswahlen.

Ist das so schwierig ?

c4
24.04.2003, 08:45:22
Ah, da hab ich doch tatsächlich was falsch verstanden. Passiert.

Steht in Deinem Skript noch immer sowas:
name='kontakt' value=$row['name']>.$row['name']<td>? Wenn ja, dann fehlen dort mal wieder/noch immer die Hochkommas bei value! Somit übermittelt er halt nur Erwin oder Egon oder was auch immer. Alles dahinter bleibt noch immer unberührt stehen.

Stella
24.04.2003, 08:48:30
ich habe in meiner DB die Namen mittlerweile getrennt. Es gibt nur Vor- und Nachnamen.

die Auswahl klappt mittlerweile, die Nachnamen stehen auch in der URL aber die Anzeige klappt noch nicht. Habe ich das eine falsche Idee gehabt?

Der Code zur Ausgabe ist://Anzeige der ausgewählten Daten
$result=mysql_query("SELECT * FROM kontakt WHERE name='".$_REQUEST['name']."' ORDER BY name");
while($row = mysql_fetch_array($result))
{
print ("<tr>");
print ("<td width='200' bgcolor='#0f1e37'> </td>");
print ("<td width='300' bgcolor='#2c58a2' class='H16'>");
print ("Name: ".$row[vorname].$row[name]);
print ("<BR>Abteilung".$row[abteilung].$row[bereich]);
print ("<BR>Telefon: ".$row[telefon]);
print ("<BR>Fax: ".$row[fax]);
print ("<BR>Mobil: ".$row[handy]);
print ("<BR>E-Mail: ".$row[email]);
print ("<td>");
print ("<td width='140' bgcolor='#0f1e37'> </td>");
print ("</tr>");
}
print ("<tr><td width=200 bgColor=0F1E37></td><td width=300 bgColor=#2c58a2 class=H16><INPUT type=submit name=Liste erstellen></td><td width=140 bgColor=0F1E37><img src=/images/transparent.gif width=1 height=1></td></tr></form>");
print ("</table></table>");

Ich habe es jetzt getrennt, damit ich besser zurecht komme.

c4
24.04.2003, 08:58:13
Dumm gefragt: Im URL steht datei.php?name=Scholz und er zeigt den Nutzer Scholz nicht an?
Stimmt die Groß- und Kleinschreibung mit der DB überein?
Der Code sieht ja mal wieder okay aus - von den fehlenden ' bei $row['Bezeichner'] mal abgesehen...

Stella
24.04.2003, 09:04:47
http://62.153.211.38/cdhomepage/test.php?name=B%FChl&name=Essert&name=L%FCck&name=Raule&Liste=

So sieht die URL aus. Die Checkbox muß ja den gleichen Namen haben wie das Feld in der DB? Die Groß-Klein Schreibung müßte stimmen.

Er zeigt hinterher nicht den kompletten Datensatz an.

c4
24.04.2003, 09:16:29
Ich bin heute etwas langsam im Verarbeiten, ich merk das schon. :(

Trotzdem: Ideen zur Lösung (http://tut.php-q.net/formulare.html#u10)

Schreib statt
<input type="checkbox" name="name" value="Essert">
<input type="checkbox" name="name" value="Lück">

lieber
<input type="checkbox" name="name[]" value="Essert">
<input type="checkbox" name="name[]" value="Lück">

Damit wird von PHP ein Array $name erzeugt.
$name[0]=="Essert" und $name[1]=="Lück"

Dieses Array kannst Du dann mittels Schleife durchlaufen und dann Datensatz für Datensatz anzeigen lassen.

$i=0; while ($i<count($name))
{
$result=mysql_query("SELECT ... WHERE name='".$name[$i]."' ..");
// Ausgabe der Datensätze vom Nutzer
$i++;
}


Der Name des Feldes im Quelltext des Formulares muss nicht mit dem Feldnamen der DB übereinstimmen. Es vereinfacht nur das Verständnis.


Am Besten wäre es natürlich, wenn Du jedem Nutzer eine ID zuweist und dann nur mit dieser arbeitest. Erspart Dir so manches an Arbeit.

Stella
24.04.2003, 09:20:54
eine ID habe ich angelegt... so hat Adali z.B. 1 und so nummeriert das sich durch...

c4
24.04.2003, 09:25:26
Nun, dann hättest Du Dir das Theater mit den Namen eigentlich sparen können. Aber warum einfach, wenn es auch anders geht...

Ach so, ist das andere eigentlich soweit klar?

Stella
24.04.2003, 09:27:23
wie kann ich denn den einzelnen checkboxen den namen zu weisen, denn die in einer while-schleife entstehen? das versteh ich nicht so ganz...

c4
24.04.2003, 09:40:54
Ich schlage mal vor, Du verabschiedest Dich von den Namen und gehst zu den IDs über? Gute Idee? Fein.

Du fragst ab, welche IDs es alles gibt und gibst diese einfach aus. Ungefähr so:

<form action="test.php" method="post">
<?php
$result=mysql_query("SELECT id, name, vorname FROM kontakte ORDER BY name");
while ($row=mysql_fetch_array($result))
{ echo " <input type="checkbox" name="id" value="".$row['id'].""> ".$row['name'].", ".$row['vorname']."<br>n"; }
?>
<input type="submit" value="Infos anzeigen">
</form>

Jetzt gibt er Dir ungefähr das aus (X = Checkbox):
X Adali, Sinan
X Beigel, Joachim
X Gehring, Nina
usw.

Was dann passiert, wenn das Formual abgeschickt wurde steht dann da oben. Statt name aber id - klar.

Stella
24.04.2003, 10:07:30
nö...

c4
24.04.2003, 12:54:23
Du hast eigentlich gar keine Chance. Ich werde jetzt so lange auf Dich einreden, bis Du mir glaubst, dass es besser ist mit IDs zu arbeiten. :)

So, ich versuch's mal:
- Was machst Du denn, wenn jemand Mayer auswählt und es aber 3 Mayers gibt? Dann wird Karl Mayer, Fritz Mayer und Ottokar Mayer angezeigt. Das wollte der Nutzer aber gar nicht. Mit einer ID könntest Du exakt bestimmen, welche Person der Nutzer meinte.
- Mit den Vornamen ist es das Selbe Dilemma. Ergo: IDs sind besser.
- Vorname und Nachname vergleichen: Okay, das ginge. Sieht aber nicht sehr elegant aus. Außerdem, was ist, wenn die Person heiratet und der Nachname sich ändert? Jemand, der diese Person in die Bookmarks aufgenommen hat, bekommt beim nächsten Aufruf eine leere Seite zu Gesicht. Mit einer ID kann das nicht passieren, denn die bleibt jeder Person erhalten.

So, die folgenden beiden Skripte sollten eigentlich genau das machen, was Du wolltest: Alle Nutzer anzeigen, Checkbox davor und wenn man das Ding dann abschickt werden alle Daten dieser Nutzer angezeigt. Das Layout will natürlich noch angepasst werden.
Ich hab mir noch die Freiheit genommen, dass der Besucher auf einen Namen klicken kann und dann auch die Infos von dieser Person angezeigt bekommt.
So, da hast Du:

// Auswahl
<form action="test.php" method="post">
<?php
$result=mysql query("SELECT id, name, vorname FROM kontakt ORDER BY name");
while ($row=mysql fetch array($result))
{
echo " <input type="checkbox" name="id" value="".$row['id']."">";
echo "<a href="test.php?id[]=".$row['id']."">".$row['name'].", ".$row['vorname']."</a><br>n";
}
?>
<input type="submit" value="Infos anzeigen">
</form>

// Anzeige (test.php)
<?php
$i=0; $ids=$ REQUEST['id'];
while ($i<count($ids))
{
$result=mysql query("SELECT * FROM kontakt WHERE id='".$ids[$i]."'");
$row=mysql fetch array($result);
print ("<tr>");
print ("<td width='200' bgcolor='#0f1e37'> </td>");
print ("<td width='300' bgcolor='#2c58a2' class='H16'>");
print ("Name: ".$row['vorname'].$row['name']);
print ("<BR>Abteilung".$row['abteilung'].$row['bereich']);
print ("<BR>Telefon: ".$row['telefon']);
print ("<BR>Fax: ".$row['fax']);
print ("<BR>Mobil: ".$row['handy']);
print ("<BR>E-Mail: ".$row['email']);
print ("<td>");
print ("<td width='140' bgcolor='#0f1e37'> </td>");
print ("</tr>");
print ("<tr><td width='200' bgColor='#0F1E37'></td>");
print ("<td width='300' bgColor='#2c58a2' class='H16'><INPUT type='submit' name='Liste erstellen'></td>");
print ("<td width='140' bgColor='#0f1e37'><img src='/images/transparent.gif' width='1' height='1'></td></tr></form>");
print ("</table></table>");
$i++;
}
?>


Glaubst Du mir das mit den IDs jetzt eigentlich?

Stella
24.04.2003, 12:57:46
das script vorher ging bei mir nicht... das mit der ID ist ja absolut klar... :-)
aber selbst wenn ich es nicht gewußt hätte, wäre ich spätestens jetzt überzeugt...
:D

Ich habe mir das ganze Quakenet-Tutorial ausgedruckt (Firma zahlt's) und dann werd ich mir das reindröhnen, bis ich den schrott auswendig kreuz und quer kann...

c4
24.04.2003, 13:05:22
aber selbst wenn ich es nicht gewußt hätte, wäre ich spätestens jetzt überzeugt... Yeah, I'm gooooooooood! :---------)

Das Skript von vorhin konnte nicht funktionieren. Schließlich wollte es die Tabelle kontakte aufrufen...

Jetzt will ich Dich aber nicht weiter stören bei Deiner kreuz und quer(y) Dröhnung.

Stella
24.04.2003, 13:09:58
recht hast du....

danke schön, du hast mich erleuchtet...
:--))))))